沼津高専 電子制御工学科
MIRS9801 ソフトウェア詳細設計書
MIRS9801-SOFT-0002-A03
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 1999.5.25 森島 田中 初版
A02 1999.6.15 森島 田中 全体的に修正
A03 1999.6.16 田中 島村 目次の追加,標準MIRS上での試験の変更

目次

  1. はじめに
  2. 概要
  3. リアルタイムモニタ
  4. タスク詳細
  5. 試験
  6. 作成ドキュメント一覧

1.はじめに

本ドキュメントは、MIRS9801基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。

2.概要

MIRS9801ソフトウェアはリアルタイムモニタMIRX68KとMIRX68K上で動作するタスクから構成される。タスクは低レベルタスクと高レベルタスクとメインタスクに大別され、基本的には低レベルタスクはハードウェアの制御を高レベルタスクは低レベルタスクを用いてシステムの動作を実現する。メインタスク(行動計画タスク)はスイッチ状態やセンサ情報をもとに動作を決定しそれに応じたタスクの起動を行う。MIRS9801ソフトウェアは下記のタスクから構成される。

低レベルタスク
・task00:MMIタスク
・task01:超音波センサタスク
・task02:ロータリーエンコーダタスク
・task03:タッチセンサタスク
・task04:PWM駆動タスク

高レベルタスク
・task05:距離セットタスク
・task06:方向修正タスク
・task07:ポスト獲得タスク
・task08:障害物回避タスク
・task09:センサ試験タスク
・task10:試験走行タスク

メインタスク
・task11:行動計画タスク
・task12:ポスト探索タスク
・task13:横移動タスク


3.リアルタイムモニタ

タスクの優先順位について
同じ優先順位の中では先に登録(この場合左側に書かれているもの)されているものを優先する。

未定
優先順位 タスク
   0 task00,task04,task02
   1 task01,task03
   2 task05,task06
   3 task08,task07
   4 task13,task12
   5 task09,task10
   6 task11

タスクの処理について

書くタスクがどの処理を行っているかの一覧表。 使用している処理はO、使用していない処理はXであらわす。
タスク名 初期設定 割り込み処理 タイマ処理 コマンド処理
tas00MMIタスク 0 X 0 X
task01超音波センサタスク 0 0 X 0
task02ロータリーエンコーダタスク 0 0 0 X
task03タッチセンサタスク 0 0 X X
task04PWM駆動タスク 0 X 0 X
task05距離セットタスク 0 X X 0
task06方向修正タスク 0 X 0 X
task07ポスト獲得タスク 0 0 X 0
task08障害物回避タスク 0 X X 0
task09センサ試験タスク 0 X X 0
task10試験走行タスク 0 0 X 0
task11行動計画タスク 0 0 0 X
task12ポスト探索タスク 0 0 0 X
task13横移動タスク 0 0 0 X


4.タスク詳細


低レベルタスク


task00:MMI制御モジュールタスク

1.機能

2.コマンド仕様

コマンド名 コード(HEX) サブコマンド 機能
       

3.BB仕様

番号 内容
 1 DIPスイッチの状況
  2 LED表示データ

4.初期設定
void mmi_init()で初期化。その後にノーマルタスクvoid nrmt00()を実行。ディップスイッチのデータをBBに書き込む。
1.定義
void inzt00():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート


図1.1.inzt00モジュールHCPチャート

5.割り込み処理
無し

6.タイマ処理
ロータリーエンコーダのデータを読み込み、そのデータに対応するLED表示データの状態を見てLEDを表示する。
1.定義
void timt00():タイマ割り込みによっていって時間ごとに実行。
2.HCPチャート


図1.2.timt00モジュールHCPチャート

7.コマンド処理
無し


task01:超音波センサ制御タスク

1.機能
一定時間ごとに実行し、超音波を受信ごとに計測データをBBに書き込む。

2.コマンド使用

コマンド名 コード(HEX) サブコマンド 機能
切り替え及び測定開始      01 2(チャネル数) 左右の超音波センサを交互に起動して測定する。

3.BB仕様

