- はじめに
本ドキュメントは、MIRS0102基本設計書(MIRS0102-DSGN-1001)に規定された システムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。
- 概要
MIRS2000 ソフトウェアは、RT-Linux 上で動作するプログラム群で構成される。 プログラムは、Linux の標準の API
とともに、行動モードに対応したプログラム、一つの機能を複数のプログラム群で提供する機能モジュール、および、RTタスク、ドライバと、補助関数と独自に定義したヘッダファイルから構成される。
本 MIRS では、行動モードに対応した次の9個のモードモジュールと3個のモード補助モジュールを用意する。
IO 制御は、超音波測定と駆動系の制御、白線探知センサを RT タスクとして駆動させ、 赤外線信号入力探知と、LCD
出力は、デバイスドライバを用いて行う。 デバイスドライバは、標準 API のデバイスドライバを利用する。
- OS(RT-Linux)の概要
OS(RT-Linux)の概要については下記の調査報告書へ。
技術調査報告 リアルタイム処理とRT-Linux
- 行動モードの詳細
- 待機モード
- 定義 :メインプログラムを立ち上げて、スタートスイッチが押されるまでの待機状態に入る。
- 遷移条件:電源スイッチをいれる。
- 初期動作モード
- 定義 :スタート位置から左へ90度回転し前進、白線を感知したところでとまり10cm後退し右90度回転、後退し白線を感知したところで止まり、その地点を(0,0)とする。
- 遷移条件:待機モードでスタートスイッチを入れること。
- ポスト探索モード
- 定義 :白線に沿って競技場を時計回りに進行しながらMIRS左側に設置した超音波測距センサにより、ポストの探索を行う。ポストを発見したらそのポストの位置を記憶する。(記憶するのは超音波センサで測ったMIRSからポストまでの距離とロータリーエンコーダの値。)
- 遷移条件:初期動作モード→ポスト探索モード ポスト探索ルート復帰モード→ポスト探索モード
- ポスト接近モード
- 定義 :ポストへと直進接近する。この時MIRS前面に設置した赤外線センサが反応した場合、特別モードへ移る。そうでなければ前面部タッチセンサがぶつかるまで直進、その後ポストの中心を見つけてから10cm後退したところでポスト獲得モードへ遷移する。
- 遷移条件:ポスト探索モードで超音波線センサが反応
- ポスト獲得モード
- 定義 :まず右に90°回転。ポストを反時計回りに周回する。 そして、MIRS左側に設置した赤外線センサによりスイッチの探索を行う。その後発見したスイッチが獲得すべき番号であれば獲得する。獲得した後、周回し始めた地点へ戻る。
- 遷移条件:ポスト接近モードで前方のタッチセンサが反応した場合
- 特別モード
- 定義 :ポスト接近モードでポストへ接近中に赤外線を感知した場合に、その赤外線の番号を認識する。その番号が獲得すべき番号であればポストを獲得。そうでなければルートへ戻る。
- 遷移条件:ポスト接近モード時に前方の赤外線センサが反応したとき
- ポスト探索ルート復帰特別モード
- 定義 :ポストを獲得した後、ポスト探索ルートへと移動する。
- 遷移条件:ポスト獲得モードから
- ポスト位置移動モード
- 定義 :最後の移動モード。位置判断モードによって判断された次に取るべきポストの位置まで移動する。このときはメモリに格納されているポストの位置と超音波センサと両方使って移動する。
- 遷移条件:二周目に入ったら。
- 総合試験
- 定義 :試験走行用のモードで各種試験を行うもの。試験内容はシステム試験仕様書による。
- 遷移条件:
- プログラム群の構成
MIRS0102のプログラム構成を以下の図に示す。
|
fig. 全体構成図
|
|
|
- プログラム群の詳細
- モードモジュール
- 初期動作モード
- 定義 :スタート後90°左回転し、白線まで前進。その後10cm後退し、90°右回転。白線まで後進した後、10cm前進する。
- 遷移条件:位置修正モジュールへ遷る。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
白線探知RT-タスクモジュール
- 関数名 :void shoki()
- 引数:なし
- 戻り値:なし
- アルゴリズム(フローチャート)
- 位置修正モード
- 定義 :現在位置を(0,0)と修正する。
- 遷移条件:一週目なら直線移動モードへ、二週目ならポスト位置移動モードへ遷る。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
白線探知RT-タスクモジュール
- 関数名 :void shusei()
- 引数:なし
- 戻り値:なし
- アルゴリズム(フローチャート)
- 直線移動モード
- 定義 :白線に沿って競技場を時計回りに進行しながらMIRS左側(右向き)に設置した超音波測定センサにより、ポストの探索を行う。ポストを発見したらそのポストの位置を記憶する。(記憶するのは超音波センサで測ったMIRSからポストまでの距離とロータリーエンコーダの値。)
- 遷移条件:超音波センサでポストを記憶したらポスト接近モードへ。
- 構成要素:
超音波センサRT-タスクモジュール
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
白線探知RT-タスクモジュール
- 関数名 :void mirsidou()
- 引数:なし
- 戻り値:なし
- アルゴリズム(フローチャート)
- ポスト接近モード
- 定義 :ポストへと直進、接近し、前面部タッチセンサが反応するまで前進する。その後中心を得てから10cm後進、90°右回転。
直進する途中で赤外線を受信したらポスト接近特別モジュールへと遷る。
- 遷移条件:赤外線センサが反応したらポスト接近特別モードへ、タッチセンサが反応したらポスト周回モードへ。
- 構成要素:
赤外線デバイスドライバ
タッチセンサデバイスドライバ
超音波センサRT-タスクモジュール
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void postsekkin()
- 引数:なし
- 戻り値:sekigaisen(前方の赤外線センサが反応したかどうか)
- アルゴリズム(フローチャート)
- ポスト接近特別モード
- 定義 :赤外線センサが受信した番号を認識し、その番号が獲得すべき番号なら獲得してからルート復帰。そうでなければそのままルート復帰モードへ遷る。
- 遷移条件:ポストの番号がとるべき番号であればポスト周回モードへ。
違う番号であればルート復帰モードへ。
- 構成要素:
赤外線デバイスドライバ
タッチセンサデバイスドライバ
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void specialpost()
- 引数:なし
- 戻り値:postget(0)〜(4)(ポストを識別し、どのポストがどこにあるかを記憶、さらに獲得したかどうかも値として返す)
- アルゴリズム(フローチャート)
- ポスト周回モード
- 定義 :一定の距離を保ちながら、ポストの周りを周回する。その間に赤外線を感知したら番号を識別。とるべき番号であれば獲得する。回転し始めた場所へ帰ってきたら90°右回転し、ルート復帰モジュールへ移行する。
- 遷移条件:ルート復帰モードへ
- 構成要素:
赤外線デバイスドライバ
タッチセンサデバイスドライバ
超音波センサRT-タスクモジュール
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void postCircumference()
- 引数:なし
- 戻り値:postget(0)〜(4)(ポストを識別し、どのポストがどこにあるかを記憶、さらに獲得したかどうかも値として返す)
- アルゴリズム(フローチャート)
- ルート復帰モード
- 定義 :ポストより白線に向かって直進。白線を感知したら10cm後進、90°右回転する。
- 遷移条件:一週目なら直線移動モードへ、二週目ならポスト位置移動モードへ。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
白線探知デバイスドライバ
- 関数名 :void RouteReturn()
- 引数:なし
- 戻り値:なし
- アルゴリズム(フローチャート)
- ポスト位置判断モード
- 定義 :次にMIRSが獲得すべきポストの位置を判断し、競技場内を右回りするか左回りするかを決定する。
- 遷移条件:ポスト位置移動モードへ
- 構成要素:
- 関数名 :void PositionJudgment()
- 引数:なし
- 戻り値:direction(左回りと右回りのどちらかで判断した後左なら0、右なら1の値を返す。)
- アルゴリズム(フローチャート)
- ポスト位置移動モード
- 定義 :位置判断モードで判断されたポストまで、途中白線に沿ったルートで移動する。
- 遷移条件:記憶されたポストの位置まできたらポスト接近モードへ。
- 構成要素:
超音波センサRT-タスクモジュール
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
白線探知デバイスドライバ
- 関数名 :void postMovement()
- 引数:なし
- 戻り値:なし
- アルゴリズム(フローチャート)
- 機能モジュール
- 左(右)90°回転モジュール
- 定義 :左右90°回転する。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void 90_right()、void 90_left()
- 引数:なし
- 戻り値:なし
- 前後直進モジュール
- 定義 :指定した距離(mm)だけ前進(後退)させる。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void front_move()、void back_move()
- 引数:なし
- 戻り値:なし
- 補正直進モジュール
- 定義 :指定した距離(mm)だけ前進(後退)させる。このときMIRSの右下についているライントレース用の白線センサを感知しながらMIRSが真直ぐに走れるように補正をする。並列に3p間隔で白線センサをつけ、右は白、左は黒を常に感知している状態を保つ。もしどちらかがそれとは違うデータを感知したら、MIRSは進行方向をその感知した白線センサの方向へ微妙に傾ける。こうしていけばMIRSは白線を脱せずに前進、後退をすることができる。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
LCDデバイスドライバ
- 関数名 :void front_move()、void back_move()
- 引数:なし
- 戻り値:なし
- 場外防止モード
- 定義 :白線に沿って直進中に白線センサが反応したら、10cm後進して調整する。
- 構成要素:
PWM・ロータリーエンコーダRT-タスクモジュール
白線探知デバイスドライバ
- 関数名 :void OutPrevention()
- 引数:なし
- 戻り値:なし
- RT タスクモジュール
- 超音波センサRT-タスクモジュール(MIRS標準APIを使用)
- 機能:FIFO1、FIFO2を用いて上位プログラムとコマンド、データのやり取りを行い、超音波センサを制御する。
- このRTタスクモジュールがされるモード・機能モジュール:
直線移動モード
ポスト接近モード
ポスト周回モード
ポスト位置移動モード
- 構成要素:関数モジュール
- ※関数名、優先度、FIFO の仕様、アルゴリズムについてはリンク先参照。
- PWM・ロータリーエンコーダRT-タスクモジュール(MIRS標準APIを使用)
- 機能:左右のロータリーエンコーダのカウント値、速度データ、などをやり取りする。直進、回転を実現する。
- このRTタスクモジュールがされるモード・機能モジュール:
初期動作モード
位置修正モード
直線移動モード
ポスト接近モード
ポスト接近特別モード
ポスト周回モード
直ルート復帰モード
ポスト位置移動モード
- 構成要素:関数モジュール
- ※関数名、優先度、FIFO の仕様、アルゴリズムについてはリンク先参照。
- 白線探知センサRT-タスクモジュール(MIRS標準APIを使用)
- 機能:MIRSの下部に装着し、MIRSが白線の上にいるかどうかを常に監視する。
- このRTタスクモジュールがされるモード・機能モジュール:
初期動作モード
位置修正モード
直線移動モード
ルート復帰モード
ポスト位置移動モード
- 構成要素:関数モジュール
- ※関数名、優先度、FIFO の仕様、アルゴリズムについてはリンク先参照。
- デバイスドライバ
- LCDデバイスドライバ(MIRS標準APIを使用)
- 機能:MIRS0102に搭載されるLCD(SC1602BS)への表示を行う。
- このドライバ使用されるモード・モジュール:
すべてのモードモジュール。
- IO アドレス:0100H、0102H
- 赤外線、タッチセンサデバイスドライバ
- 機能:MIRS0102に搭載されるタッチセンサ、赤外線センサ、パワーオン信号のON/OFFを調べる。
- このドライバが使用されるモード・モジュール:
ポスト接近モード→タッチセンサ・赤外線デバイスドライバ
ポスト接近特別モード→タッチセンサ・赤外線デバイスドライバ
ポスト周回モード→赤外線・タッチセンサ
- IO
アドレス:
タッチセンサ⇒0140H、0142H
赤外線センサ⇒0150H、0152H、0154H、0156H、0158H
- 試験
- モード、機能モジュール単体試験
- 各モードモジュールを単体で呼び出しモードの動作を十分に果たすかを試験する。
- 機能モジュールがその定められた機能を正確に実現できるか試験する。
- 標準MIRS上での試験
- MIRS0102は標準MIRSよりもセンサ数が少なく、またLCDと赤外線・タッチセンサのデバイスドライバおよび超音波センサとPWM/ロータリーエンコーダのRT-タスクモジュールはMIRS標準APIを使用するためソフトウェア的にほぼ完全に互換する。従ってMIRS0102のハードが完成する前にもメインプログラムを実行し、総合的なテストを行うことができる。
- 実機上での試験
- 直進、回転、左トレースの各機能モジュールの調整は実機で行う。
- 実際に走行を重ね、プログラムを安定させソフトウェア的な信頼度を高める。