沼津高専 電子制御工学科 | ||||||
| ||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2000.5.30 | 佐田/稲葉/坪井 | 佐田 | 初版 | ||
A02 | 2000.6.23 | 佐田/稲葉/坪井 | 佐田 | 他のドキュメントとの整合 |
目次
Task No. | Initialization | Normal | Timer | Interrupt | Priority |
00 (MMI) | O | O | O | O | 2 |
01 (超音波センサ) | O | O | X | O | 3 |
02 (ロータリエンコーダ) | O | X | O | O | 3 |
03 (タッチセンサ) | O | X | O | O | 3 |
04 (PWM) | O | O | O | X | 1 |
05 (距離セット) | O | X | X | O | 4 |
06 (方向修正) | O | O | O | X | 4 |
07 (ポスト獲得) | O | O | X | O | 3 |
08 (障害物回避) | O | O | X | X | 4 |
09 (センサ試験) | O | O | X | X | 4 |
10 (行動試験) | O | O | X | O | 5 |
11 (行動計画) | O | X | O | O | 6 |
12 (ポスト探索) | O | X | O | O | 5 |
13 (横移動) | O | X | O | O | 5 |
低レベルタスク
コマンド名 | コード
(HEX) |
サブコマンド | 機能 |
表示 | 01 | n(BBの番号) | 指定されたBB上のデータを表示する。4桁までしか表示しない。 |
赤緑LED点灯設定 | 02 | n(Flag) | 赤緑LEDの点灯状態の設定。設定にはフラグn(内容はタイマタスク参照)を使う |
ロータリフラグの設定 | 03 | n(Flag) | ロータリフラグの設定(True or False) |
押しボタンの設定 | 04 | n(Flag) | 押しボタン割り込み許可フラグの設定(True or False) |
マクロ | 機能 | 説明 |
DISP_SET(x,y) | 表示データ設定 | x 番目の表示データを y に設定 |
LED_SET(x) | LED点灯データ設定 | 赤緑LEDの点灯データを x に設定 |
番号 | 内容 | |
0 | 表示データその1のポインタ | |
1 | 表示データその2のポインタ | |
2 | 表示データその3のポインタ | |
3 | 表示データその4のポインタ | |
4 | 表示するBB番号のポインタ | |
5 | ローテーションフラグのポインタ | |
6 | 赤、緑LED表示状態のポインタ | |
7 | 押しボタン割り込みフラグのポインタ | |
8 | ロータリスイッチの値 | |
9 | 押しボタンの押された回数 |
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
意味 | 0 | 緑前状態 | 緑点滅 | 緑点灯 | 0 | 赤前状態 | 赤点滅 | 赤点灯 |
task01:超音波センサ制御タスク
1.機能
4個の超音波を入力された順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスク
が起動されると、停止コマンドが実行されるまで測定を行い結果をBBに書き込む。超音波発信したのち
、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動
され距離を計算してBBに書き込む。その後、次の決定したチャネルのセンサより超音波を発信し再び割
り込み待ち状態になる。
コマンド名 | コード
(HEX) |
サブコマンド | 機能 |
測定開始 | 01 | n(チャネル) | 指定されたチャネル番号のセンサの測定を開始する。測定はqueに登録された順で行われる。既に測定が開始されている状態でこのコマンドが起動されたときはqueに登録する。 |
測定停止 | 02 | any(未使用) | 測定を停止し、queをクリアする。 |
測定開始 | 03 | any(未使用) | 測定を開始。QUE への登録は無し。(通常は使用禁止) |
番号 | 内容 | |
0 | チャネル0の測定結果[cm]
タイムアウト:999 ハードウェアエラー(センサの接続など):888 近すぎ: 777 |
|
1 | チャネル0の測定回数 | |
2 | チャネル1の測定結果[cm]
他は同上 |
|
3 | チャネル1の測定回数 | |
4 | チャネル2の測定結果[cm]
他は同上 |
|
5 | チャネル2の測定回数 | |
6 | チャネル3の測定結果[cm]
他は同上 |
|
7 | チャネル3の測定回数 | |
8 | queに入っている個数 | |
9 | queの中身(bit coding) |
task02:ロータリーエンコーダタスク
1.機能
ロータリーエンコーダの値を読み取り、それから自機位置x,yを導出する。結果をBBに書きこむ。赤外線の割り込みにより赤外線の反応の有無についても扱う。
2.コマンド仕様
コマンド名 | コード(HEX) | サブコマンド | 機能 |
自機位置セット(x) | 01 | 3 | 自機位置の算出 |
自機位置セット(y) | 02 | 4 | 自機位置の算出 |
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.定義
interrupt void intt02():赤外線センサの割り込み要求信号により実行される。赤外線センサの反応を調べBBに書き込む。
2.HCPチャート
6.タイマ処理
一定時間ごとに起動され、ロータリーエンコーダの値を読み取り、位置の演算を行い、BBに書き込む。
1.定義
void timt02():タイマ割り込みによって一定時間ごとに起動される。
2.HCPチャート
7.コマンド処理
無し
task03:タッチセンサタスク
1.機能
タッチセンサより割り込み要求信号があるたびにどのタッチセンサが反応したかを調べ、そのデータをBBに書き込む。
2.コマンド仕様
コマンド名 | コード (HEX) |
サブコマンド | 機能 |
信号受信 | 01 | n | タッチセンサの状態をBBに書き込む。 |
番号 | 内容 |
1 | タッチセンサのデータ |
4.初期設定
Hardware Function Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void irs_init()を使ってタッチセンサのBBのデータを初期化。割り込みタスクの登録を行う。
1.定義
inzt03():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
タッチセンサの割り込み要求信号により実行、どのタッチセンサが反応したかを調べBBに書き込む。
1.定義
interrupt void intt03():タッチセンサの割り込み要求信号により実行される。
2.HCPチャート
6.タイマ処理
無い
7.コマンド処理
無い
task04:PWM駆動タスク
1.機能
一定時間毎に起動され、タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。
2.コマンド仕様
コマンド名 | コード (HEX) | サブコマンド | 機能 |
左右モータ駆動 | 01 | n | タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。 |
番号 | 内容 |
1 | 左PWMデータ |
2 | 右PWMデータ |
4.初期設定
void_pwm_init()を用い、PWMのBBのデータを初期化。タイマタスクの登録。
1.定義
void inzt04():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
無し
6.タイマ処理
一定時間ごとに実行されHFLのPWM系関数void pwm_data(int r, int l)によって引数のデューティー比をPWMに書き込む。
1.定義
void timt04():タイマ割り込みによって一定時間ごとに実行される。
2.HCPチャート
7.コマンド処理
無し。
高レベルタスク
task05:距離セットタスク
1.機能
縦の残距離(壁までの距離)yと,横の残距離(ポストまでの距離)xを計算する。yはロータリーエンコーダの値によって計算(引き算)し、xは初期値を超音波センサ右の値とし、後はロータリーエンコーダの値によって計算(引き算)する。タッチセンサに反応があった時に残距離がほぼ0ならポストと判断する。実行するタイミングはロータリーエンコーダの計測終了毎。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
残距離セット | 01 | n | ロータリーエンコーダの値から残距離を引き算による再設定。 |
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.コマンド仕様
3.BB仕様
番号 | 内容 |
1 | 旧超音波センサ左データ |
2 | 旧超音波センサ右データ |
3 | 修正データ左タイヤ(duty比) |
4 | 修正データ右タイヤ(duty比) |
4.初期設定
BBにあるデータを初期化。割り込みタスクの登録。
1.定義
void inzt06():リアルタイムモニタから呼び出される初期設定タスク。
2.HCPチャート
5.割り込み処理
左右の超音波センサに反応があるごとに起動。その時の左右の超音波センサデータと前回の左右超音波センサのデータとを比較して方向修正のためのデータを作成(PWMのデータとして)。そしてそのデータをPWMの方に送り実際に動かす。
1.定義
oivd intt06():超音波センサの割り込み要求信号で起動。
2.HCPチャート
6.タイマ処理
無し
7.コマンド処理
無し
task07:ポスト獲得タスク
1.機能
ポストを獲得し、赤外線センサにより獲得されたか否かを判断する。
同時に死角にあるポストの探索も行うタスク。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
回転 | 01 | 1 | 反応のあったタッチセンサの位置の値から回転角を計算し回転、その後ポストのまわりを多角形周りする。 |
超音波センサ | 02 | 2 | ポストを多角形に周りながら、ある範囲で外側の超音波センサによって 死角のポストを発見する。 |
3.BB仕様
番号 | 内容 |
1 | 前面の赤外線センサ |
2 | 外側の超音波センサデータ |
4.初期設定
BBのデータの初期化。割り込みタスクの登録。
1.定義
void inzt07():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
1周目は赤外線の割り込み要求信号にたいして発動。スイッチ押下に入る。そしてスイッチ押下後、2周目は超音波の割り込み要求信号に対して発動し、死角にあるポスト獲得に向かう。
1.定義
void intt07():赤外線の割り込み要求信号により起動。
2.HCPチャート
6.タイマ処理
無し
7.コマンド処理
タッチセンサの反応により回転、その後ポストの周りを多角形で周回する。終了後にtask11行動計画タスクの獲得終了フラグを立てる。
1.定義
void nrmt07():task13横移動タスクから呼び出される。
2.HCPチャート
task08:障害物回避タスク
1.機能
タッチセンサに反応があり、それが障害物であると判断された場合のみ起動。障害物を回避し、その移動分を距離セットタスクの残距離データに書きこむ。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
障害物回避 | 01 | 障害物回避行動をとる。 | |
壁回避 | 02 | 壁回避行動をとる.。 |
3.BB仕様
番号 | 内容 |
4.初期設定
BBのデータの初期化。
1.定義
void inzt08():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
5.割り込み処理
今のところ無し。
6.タイマ処理
今のところ無し
7.コマンド処理
回避を行う。回避の仕方はtask05の残距離yの値がほぼ0なら壁回避動作(決められた分だけ後退し180°その場回転)、yがほぼ0でなければ(この場合ポストにぶつかったことになる)反応したタッチセンサよりどちら側(ポストの右か左かということ)に回避するかを決める。その後移動(回避)。終了後task11行動計画タスクの回避終了フラグを立てる。
1.定義
void nrmt08():初期設定関数から呼び出される。
2.HCPチャート
task09:センサ試験タスク
1.機能
各センサが正常に動作するかを試験する。DIPスイッチによって試験するセンサを選別する。
2.コマンド仕様
コマンド | コード(HEX) | サブコマンド | 機能 |
センサ試験 | 01 | 2 | 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) | サブコマンド | 機能 |
選択及び試験 | 01 | 2 | 実際に試験させる。 |
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仕様
MIRSの行動は、ポスト探索、ポスト獲得、ポスト回避であるので、以下を定義する。番号 | 内容 |
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ポスト獲得タスクか、task08障害物回避タスクを呼び出す。
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ポスト獲得タスクを呼び出す。
6.タイマ処理
横移動をする。
1.定義
void timt13():タイマ割り込みにより一定時間毎に起動される。
2.HCPチャート
7.コマンド処理
無し
試験用に作成したプログラムを使用
試験用に作成したプログラムを使用
MIRS9901システムの基本的な動作を基に試験を行う。