番号 内容
  1 左の超音波センサの計測データ
  2 右の超音波センサの計測データ
  3 超音波選択データ
  4 過去の左の超音波センサの計測データ
  5 過去の右の超音波センサの計測データ

4.初期設定
void uss_init()を用いる。BBを初期化し、割り込みタスク登録をする。
1.定義
void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
2.HCPチャート

図2.1.inzt01モジュールHCPチャート

5.割り込み処理
超音波センサが超音波を受信し割り込み要求信号を出した時に、その計測データから距離を計算し、BBに書き込む。なお、右の超音波のデータは値が帰ってきた場合はtask05の残距離(ポスト)xにも書きこむ。
1.定義
void intt01():超音波センサの受信による割り込み要求信号により実行される。
2.HCPチャート


図2.2.intt01モジュールHCPチャート

6.タイマ処理
無し

7.コマンド処理
超音波の選択、切り替え、送信を行う。
1.定義
void nrmt01(): task12ポスト探索タスクから呼び出され実行。
2.HCPチャート


図2.4.nrmt01モジュールHCPチャート


task02:ロータリーエンコーダタスク

1.機能
ロータリーエンコーダの値を読み取り、それから自機位置x,yを導出する。結果をBBに書きこむ。赤外線の割り込みにより赤外線の反応の有無についても扱う。なおMIRS9801では赤外線とタッチセンサを入れ替えたためソフトのほうも丸々赤外線とタッチセンサが入れ替わっている。

2.コマンド仕様

コマンド名 コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
  1 ロータリーエンコーダ左タイヤデータ
  2 ロータリーエンコーダ右タイヤデータ
  3 自機位置x
  4 自機位置y
  5 赤外線データ
  6 過去自機位置x
  7 過去自機位置y

4.初期設定
void rs_ts_init()をにロータリーエンコーダと赤外線ののデータを初期化する。割り込みタスク登録・タイマタスクの登録をする。
1.定義
void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
2.HCPチャート


図3.1.inzt02モジュールHCPチャート

5.割り込み処理
赤外線による割り込みによりどの赤外線の反応をしているか調べ結果をBBに書き込む。
1.定義
void intt02():赤外線センサの割り込み要求信号により実行される。赤外線センサの反応を調べBBに書き込む。
2.HCPチャート


図3.2.intt02モジュールHCPチャート

6.タイマ処理
一定時間ごとに起動され、ロータリーエンコーダの値を読み取り、位置の演算を行い、BBに書き込む。
1.定義
void timt02():タイマ割り込みによって一定時間ごとに起動される。
2.HCPチャート


図3.3.timt02モジュールHCPチャート

7.コマンド処理
今のところ無し。


task03:タッチセンサタスク

1.機能
タッチセンサより割り込み要求信号があるたびにどのタッチセンサが反応したかを調べ、そのデータの論理積(でいいの?)をとってBBに書き込む。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
  1 タッチセンサデータ

4.初期設定
赤外線初期化関数void irs_init()を使ってタッチセンサのBBのデータを初期化。割り込みタスクの登録を行う。
1.定義
inzt03():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート


図4.1.inzt03モジュールHCPチャート

5.割り込み処理
タッチセンサの割り込み要求信号により実行、どのタッチセンサが反応したかを調べ論理積にしてBBに書き込む。
1.定義
void intt03():タッチセンサの割り込み要求信号により実行される。
2.HCPチャート


図4.2.timt03モジュールHCPチャート

6.タイマ処理
今のところ無い

7.コマンド処理
今のところ無い


task04:PWM駆動タスク

1.機能
一定時間ごとに実行され、タスク起動時に引数として左右のタイヤに与えらる速度データをもとに動く。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
  1 左PWMデータ
  2 右PWMデータ

4.初期設定
void_pwm_init()を用い、PWMのBBのデータを初期化。タイマタスクの登録。
1.定義
void inzt04():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート


図5.1.tinzt04モジュールHCPチャート

5.割り込み処理
今のところ無し

6.タイマ処理
一定時間ごとに実行されvoid pwm_data(int r, int l)によって引数のデューティー比をPWMに書き込む。移動しきれなかった分はリセット。
1.定義
void timt04():タイマ割り込みによって一定時間ごとに実行される。
2.HCPチャート


