沼津高専 電子制御工学科 | ||||||
|
||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 1999.5.25 | 森島 | 田中 | 初版 | ||
A02 | 1999.6.15 | 森島 | 田中 | 全体的に修正 | ||
A03 | 1999.6.16 | 田中 | 島村 | 目次の追加,標準MIRS上での試験の変更 |
目次
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 |
タスク名 | 初期設定 | 割り込み処理 | タイマ処理 | コマンド処理 |
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チャート
5.割り込み処理
無し
6.タイマ処理
ロータリーエンコーダのデータを読み込み、そのデータに対応するLED表示データの状態を見てLEDを表示する。
1.定義
void timt00():タイマ割り込みによっていって時間ごとに実行。
2.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チャート
5.割り込み処理
超音波センサが超音波を受信し割り込み要求信号を出した時に、その計測データから距離を計算し、BBに書き込む。なお、右の超音波のデータは値が帰ってきた場合はtask05の残距離(ポスト)xにも書きこむ。
1.定義
void intt01():超音波センサの受信による割り込み要求信号により実行される。
2.HCPチャート
6.タイマ処理
無し
7.コマンド処理
超音波の選択、切り替え、送信を行う。
1.定義
void nrmt01(): task12ポスト探索タスクから呼び出され実行。
2.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チャート
5.割り込み処理
赤外線による割り込みによりどの赤外線の反応をしているか調べ結果をBBに書き込む。
1.定義
void intt02():赤外線センサの割り込み要求信号により実行される。赤外線センサの反応を調べBBに書き込む。
2.HCPチャート
6.タイマ処理
一定時間ごとに起動され、ロータリーエンコーダの値を読み取り、位置の演算を行い、BBに書き込む。
1.定義
void timt02():タイマ割り込みによって一定時間ごとに起動される。
2.HCPチャート
7.コマンド処理
今のところ無し。
task03:タッチセンサタスク
1.機能
タッチセンサより割り込み要求信号があるたびにどのタッチセンサが反応したかを調べ、そのデータの論理積(でいいの?)をとってBBに書き込む。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
3.BB仕様
番号 | 内容 |
1 | タッチセンサデータ |
4.初期設定
赤外線初期化関数void irs_init()を使ってタッチセンサのBBのデータを初期化。割り込みタスクの登録を行う。
1.定義
inzt03():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
タッチセンサの割り込み要求信号により実行、どのタッチセンサが反応したかを調べ論理積にしてBBに書き込む。
1.定義
void intt03():タッチセンサの割り込み要求信号により実行される。
2.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.割り込み処理
今のところ無し
6.タイマ処理
一定時間ごとに実行されvoid pwm_data(int r, int l)によって引数のデューティー比をPWMに書き込む。移動しきれなかった分はリセット。
1.定義
void timt04():タイマ割り込みによって一定時間ごとに実行される。
2.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チャート
5.割り込み処理
無し
6.タイマ処理
無し
7.コマンド処理
ロータリーエンコーダの値の計測毎に起動される。その時点でのロータリーエンコーダの値を読み(この後ロータリーエンコーダの値は初期化される。)、残距離y=残距離y-ロータリーエンコーダという計算行う。横移動中は残距離x=残距離x-ロータリーエンコーダという計算を行う。
1.定義
void nrmt05():ロータリーエンコーダ計測終了後に呼び出されて起動。
2.HCPチャート
task06:方向修正タスク
1.機能
一定時間毎に起動し、超音波左により壁からの距離を修正する。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
なし |
3.BB仕様
番号 | 内容 |
1 | 旧超音波センサ左データ |
2 | 修正データ左タイヤ(duty比) |
3 | 修正データ右タイヤ(duty比) |
4.初期設定
BBにあるデータを初期化。割り込みタスクの登録。
1.定義
void inzt06():リアルタイムモニタから呼び出される初期設定タスク。
2.HCPチャート
5.割り込み処理
超音波の左に反応はあるごとに起動。その時の超音波センサ左のデータとその前の超音波センサ左のデータとを比較して方向修正のためのデータを作成(PWMのデータとして)。そしてそのデータをPWMの方に送り実際に動かす。
1.定義
oivd intt06():超音波センサの割り込み要求信号で起動。
2.HCPチャート
6.タイマ処理
無し
7.コマンド処理
無し
task07:ポスト獲得タスク
1.機能
ポストを獲得し、赤外線センサにより獲得されたか否かを判断するタスク。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
回転 | 01 | タッチセンサの値から回転角を計算し回転、その後ポストのまわりを周回する。 |
3.BB仕様
番号 | 内容 |
1 |
4.初期設定
BBのデータの初期化。割り込みタスクの登録。
1.定義
void inzt07():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
赤外線の割り込み要求信号にたいして発動。スイッチ押下に入る。そしてスイッチ押下後は再度コマンド処理の続きを呼び出す。
1.定義
void intt07():赤外線の割り込み要求信号により起動。
2.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チャート
5.割り込み処理
今のところ無し。
6.タイマ処理
今のところ無し
7.コマンド処理
回避を行う。回避の仕方はtask13のポストの中心データよりどちら側(ポストの右か左かということ)に回避するかを決める。その後移動(回避)。終了後task11行動計画タスクの回避終了フラグを立てる。
1.定義
void nrmt08():初期設定関数から呼び出される。
2.HCPチャート
task09:センサ試験タスク
1.機能
各センサが正常に動作するかの試験。DIPスイッチによってどのセンサを試験するかを選別する。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
センサ試験 | 01 | DIPスイッチの状況より試験するセンサを選択後試験。 | |
3.BB仕様
番号 | 内容 |
1 | LED表示データ |
2 | DIPスイッチ選択データ |
4.初期設定
BBのデータを初期化。
1.定義
void inzt09():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み
今のところ無し。
6.タイマ処理
今のところ無し。
7.コマンド処理
詳細は、試験項目を参照
1.定義
void nrmt09():センサのテストをする。
2.HCPチャート
task10:行動試験タスク
1.機能
各行動が正常に動作するかの試験。DIPスイッチによってどの行動を試験するかを選別する。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
選択及び試験 | 02 | 実際に試験させる。 | |
3.BB仕様
番号 | 内容 |
1 | LED表示データ |
2 | DIPスイッチ選択データ |
4.初期設定
BBのデータを初期化。コマンド処理void nrmt09()を呼び出す。
1.定義
void inzt10():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み
Mirsが暴走したときのためのハードウェア割り込み。
6.タイマ処理
今のところ無し。
7.コマンド処理
DIPスイッチの状態よりどの行動を試験するかを判断。それぞれの行動に関するタスクを呼び出して実行。結果をBBにから読み、それをLEDで表示する。
1.定義
void nrmt10():初期設定関数から呼び出されて起動。
2.HCPチャート
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チャート
5.割り込み
mirsのモータ駆動部の電源が投入されたら起動。DIPスイッチの状態によりtask09センサ試験タスクやtask10試験走行タスクを呼び出す。
6.タイマ処理
一定時間毎にBBのデータのフラグを見てフラグ01orフラグ02が立っていたらフラグ03の状況によりtask08障害物回避タスクかtask12ポスト探索タスクかtask13横移動タスクを呼び出す。その後立っているフラグを下げる(フラグ03は除く)。
1.定義
void timt11():一定時間毎に呼び出される。
2.HCPチャート
7.コマンド処理
無し
1.機能
MIRSの走行(縦)とポスト探索を司るタスク。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
3.BB仕様
番号 | 内容 |
1 | ポスト中心データ |
4.初期設定
BBのデータを初期化。割り込みタスク・タイマタスクの登録をする。
1.定義
void inzt12():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み
超音波センサかタッチセンサの割り込み要求信号より起動。超音波センサの場合task13横移動タスクを呼び出す。
タッチセンサの場合タッチセンサのデータをBBより読み込み、それからポストの中心を判断し(壁の場合もある)、その値をBBに書きこむ。距離セットタスクの残距離(ポスト)xの値によりtask07ポスト獲得タスクか、task13横移動タスクを呼び出す。
6.タイマ処理
縦移動をする。
1.定義
void timt12():タイマ割り込みにより一定時間毎に起動される。
2.HCPチャート
7.コマンド処理
今のところ無し。
1.機能
MIRSの走行(横)を司るタスク。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
3.BB仕様
番号 | 内容 |
1 | ポスト中心データ |
4.初期設定
BBのデータを初期化。割り込みタスク・タイマタスクの登録をする。
1.定義
void inzt13():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み
タッチセンサの割り込み要求信号より起動、タッチセンサのデータをBBより読み込み、それからポストの中心を判断し(壁の場合もある)、その値をBBに書きこむ。距離セットタスクの残距離(ポスト)xの値によりtask07ポスト獲得タスクか、task08障害物回避タスクを呼び出す。
6.タイマ処理
横移動をする。
1.定義
void timt13():タイマ割り込みにより一定時間毎に起動される。
2.HCPチャート
7.コマンド処理
今のところ無し。
試験用に作成したプログラムを使用
試験用に作成したプログラムを使用
MIRS9801システムの基本的な動作を基に試験を行う。
ソフトウェアインストール手順書 | |
MIRS9801.c(プログラムファイル) | |
MIRS9801タスク単体試験仕様書 | |
MIRS9801標準MIRS上試験仕様書 | |
MIRS9801規定走行試験仕様書 | |
MIRS9801システム試験仕様書 | |
MIRS9801取扱説明書 |
関連文書 |
---|