MIRS98XXソフトウェアは下記のタスクから構成される。
低レベルタスク
- task00:マンマシンインタフェースタスク
- task01:超音波センサタスク
- task02:自己位置検出タスク
- task03:赤外線センサタスク
- task04:PWMモータ駆動タスク
- task05:タッチセンサタスク
- task06:ロータリーエンコーダタスク
高レベルタスク
- task08:赤外線接近タスク
- task09:接触回避タスク
- task10:軌道トレースタスク
- task11:ポスト獲得タスク
- task12:軌道復帰タスク
- task13:試験走行タスク
メインタスク
3.リアルタイムモニタ
レベル | タスク |
0 | ポスト獲得タスク、接触回避タスク |
1 | 赤外線接近タスク、起動復帰タスク |
2 | 軌道トレースタスク |
3 | 行動計画タスク、試験走行タスク |
4 | タッチセンサタスク |
5 | 超音波タスク、赤外線タスク |
6 | 自己位置検出タスク |
7 | PWMモータ駆動タスク,マンマシンインターフェイスタスク |
タスク名 | tskXX | 初期設定 | 割り込み処理 | タイマ処理 | コマンド処理 |
マンマシニンターフェイスタスク | task00 | ○ | × | ○ | ○ |
超音波センサタスク | task01 | ○ | ○ | × | ○ |
自己位置検出タスク | task02 | ○ | × | ○ | × |
赤外線センサタスク | task03 | ○ | ○ | × | × |
PWMモータ駆動タスク | task04 | ○ | × | ○ | × |
行動計画タスク | task05 | ○ | × | ○ | × |
タッチセンサタスク | task06 | ○ | ○ | × | × |
ロータリーエンコーダタスク | task07 | ○ | × | ○ | × |
赤外線接近タスク | task08 | ○ | ○ | × | × |
接触回避タスク | task09 | ○ | ○ | × | × |
軌道トレースタスク | task10 | ○ | ○ | × | ○ |
ポスト獲得タスク | task11 | ○ | ○ | × | × |
軌道復帰タスク | task12 | ○ | ○ | × | × |
試験走行タスク | task13 | ○ | ○ | ○ | ○ |
4.task00:マンマシインターフェースタスク
- 機能
ディップスイッチデータを取得し、
起動時ディップスイッチデータとしてBBに書き込む。
そのディップスイッチデータにより、
競技、テスト動作
を判定する。
そのモードに対応する超音波センサのチャネルの送受信を行った測定値などを7SegLED表示データとして
BBに書き込む。
そして、7segLED表示データを取得し、
それに応じてLEDを点灯する。
- コマンド仕様
- BB仕様
番号 | 内容 |
1 | DIPスイッチデータ |
2 | 7seg.LED表示データ |
- 初期設定
Hardware Function Libraryのマン・マシンインターフェース系の初期化関数void mmi_init();を用いる。BBを初期化し、タイマタスク登録をする。
- モジュール定義
void inzt00():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-0-1.inzt00モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
押しボタンスイッチが押されたときDIPスイッチを読み込みBBに書き込む。
- モジュール定義
void intt00():スイッチの割り込みによって実行される関数。
- HCPチャート
図4-0-2.intt00モジュールHCPチャート(頭脳winCAD )
- タイマ処理
一定時間毎にセンサの状態を読み出し、BBに書き込みLED表示する。
- モジュール定義
void timt00():タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
図4-0-3.timt00モジュールHCPチャート(頭脳winCAD )
- コマンド処理
なし
4.task01:超音波センサタスク
- 機能
4つの超音波を順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで繰り返し測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してBBに書き込む。その後、次のチャネルのセンサより超音波を発信し再び割り込み待ち状態になる。
- コマンド仕様
- BB仕様
番号 | 内容 |
1 | 距離データ1 |
2 | 距離データ2 |
3 | 距離データ3 |
4 | 距離データ4 |
- 初期設定
Hardware Function Libraryの超音波センサ系の初期化関数void uss_init();を用いる。BBを初期化し、割り込みタスク、タイマタスク登録をする。
- モジュール定義
void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-1-1.inzt01モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
超音波センサへの受信信号があったときに距離を計算しBBに書き込む。
- モジュール定義
void intt01():超音波センサへの割り込み要求があった時に実行される関数
- HCPチャート
図4-1-2.intt01モジュールHCPチャート(頭脳winCAD
- タイマ処理
一定時間に受信信号がなかったとき受信を中断して他のセンサに移る。
- モジュール定義
void timt01():タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
図4-1-3.timt01モジュールHCPチャート(頭脳winCAD )
- コマンド処理
なし
4.task02:自己位置検出タスク
- 機能
一定時間毎に起動され、ロータリーエンコーダの値から自己位置のx、y座標と姿勢角θを検出しBBに書き込む。
- コマンド仕様
- BB仕様
番号 | 内容 |
1 | 自機位置x座標データ |
2 | 自機位置y座標データ |
3 | 自機位置姿勢角θデータ |
- 初期設定
Hardware Function Libraryのロータリーエンコーダ・タッチセンサ系の初期化関数void re_ts_init();を用いる。BBを初期化し、タイマタスク登録をする。
- モジュール定義
void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-2-1.inzt02モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
なし
- タイマ処理
一定時間毎に起動され、ロータリーエンコーダの値から自機位置のx、y座標と姿勢角θを算出してBBに書き込む。
- モジュール定義
void timt02():タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
図4-2-2.timt02モジュールHCPチャート(頭脳winCAD )
- コマンド処理
なし
4.task03:赤外線センサタスク
- 機能
赤外線センサの反応毎に起動され赤外線を感知し、感知した場所と数をBBに書き込む。
- コマンド仕様
- BB仕様
- 初期設定
HFLの赤外線センサ系初期化関数void irs_init();を用いる。BBを初期化し、割り込みタスク登録をする。
- モジュール定義
void inzt03():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-3-1.inzt03モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
赤外線センサからの割り込み要求信号があったとき、各赤外線センサの状態を読み取り、感知数をBBに書き込む。
- モジュール定義
void intt03():赤外線センサからの割込み要求信号があったときに実行される関数。
- HCPチャート
図4-3-2.intt03モジュールHCPチャート(頭脳winCAD )
- タイマ処理
なし
- コマンド処理
なし
4.task04:PWMモータ駆動タスク
- 機能
一定時間毎に起動され、タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。
- コマンド仕様
コマンド名 | コード (HEX) | サブコマンド | 機能 |
左右モータ駆動 | 01 | | タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。 |
- BB仕様
- 初期設定
HFLのPWM系初期化関数void pwm_init();を用いる。BBを初期化し、タイマタスク、ノーマルタスク登録をする。
- モジュール定義
void inzt04():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-4-1.inzt04モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
なし
- タイマ処理
一定時間毎に実行され、HFLのPWM系関数のvoid pwm_data(int r,int l);によって指定される左右車輪の速度データをPWMに書き込む。
- モジュール定義
timt04:タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
図4-4-2.timt04モジュールHCPチャート(頭脳winCAD )
- コマンド処理
左右車輪の速度データをPWMに書き込む。
- モジュール定義
nrmt04:コマンドによって実行される関数。
- HCPチャート
図4-4-3.nrmt04モジュールHCPチャート(頭脳winCAD )
4.task05:タッチセンサ制御タスク
- 機能
タッチセンサが反応する毎にこのタスクが起動され、タッチセンサの状態を読み取りBBに書き込む。
- コマンド仕様
- BB仕様
- 初期設定
Hardware Function Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void re_ts_init();を用いる。BBを初期化し、割り込みタスク登録をする。
- モジュール定義
void inzt05():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-5-1.inzt05モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
タッチセンサからの割り込み要求信号があったときに各タッチセンサの状態を読み取りBBに書き込む。
- モジュール定義
void intt05():タッチセンサからの割り込み要求信号があったときに実行される関数。
- HCPチャート
図4-5-2.intt05モジュールHCPチャート(頭脳winCAD )
- タイマ処理
なし
- コマンド処理
なし
4.task06:ロータリエンコーダタスク
- 機能
一定時間毎に左右のロータリエンコーダの値をBBに書き出す。
- コマンド仕様
- BB仕様
番号 | 内容 |
1 | 左ロータリエンコーダのデータ |
2 | 右ロータリエンコーダのデータ |
- 初期設定
Hardware Function Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void re_ts_init();を用いる。BBを初期化し、タイマタスク登録をする。
- モジュール定義
void inzt06():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図4-6-1.inzt06モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
なし
- タイマ処理
一定時間毎に実行され、左右のロータリエンコーダの値ををBBに書き込む。
- モジュール定義
timt06:タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
図4-6-2.timt06モジュールHCPチャート(頭脳winCAD )
- コマンド処理
なし
4.task07:行動計画タスク
- 機能
DIPスイッチの値より通常走行か試験走行か判断する。
通常走行ではそれぞれの状況に応じて、走行を計画する。
試験走行では試験走行タスクに移る。
- コマンド仕様
コマンド名 | コード (HEX) | サブコマンド | 機能 |
行動計画 | 1 | | 状況に応じて行動を計画 |
- BB仕様
- 初期設定
BBを初期化しノーマルタスクを登録をする。
- モジュール定義
void inzt07():リアルタイムモニタから呼ばれる初期設定関数。BBを初期化し、ノーマルタスクを登録する
- HCPチャート
図4-7-1.inzt07モジュールHCPチャート(頭脳winCAD )
- 割り込み処理
なし
- タイマ処理
なし
- コマンド処理
タスクを呼び出す
- モジュール定義
void nrmt07():行動を計画する
- HCPチャート
図4-7-2.nrmt07モジュールHCPチャート(頭脳winCAD )
task08:赤外線接近モジュール
- 機能
赤外線割り込みによりモジュールが起動され、タッチセンサの割り込みまたは、赤外線を見失うまで結果をBBに書き込みながら行動し続ける。
BBに書き込まれた赤外線データ管理モジュールの情報をよみとりながらの行動となる。
タッチセンサの割り込み、かつ赤外線の見失いの場合は、ポスト獲得とみなしその時点でのX、Y座標をBBに書き込み、軌道復帰モジュールへ。
タッチセンサの割り込みのみならば、ポスト獲得モジュールへ。
赤外線を見失ったら、軌道移動モジュールへ。
- コマンド仕様
なし
- BB仕様
番号 | 内容 |
1 | 前面左の赤外線データ
|
2 | 前面右の赤外線データ |
3 | X座標 |
4 | Y座標 |
- 初期設定
BBの初期化
- モジュール定義
void inzt08():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
赤外線の割り込みにより赤外線接近を開始する。
- モジュール定義
void intt08():赤外線からの割り込み要求信号があったときに実行される関数。
- HCPチャート
赤外線接近モジュールHCPチャート
- タイマ処理
なし
- コマンド処理
なし
task09:接触回避モジュール
- 機能
1回目のスタート後、中央を走っているときは、ロータリエンコーダの値が競技場の幅に一致しないとき、タッチセンサの割り込みにより起動される。
BBのロータリエンコーダの情報を読み込みながらポストをよける処理をする。
また、モジュール開始時点と終了時点のロータリエンコーダの値をBBに書き込む。
ポストをよけているときに、赤外線を受けたらその時のX、Y座標をBBに書き込む。
ポスト回避終了時点で、処理は終了となる。
軌道計算後、タッチセンサに割り込みがあったときは、一時停止となり、その後BBの超音波センサの情報を読み取り計算後、それに応じた処理を行う。
- コマンド仕様
なし
- BB仕様
番号 | 内容 |
1 | 開始時ロータリエンコーダデータ
|
2 | 終了時ロータリエンコーダデータ |
3 | X座標 |
4 | Y座標 |
- 初期設定
BBの初期化
- モジュール定義
void inzt09():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
タッチセンサの割り込みにより開始する。
- モジュール定義
void intt09():タッチセンサからの割り込み要求信号があったときに実行される関数。
- HCPチャート
接触回避モジュールHCPチャート
- タイマ処理
なし
- コマンド処理
なし
task10:軌道計算モジュール
- 機能
軌道計算コマンドにより処理が開始される。
BBの超音波センサデータ管理モジュールと接触回避モジュールからポストの場所の値を読み込み、ルートを計算する。
その計算されたルートをBBに書き込む。
また起動復帰モジュール用のX,Y座標、姿勢角θを書き込む。
その後、軌道移動コマンドを呼び出す。
- コマンド仕様
コマンド名 | コード (HEX) | サブコマンド | 機能 |
軌道計算 | 01 | any(未使用) | 軌道の計算を開始する。 |
- BB仕様
番号 | 内容 |
1 | トレース用のルート
|
2 | 2つめのポストへのX座標 |
3 | 2つめのポストへのY座標 |
4 | 2つめのポストへのθ |
5 | 3つめのポストへのX座標 |
6 | 3つめのポストへのY座標 |
7 | 3つめのポストへのθ |
8 | 4つめのポストへのX座標 |
9 | 4つめのポストへのY座標 |
10 | 4つめのポストへのθ |
- 初期設定
BBの初期化
- モジュール定義
void inzt10_1():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
なし
- タイマ処理
なし
- コマンド処理
軌道の計算をする。
- モジュール定義
void nrmt10_1():軌道計算モジュールを呼び出す関数。
- HCPチャート
軌道計算モジュールHCPチャート
task10:軌道移動モジュール
- 機能
軌道計算後、行動開始。
BBの軌道計算モジュールにより計算されたルートの値とロータリエンコーダの値を比べながら軌道を進む。
タッチセンサの割り込みの場合、壁かを確認後ポストならポスト獲得モジュールへ。
壁だったら軌道計算コマンドを呼び出す。
赤外線センサの割り込みの場合、赤外線接近モジュールへ。
- コマンド仕様
コマンド名 | コード (HEX) | サブコマンド | 機能 |
軌道移動 | 01 | any(未使用) | 計算通りに軌道を移動
|
- BB仕様
- 初期設定
BBの初期化
- モジュール定義
void inzt10_2():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
なし
- タイマ処理
なし
- コマンド処理
目標に向かって移動する
- モジュール定義
void nrmt10_2():軌道計算後、自動的に起動される関数。
- HCPチャート
軌道移動モジュールHCPチャート
task10:軌道確保モジュール
- 機能
1定時間毎に、行われる。
BBの軌道計算モジュールにより計算されたルートの値と超音波センサの値とを 比べ、ずれている値をBBに書き込む。
タッチセンサの割り込みの場合、壁かを確認後ポストならポスト獲得モジュール へ。
壁だったら、軌道計算コマンドを呼び出す。
赤外線センサの割り込みの場合、赤外線接近モジュールへ。
- コマンド仕様
なし
- BB仕様
番号 | 内容 |
1 | ずれのX座標
|
2 | ずれのY座標 |
3 | ずれの姿勢角θ |
4 | 壁だったときのX座標 |
4 | 壁だったときのY座標 |
- 初期設定
BBの初期化
- モジュール定義
void inzt10_3():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
なし
- タイマ処理
1定時間毎に、位置補正を行う。
- モジュール定義
void timt09():タイマ割り込みによって一定時間ごとに実行される関数。
- HCPチャート
軌道確保モジュールHCPチャート
- コマンド処理
なし
task11:ポスト獲得モジュール
- 機能
軌道確保モジュールのタッチセンサ割り込みで壁でないとの判断後、行動開始。 BBのタッチセンサの値でポストの中心座標を計算し、ロータリエンコーダの値を読み込みながら動作する。
赤外線センサの割り込みの場合その座標をBBに書込み、赤外線接近モジュールへ。
タッチセンサの割り込みの場合は、超音波センサでの座標計算後、中心座標の計算のし直しをして動作を再開。
- コマンド仕様
なし
- BB仕様
番号 | 内容 |
1 | 赤外線センサ割り込み時X座標
|
2 | 赤外線センサ割り込み時Y座標 |
- 初期設定
BBの初期化
- モジュール定義
void inzt11():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
タッチセンサの割り込みにより開始する。
- モジュール定義
void intt11():タッチセンサからの割り込み要求信号があったときに実行される関数。
- HCPチャート
ポスト獲得モジュールHCPチャート
- タイマ処理
なし
- コマンド処理
なし
task12:軌道復帰モジュール
- 機能
赤外線接近モジュールでポストの獲得後、行動開始。
BBの軌道計算モジュールで作られた軌道復帰用データの値を読み込み、その位置まで移動。
タッチセンサの割り込み、目標位置への到着で行動停止。
目標位置へ到着すると、軌道確保モジュールへ。
- コマンド仕様
なし
- BB仕様
なし
- 初期設定
BBの初期化
- モジュール定義
void inzt12():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
赤外線接近モジュールでタッチセンサと赤外線の見失いの割り込みにより開始する。
- モジュール定義
void intt12():タッチセンサと赤外線センサの割り込み要求信号があったときに実行される関数。
- HCPチャート
軌道復帰モジュールHCPチャート
- タイマ処理
なし
- コマンド処理
なし
task13:試験走行モジュール
- 機能
試験を行う。スイッチにより試験の内容を変更する。
- コマンド仕様
なし
- BB仕様
その時に応じて
- 初期設定
BBの初期化など
- モジュール定義
void inzt13():リアルタイムモニタから呼ばれる初期設定関数。
- 割り込み処理
なし
- タイマ処理
なし
- コマンド処理
試験項目参照
- モジュール定義
void nrmt13():電源投入時またはリセットボタン押下時に一回だけ起動される関数
7.試験
1.タスク単体試験
1.MMIタスク
・7segLED表示
7segLEDに0〜fまでの数を順に表示させる。
・単色LED表示
赤,緑のLEDがつくことを確認する。
次に赤,緑のLEDを交互に点灯させる。
2.超音波センサタスク
・距離測定
超音波の送受信を行い,距離の測定をする。
結果をBBに書き込み,表示する。
・超音波切り替え
四個の超音波センサを順に切り替えながら距離測定を行う。
3.自己位置検出タスク
・姿勢角,座標計算
7segLEDに姿勢角,x座標,y座標を表示する。
MIRSを動かして値を調べる。
50cm進むと止まるようにししっかり止まるかを見る。
はじめは遅く動かし,その後だんだん早く動作させる。
4.赤外線センサタスク
・赤外線受信
赤外線受信データをBBに書き込む。
データを7segLEDに表示する。
・赤外線カウント
赤外線を感知した数を計算しBBに書き込む。
データを7segLEDに書き込む。
5.PWMモータ駆動タスク
・左右モータ駆動
出力デューティ値を7segLEDに表示する。
停止,前(3段階),停止,後ろ(3段階),を繰り返し出力する。
初めは左だけ,次に右だけを試験し,最後に両方あわせて試験する。
回転方向,回転速度の変化が正しく変化するか,しっかり止まるかを見る.
6.タッチセンサ制御タスク
・タッチセンサ制御
タッチセンサの状態をBBに書き込み,7segLEDに表示する。
7.ロータリーエンコーダタスク
・ロータリーエンコーダ制御
7segLEDに左右のエンコーダ値と方向ロータリ表示。
タイヤを回転した時に得られるパルス数を確認する。
8.赤外線接近タスク
・赤外線接近
赤外線センサが赤外線を感知したら赤外線に向かっていく。
赤外線の反応が消えたら停止する。
9.接触回避タスク
・障害物回避
障害物を発見したらそれを回避する。
その時のロータリーエンコーダの値をBBから読み込み,7ssegLEDに表示する。
タッチセンサに反応があった場合処理を一時中断し,する。
10.軌道トレースタスク
・トレース
マップデータを渡し,MIRSがそのとうりに動くかを調べる。
11.ポスト獲得タスク
・ポスト中心計算
MIRSをポストに衝突させて。
タッチセンサの反応の位置からポスト中心を計算する。
計算結果を元にポストの周りを回る。
・赤外線の割り込み
このタスクを起動中に赤外線を当てる。
その時,赤外線接近タスクが起動されるかを調べる。
12.軌道復帰タスク
・軌道復帰
軌道復帰データを与えておく。
MIRSがこのデータどうりの位置にしっかりと行くかどうかを調べる。
13.試験走行タスク
・各種試験走行
試験走行できるかどうかを調べる。
2. 標準MIRS上での試験
競技場にポストを1つ置いて,そのポストを獲得できるかどうかを調べる。
軌道は本番で使用するものを用いる。
ポスト回避も行う。
3.規定走行試験
1.直線走行試験
数m直進させ,その結果を評価する。
前後の誤差は±3%以内とする。
左右の誤差は±2%以内とする。
姿勢角の誤差は±1%以内とする。
2.周回走行試験
半径50cmの円を2回描くように走行させる。
前後の誤差は±3%以内とする。
左右の誤差は±2%以内とする。
姿勢角の誤差は±3%以内とする。
3.複合走行試験
50cm直進→半径50cmで180度回転→50cm直進→半径50cmで180度回転という軌道を2回描く。
前後の誤差は±3%以内とする。
左右の誤差は±2%以内とする。
姿勢角の誤差は±2%以内とする。
8.作成ドキュメント一覧
ソフトウェアインストール手順書 |
| MIRSXXXX.X(プログラムファイル) |
MIRSXXXXタスク単体試験仕様書 |
MIRSXXXX標準MIRS上試験仕様書 |
MIRSXXXX規定走行試験仕様書 |
MIRSXXXXシステム試験仕様書 |
MIRSXXXX取扱説明書 |