図5.2.timt04モジュールHCPチャート

7.コマンド処理
今のところ無し。


高レベルタスク


task05:距離セットタスク

1.機能
縦の残距離(壁までの距離)yと横の残距離(ポストまでの距離)xを計算する。yはロータリーエンコーダの値によって計算(引き算)し、xは初期値を超音波センサ右の値とし、後はロータリーエンコーダの値によって計算(引き算)する。どちらもタッチセンサに反応があった時に残距離がほぼ0なら目標物と判断する。実行するタイミングは当面はロータリーエンコーダの計測終了毎。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
残距離セット  01   ロータリーエンコーダの値から残距離の設定のし直し。簡単に言うと値の引き算。

3.BB仕様

番号 内容
  1 残距離(壁)y
  2 残距離(ポスト)x

4.初期設定
BBのデータを初期化。残距離(壁)yの値を設定。
1.定義
void inzt05():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図6.1.inzt05モジュールHCPチャート

5.割り込み処理
無し

6.タイマ処理
無し

7.コマンド処理
ロータリーエンコーダの値の計測毎に起動される。その時点でのロータリーエンコーダの値を読み(この後ロータリーエンコーダの値は初期化される。)、残距離y=残距離y-ロータリーエンコーダという計算行う。横移動中は残距離x=残距離x-ロータリーエンコーダという計算を行う。
1.定義
void nrmt05():ロータリーエンコーダ計測終了後に呼び出されて起動。
2.HCPチャート

図6.2.intt05モジュールHCPチャート


task06:方向修正タスク

1.機能
一定時間毎に起動し、超音波左により壁からの距離を修正する。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
なし        

3.BB仕様

番号 内容
  1 旧超音波センサ左データ
  2 修正データ左タイヤ(duty比)
  3 修正データ右タイヤ(duty比)

4.初期設定
BBにあるデータを初期化。割り込みタスクの登録。
1.定義
void inzt06():リアルタイムモニタから呼び出される初期設定タスク。
2.HCPチャート

図7.1.inzt06モジュールHCPチャート

5.割り込み処理
超音波の左に反応はあるごとに起動。その時の超音波センサ左のデータとその前の超音波センサ左のデータとを比較して方向修正のためのデータを作成(PWMのデータとして)。そしてそのデータをPWMの方に送り実際に動かす。
1.定義
oivd intt06():超音波センサの割り込み要求信号で起動。
2.HCPチャート

図7.2.intt06モジュールHCPチャート

6.タイマ処理
無し

7.コマンド処理
無し


task07:ポスト獲得タスク

1.機能
ポストを獲得し、赤外線センサにより獲得されたか否かを判断するタスク。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
回転  01   タッチセンサの値から回転角を計算し回転、その後ポストのまわりを周回する。

3.BB仕様

番号 内容
  1

4.初期設定
BBのデータの初期化。割り込みタスクの登録。
1.定義
void inzt07():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図8.1.inzt07モジュールHCPチャート

5.割り込み処理
赤外線の割り込み要求信号にたいして発動。スイッチ押下に入る。そしてスイッチ押下後は再度コマンド処理の続きを呼び出す。
1.定義
void intt07():赤外線の割り込み要求信号により起動。
2.HCPチャート

図8.2.intt07モジュールHCPチャート

6.タイマ処理
無し

7.コマンド処理
task13のポスト中心データより回転、その後ポストの周りの周回をはじめる。終了後にtask11行動計画タスクの獲得終了フラグを立てる。
1.定義
void nrmt07():task13横移動タスクから呼び出される。
2.HCPチャート


task08:障害物回避タスク

1.機能
タッチセンサに反応があり、それが障害物であるとはんだされた場合のみ起動。障害物を回避し、その移動分を距離セットタスクの残距離データに書きこむ。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
回避      01   障害物を回避。

3.BB仕様

番号 内容

4.初期設定
BBのデータの初期化。
1.定義
void inzt08():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図9.1.inzt08モジュールHCPチャート

5.割り込み処理
今のところ無し。

6.タイマ処理
今のところ無し

7.コマンド処理
回避を行う。回避の仕方はtask13のポストの中心データよりどちら側(ポストの右か左かということ)に回避するかを決める。その後移動(回避)。終了後task11行動計画タスクの回避終了フラグを立てる。
1.定義
void nrmt08():初期設定関数から呼び出される。
2.HCPチャート

図9.2.nrmt08モジュールHCPチャート


task09:センサ試験タスク

1.機能
各センサが正常に動作するかの試験。DIPスイッチによってどのセンサを試験するかを選別する。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
センサ試験      01   DIPスイッチの状況より試験するセンサを選択後試験。
       

3.BB仕様

番号 内容
  1 LED表示データ
  2 DIPスイッチ選択データ

4.初期設定
BBのデータを初期化。
1.定義
void inzt09():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図10.1.inzt09モジュールHCPチャート

5.割り込み
今のところ無し。

6.タイマ処理
今のところ無し。

7.コマンド処理
詳細は、試験項目を参照
1.定義
void nrmt09():センサのテストをする。
2.HCPチャート

図10.2.nrmt09モジュールHCPチャート


task10:行動試験タスク

1.機能
各行動が正常に動作するかの試験。DIPスイッチによってどの行動を試験するかを選別する。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
選択及び試験      02   実際に試験させる。
       

3.BB仕様

番号 内容
  1 LED表示データ
  2 DIPスイッチ選択データ

4.初期設定
BBのデータを初期化。コマンド処理void nrmt09()を呼び出す。
1.定義
void inzt10():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図11.1.inzt10モジュールHCPチャート

5.割り込み
Mirsが暴走したときのためのハードウェア割り込み。

6.タイマ処理
今のところ無し。

7.コマンド処理
DIPスイッチの状態よりどの行動を試験するかを判断。それぞれの行動に関するタスクを呼び出して実行。結果をBBにから読み、それをLEDで表示する。
1.定義
void nrmt10():初期設定関数から呼び出されて起動。
2.HCPチャート

図11.2.nrmt10モジュールHCPチャート

 


task11:行動計画タスク

1.機能
MIRSの行動を司るタスク。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
  1 フラグ01獲得終了フラグ:task07ポスト獲得タスク終了後このフラグが立てられ、このタスクが終わった目印になる。
  2 フラグ02回避終了フラグ:task08障害物回避タスク終了後このフラグが立てられ、このタスクが終わった目印になる。
  3 フラグ03開始タスク判別フラグ:task12ポスト探索タスクからほかのタスクを呼び出した場合このフラグは降りたままで、task13横移動タスクからほかのタスクを呼び出した場合このフラグを立てる。

4.初期設定
BBのデータを初期化。task00:MMIタスクを呼び出して初期設定を行う。タイマタスク・割り込みタスクの登録をする。
1.定義
void inzt11():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図12.1.inzt11モジュールHCPチャート

5.割り込み
mirsのモータ駆動部の電源が投入されたら起動。DIPスイッチの状態によりtask09センサ試験タスクやtask10試験走行タスクを呼び出す。

6.タイマ処理
一定時間毎にBBのデータのフラグを見てフラグ01orフラグ02が立っていたらフラグ03の状況によりtask08障害物回避タスクかtask12ポスト探索タスクかtask13横移動タスクを呼び出す。その後立っているフラグを下げる(フラグ03は除く)。
1.定義
void timt11():一定時間毎に呼び出される。
2.HCPチャート

図12.1.timt11モジュールHCPチャート

7.コマンド処理
無し


task12:ポスト探索タスク

1.機能
MIRSの走行(縦)とポスト探索を司るタスク。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
1 ポスト中心データ

4.初期設定
BBのデータを初期化。割り込みタスク・タイマタスクの登録をする。
1.定義
void inzt12():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図13.1.inzt12モジュールHCPチャート

5.割り込み
超音波センサかタッチセンサの割り込み要求信号より起動。超音波センサの場合task13横移動タスクを呼び出す。 タッチセンサの場合タッチセンサのデータをBBより読み込み、それからポストの中心を判断し(壁の場合もある)、その値をBBに書きこむ。距離セットタスクの残距離(ポスト)xの値によりtask07ポスト獲得タスクか、task13横移動タスクを呼び出す。

1.定義
void intt12():タッチセンサの割り込み要求信号により起動される。
2.HCPチャート
図13.2.intt12モジュールHCPチャート

6.タイマ処理
縦移動をする。
1.定義
void timt12():タイマ割り込みにより一定時間毎に起動される。
2.HCPチャート

図13.3.timt12モジュールHCPチャート

7.コマンド処理
今のところ無し。


task13:横移動タスク

1.機能
MIRSの走行(横)を司るタスク。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能

3.BB仕様

番号 内容
  1 ポスト中心データ

4.初期設定
BBのデータを初期化。割り込みタスク・タイマタスクの登録をする。
1.定義
void inzt13():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図14.1.inzt13モジュールHCPチャート

5.割り込み
タッチセンサの割り込み要求信号より起動、タッチセンサのデータをBBより読み込み、それからポストの中心を判断し(壁の場合もある)、その値をBBに書きこむ。距離セットタスクの残距離(ポスト)xの値によりtask07ポスト獲得タスクか、task08障害物回避タスクを呼び出す。

1.定義
void intt13():タッチセンサの割り込み要求信号により起動される。
2.HCPチャート
図14.2.timt13モジュールHCPチャート

6.タイマ処理
横移動をする。 1.定義
void timt13():タイマ割り込みにより一定時間毎に起動される。
2.HCPチャート

図14.3.timt13モジュールHCPチャート

7.コマンド処理
今のところ無し。


5.試験 ソフトウェア試験


<システム試験 >

試験用に作成したプログラムを使用

ディップスイッチ、押しボタンスイッチにより試験項目を選択する。

1. 規定動作試験(ディップスイッチを0に設定)

ディップスイッチを0に設定した後、更に以下に示すように設定する。

1.1 動きを設定(ディップスイッチ下位2ビットの設定)

0:その場回転
1:半径25cmの円を描く
2:半径50cmの円を描く
3:1m前進

1.2 速度を設定(ディップスイッチ上位2ビットの設定)

0:0.3m/sec
1:0.6m/sec
2:0.8m/sec
3:1.0m/sec

1.3 タッチセンサの設定(進行方向、回転方向を決定)

前、左:前進または左回転
右  :後退または右回転

2. 各センサ動作試験(ディップスイッチを5に設定)

押しボタンスイッチにより、以下の順に試験項目を選択。

2.1 RTCによるタイマ割り込み

10分の1秒単位のカウンタを7seg.LEDに表示。

2.2 自己座標算出

自己のX座標、Y座標をディップスイッチにより順次切り替えて7seg.LEDに表示。

2.3 超音波センサ

使用するセンサを押しボタンスイッチにより順次切り替えて7seg.LEDに表示。

2.4 タッチセンサ

反応のあったセンサに対応する番号を7seg.LEDに表示。

2.5 赤外線センサ

前方を0°として、ディップスイッチにより切り替えて7seg.LEDに赤外線の方向を角度で表示。

2.6 ディップスイッチ

ディップスイッチの状態を7seg.LEDで表示。

2.7 ロータリエンコーダ

ロータリエンコーダのカウント値を7seg.LEDで表示。


<標準MIRS上での試験>

試験用に作成したプログラムを使用

MIRS9801システムの基本的な動作を基に試験を行う。

1. 動作試験

基本的動作

超音波で距離を測定,表示しながら直進する。
タッチセンサに反応があると、右に90度その場回転する。
その後、超音波を送信せずに1.9m直進し、右に90度回転する。
ここでは、どの程度の誤差が生じるか測定する。

ポスト獲得動作

ポストの周りを回る。
赤外線に反応があったら、停止する。
赤外線に反応がなかった場合、1周して停止する。
ポストの周りをどの程度の誤差でまわれるか測定する。


6.作成ドキュメント一覧

ソフトウェアインストール手順書

MIRS9801.c(プログラムファイル)
MIRS9801タスク単体試験仕様書
MIRS9801標準MIRS上試験仕様書
MIRS9801規定走行試験仕様書
MIRS9801システム試験仕様書
MIRS9801取扱説明書
関連文書