沼津高専 電子制御工学科 |
|
MIRS9902ソフトウェア詳細設計書
|
|
MIRS9902-DSGN-0007 |
|
改訂記録 |
版数 |
作成日 |
作成者 |
承認 |
改訂内容 |
A01 |
1999.5.25 |
遠藤,河野,高橋 |
高橋 |
初版 |
A02 |
1999.6.2 |
遠藤,河野,高橋 |
高橋 |
高レベルタスクの図の改定 それにあわせ低レベルタスクを修正 |
目次
-
はじめに
-
概要
-
リアルタイムモニタ
-
MMIタスク
-
超音波センサタスク
-
赤外線センサタスク
-
タッチセンサタスク
-
PWMモータ制御タスク
-
自己位置検出タスク
-
初期化タスク
-
軌道トレースタスク
-
ポスト接近復帰タスク
-
ポスト獲得タスク
-
回避タスク
-
補正タスク
-
センサ試験タスク
-
行動試験タスク
-
行動計画タスク
-
試験
-
作成ドキュメント一覧
1.はじめに
本ドキュメントは、MIRS9902基本設計書(MIRS9902-DSGN-0004-A03)に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。
2.概要
MIRS9902ソフトウェアはリアルタイムモニタMIRX68KとMIRX68K上で動作するタスクから構成される。タスクは低レベルタスクと高レベルタスクとメインタスクに大別され、基本的には低レベルタスクはハードウェアの制御を高レベルタスクは低レベルタスクを用いてシステムの動作を実現する。メインタスク(行動計画タスク)はスイッチ状態やセンサ情報をもとに動作を決定しそれに応じたタスクの起動を行う。
MIRS9902ソフトウェアは下記のタスクから構成される。
低レベルタスク
-
task00:マンマシンインタフェース(MMI)タスク
-
task01:超音波センサ(UUS)タスク
-
task02:赤外線センサ(IRS)タスク
-
task03:タッチセンサ(TS)タスク
-
task04:PWMモータ駆動タスク
-
task05:自己位置検出タスク
高レベルタスク
-
task06:初期化タスク
-
task07:軌道トレースタスク
-
task08:ポスト接近復帰タスク
-
task09:ポスト獲得タスク
-
task10:回避タスク
-
task11:補正タスク
-
task12:試験走行タスク
-
task13:パフォーマンスタスク
メインタスク
3.リアルタイムモニタ
リアルタイムモニタの設定等
-
タスク・ファイルのMAX数の宣言(MAX_TASK) = 16タスク
-
BBの個数の宣言(MAX_BB) = ??個
-
タスクテーブル
タスク関数の処理の有無と優先度(高0〜6低)
Oは有り
Xは無し
Task No. |
Initialization |
Normal |
Timer |
Interrupt |
Priority |
00 (MMI) |
O |
O |
O |
O |
2 |
01 (超音波センサ) |
O |
O |
X |
O |
3 |
02 (赤外線センサ) |
O |
O |
O |
X |
3 |
03 (タッチセンサ) |
O |
O |
X |
X |
|
04 (PWM) |
O |
O |
O |
X |
1 |
05 (自己位置検出) |
O |
O |
O |
X |
6 |
06 (初期化) |
O |
O |
X |
X |
2 |
07 (軌道トレース) |
O |
O |
O |
X |
4 |
08 (ポスト接近) |
O |
O |
O |
X |
5 |
09 (ポスト獲得) |
O |
O |
O |
O |
4 |
10 (復帰) |
O |
O |
O |
X |
6 |
11 (回避) |
O |
O |
O |
X |
1 |
12 (補正) |
O |
O |
X |
X |
1 |
13 (試験走行) |
O |
O |
O |
O |
1 |
14 (パフォーマンス) |
O |
O |
O |
X |
1 |
15 (行動計画) |
O |
O |
O |
X |
1 |
-
注意点 : tableでBBの初期化をしてるが、要素数はBB_MAXとなるのに注意。
4.task00:MMIタスク
-
機能
MMIボードのLED表示のコントロールと押しボタンスイッチの割り込みの受け取りを行う。BBに書かれた4桁のデータを4桁7seg-LEDに表示する機能。タイマにより一定時間ごとに表示の更新を行う。ロータリスイッチの値をBBに書き込む。
BBに各設定値へのポインタを乗せているので、コマンドを使わずにそのポインタを用いることにより設定が即時反映される。
-
コマンド仕様
コマンド名 |
コード
(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 に設定 |
-
BB仕様
番号 |
内容 |
0 |
表示データその1のポインタ |
1 |
表示データその2のポインタ |
2 |
表示データその3のポインタ |
3 |
表示データその4のポインタ |
4 |
表示するBB番号のポインタ |
5 |
ローテーションフラグのポインタ |
|
6 |
赤、緑LED表示状態のポインタ |
|
7 |
押しボタン割り込みフラグのポインタ |
|
8 |
ロータリスイッチの値 |
|
9 |
押しボタンの押された回数 |
|
-
初期設定
LED周りの初期設定を行う。BBクリア等も行う。
-
モジュール定義
void inzt00():リアルタイムモニタから呼ばれる初期設定関数。タイマタスクの初期化を行う
-
HCPチャート
図4.1 inzt00モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
割り込み処理タスク
押しボタンスイッチの割り込みを受け取る。割り込みフラグをインクリメントする。(割り込みがあったかどうかは、各タスク内で値の変化を判断してください)。ロータリフラグが立っていれば表示BB位置を次の位置にする。
-
モジュール定義
interrupt void intt00():リアルタイムモニタから呼ばれる割り込み関数。
-
HCPチャート
図4.2 intt00モジュールHCPチャート(ポストスクリプト
/tgif形式)
-
コマンド処理
表示BB位置、赤緑LED表示、ローテーションの設定を行う。
-
モジュール定義
void nrmt00(int,int):各フラグ等の設定を行う。
-
HCPチャート
図4.3 nrmt00モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
タイマ処理
指定されたBB上のデータをMMIの7seg-LEDに表示する。赤緑DELの表示も行う。BB表示データの編集も行う(本番のみ)。BBの指定は、n=1〜4まではこのタスクの1〜4のBB表示。n=5以上は
n-4 番目のBBを表示し、このときローテーションの端(mix,max)の番号をこのタスクのBBの0,1番に書きこまれているものとする。赤緑LEDの表示状態は、点灯および点滅をするかをBitフラグ(1)で指定。また、ロータリスイッチの値をBBに書き込む。
bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
意味 |
0 |
緑前状態 |
緑点滅 |
緑点灯 |
0 |
赤前状態 |
赤点滅 |
赤点灯 |
-
モジュール定義
void timt00(int,int):表示する。
-
HCPチャート
図4.4 timt00モジュールHCPチャート(ポストスクリプト/tgif形式
)
5.task01:超音波センサタスク
-
機能
6個の超音波を入力された順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してBBに書き込む。その後、次の決定したチャネルのセンサより超音波を発信し再び割り込み待ち状態になる。
- コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
測定開始 |
01 |
n(チャネル) |
指定されたチャネル番号のセンサの測定を開始する。 |
-
BB仕様
番号 |
内容 |
0 |
チャネル0の測定結果[cm]
タイムアウト:999
ハードウェアエラー(センサが接続など):888
近すぎ: 777 |
1 |
チャネル0の測定回数
|
2 |
前と上部の超音波センサの測定結果[cm]
他は同上 |
3 |
前と上部の超音波センサ測定回数
|
4 |
左の2つの超音波センサの測定結果[cm]
他は同上 |
5 |
左の2つの超音波センサの測定回数
|
6 |
後ろの超音波センサの測定結果[cm]
他は同上 |
7 |
後ろの超音波センサの測定回数
|
-
初期設定
IP-Digtal48のPIT(68230)のB側の初期設定を行う。ポートAをモード0サブモード01に設定する。タイマをDevice
watchdog モードに設定し、タイマ初期値として最大測定距離3mに相当するカウント値を設定する。
-
モジュール定義
void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図5.1 inzt01モジュールHCPチャート(ポストスクリプト
/tgif形式)
-
割り込み処理タスク
超音波受信があった時、割り込み処理を行う。
-
モジュール定義
interrupt void intt01():リアルタイムモニタから呼ばれる割り込み関数。
-
HCPチャート
図5.2 intt01モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
タイマ処理タスク
やることなし。
-
モジュール定義
void timt01(int, int):なし
-
HCPチャート
なし
-
コマンド処理
-
測定開始 : 指定された超音波センサで送信が行われる。
-
モジュール定義
void nrmt01(int,int):超音波測定開始を行う関数。
-
HCPチャート
図5.3 nrmt01モジュールHCPチャート(ポストスクリプト/tgif形式
)
6.task02:赤外線センサタスク
-
機能
赤外線センサの情報をBBへ書きこむ。タイマで動きつづけます。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
no command |
any |
any |
NOP |
-
BB仕様
番号 |
内容 |
0 |
赤外線センサ情報 |
1 |
赤外線測定回数 |
-
初期設定
PITの初期化はTASK01の初期化タスクで行うので、ここでは行わない。BBをクリアし、タイマタスクの登録を行う。
-
モジュール定義
void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図6.1 inzt03モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
割り込み処理タスク
何もしない。
-
モジュール定義
interrupt void intt02():NOP
-
HCPチャート
Not exist
-
コマンド処理
動作無し.
-
モジュール定義
void nrmt02(int,int):NOP
-
HCPチャート
Not exist
-
タイマ処理
赤外線センサ情報をBBへ書きこむ。
-
モジュール定義
void timt02(int,int):IRS->BB書きこみ。
-
HCPチャート
図6.2 timt02モジュールHCPチャート(ポストスクリプト/tgif形式
)
7.task03:タッチセンサ制御タスク
- 機能
タッチセンサが反応する毎に、このタスクが起動されてタッチセンサの状態を読み取りBBに書き込む。 - コマンド仕様
コマンド名 |
コマンド(HEX) |
サブコマンド |
機能 |
なし |
any |
any |
コマンドなし |
- BB仕様
番号 |
内容 |
1 |
正面タッチセンサのデータ |
2 |
右斜め前タッチセンサのデータ |
3 |
左斜め前タッチセンサのデータ |
4 |
後ろタッチセンサのデータ |
- 初期設定
Hardware Function
Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void re_ts_init();を用いる。BBを初期化し、割り込みタスク登録をする。
- モジュール定義
void inzt03():リアルタイムモニタから呼ばれる初期設定関数。
- HCPチャート
図7.1.inzt03モジュールHCPチャート(ZWD)
- 割り込み処理
特に無し。
- モジュール定義
interrupt intt03():NOP
- HCPチャート
Not exist
- タイマ処理
特に無し。
- モジュール定義
void timt03():NOP
- HCPチャート
Not exist
- コマンド処理
タッチセンサからの割り込み要求信号があったときに各タッチセンサの状態を読み取りBBに書き込む。
- モジュール定義
void nrmt03():タッチセンサからの割り込み要求信号があったときに実行される関数。
- HCPチャート
図7.2.nrmt03モジュールHCPチャート(ZWD)
8.task04:PWMモータ駆動タスク
-
機能
デューティ比を用いて左右のモータを制御する。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
PWM信号発信 |
01 |
any |
PWMデータ送信 |
右モータ信号設定 |
02 |
n |
右モータ信号設定を行う。nは-100〜100のデューティー比 |
左モータ信号設定 |
03 |
n |
左モータ信号設定を行う。nは-100〜100のデューティー比 |
左右モータ同回転信号設定 |
04 |
n |
左右モータ信号設定を行い、PWM信号を発信 。左右同じデューティー比になる。nは-100〜100のデューティー比 |
左右モータ逆回転信号設定 |
05 |
n |
左右モータ信号設定を行い、PWM信号を発信 。nは-100〜100のデューティー比。 右のデューティー比がn、左が-nになる。(要するに回る) |
左右モータ信号設定(独立で設定) |
06 |
n |
左右モータ信号設定を行い、PWM信号を発信 。nはデューティー比を格納した配列へのポインタ。右、左の順で格納する。 |
左右モータ停止 |
07 |
n |
左右モータを停止 |
LQIの目標値設定 |
08 |
n |
n は、int 型配列へのポインタで、速度、角度の順で格納 |
停止(LQI) |
09 |
n |
LQIで、停止する。 |
-
BB仕様
番号 |
内容 |
0 |
右の論理デューティ比 |
1 |
左の論理デューティ比 |
2 |
右の物理デューティ比 |
3 |
左の物理デューティ比 |
4 |
右のR.E.値を換算したデューティ比 |
5 |
左のR.E.値を換算したデューティ比 |
-
初期設定
BBとPWMを初期化する。
-
モジュール定義
void inzt04():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図8.1 inzt04モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
コマンド処理
BBに書き込んであるデータをもとにPWM信号を送信しモータを駆動させる。
-
モジュール定義
void nrmt04(int,int):モータ駆動関数。
-
HCPチャート
図8.2 nrmt04モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
割り込み処理
特に無し。
-
モジュール定義
void intt04:NOP
-
HCPチャート
Not exist
-
タイマ処理
LQI制御、PID制御を行っている。
-
モジュール定義
void timt04():LQI制御、PID制御を行っている。
-
HCPチャート
Not exist
9.task05:自己位置検出タスク
-
機能
随時ロータリーエンコーダの値を使い自己位置の確認をする。又、時々超音波センサを使い壁との間隔を確認する。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
自己位置設定 |
01 |
n |
自己位置を設定する。nは、float 型の配列へのポインタで、x[cm]、y[cm]、θ[rad]の順で格納されていること。 |
Limit設定 |
02 |
n |
自己位置のLimitを設定する。nは、float 型の配列へのポインタで、x[cm]、y[cm]の順で格納されていること。 |
-
BB仕様
番号 |
内容 |
0 |
位置のX軸データ |
1 |
位置のY軸データ |
2 |
姿勢角データ |
3 |
右のロータリエンコーダのデータ |
4 |
左のロータリエンコーダのデータ |
5 |
タッチセンサのデータ |
6 |
方向のデータ(2:前 3:左 0:後 1:右) |
7 |
速度 |
8 |
角速度 |
9 |
システムが動き出してからの移動距離(cm) |
-
初期設定
BBを初期化する。初期位置を確認する。
-
モジュール定義
void inzt05():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図9.1 inzt05モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
コマンド処理
自己位置を設定する。
-
モジュール定義
void nrmt05(int,int):自己位置を設定
-
HCPチャート
設定のみ
-
割り込み処理
特に無し。
-
モジュール定義
void intt05:NOP
-
HCPチャート
Not exist
-
タイマ処理
ロータリエンコーダの値をもとに自己位置を計算する。そして、その値をBBに書き込む。さらに、タッチセンサの値をBBに書き込む。
-
モジュール定義
void timt05():自己位置を算出する関数。
-
HCPチャート
図9.2 timt05モジュールHCPチャート(ポストスクリプト
/tgif形式 )
10.task06:初期化タスク
-
機能
スタート位置から、初期位置まで移動し、座標を獲ってルートトレースの準備をする。
-
コマンド仕様
なし
-
BB仕様
番号 |
内容 |
0 |
n番目の目標位置 |
1 |
獲得・復帰タスクに入る前の保存したx座標の位置 |
2 |
獲得・復帰タスクに入る前の保存したy座標の位置 |
3 |
獲得・復帰タスクに入る前の保存した姿勢角 |
4 |
タイマタスク停止flag |
5 |
稼動フラグ |
6 |
トレス終了フラグ(TRUE で終わった) |
7 |
ポストからの距離 |
8 |
MIRSからポストがどの方向にあるか(degree) |
-
初期設定
BBをクリアする。
-
モジュール定義
void inzt06():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図10.1 inzt06モジュールHCPチャート
-
割り込み処理タスク
なし
-
タイマ処理タスク
なし
- ノーマルタスク
スタート位置までの移動。
-
モジュール定義
void nrmt06(int,int):
-
HCPチャート
図10.2 nrmt06モジュールHCPチャート
11.task07:軌道トレースタスク
-
機能
ある決まった軌道に沿って本体を動かす。目標地に着く度に、自己位置修正を行う。そして、超音波センサを使用しながらある範囲内に超音波受信がある時、またそれがポストであったら位置を保存し、獲得・復帰タスクに移す。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
ルートトレース走行 |
01 |
|
ある定められたルートを走る. |
向きの修正 |
01 |
|
進むべき進行方向へMIRSを向かせる. |
-
BB仕様
番号 |
内容 |
0 |
タスク開始フラグ |
1 |
タスク終了フラグ |
2 |
n番目の目標位置 |
3 |
現在位置のyデータ |
4 |
現在位置のxデータ |
5 |
獲得するポスト位置のxデータ |
6 |
獲得するポスト位置のxデータ |
-
初期設定
BBをクリアする。
-
モジュール定義
void inzt07():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図11.1 : inzt07モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
割り込み処理タスク
NOP
-
モジュール定義
interrupt void intt07():なし
-
HCPチャート
なし
-
タイマ処理タスク
ある目標位置をセットし、それに向かって本体を動かす。この時、軌道からずれないように自己位置を修正するために自己位置修正タスクを呼び出す。また、必要な時、獲得・復帰タスクを呼び出すか回避するかを行う。
-
モジュール定義
void timt07(int, int):n番目の目標位置をセットし、獲得・復帰タスクを呼び出す関数。
-
HCPチャート
図11.2 : timt07モジュールHCPチャート(ポストスクリプト/tgif形式
)
- ノーマルタスク
Timer taskの起動と変数の受け渡し。
-
モジュール定義
void nrmt07(int,int):Timer taskの起動と変数の受け渡し。
-
HCPチャート
図11.3 : nrmt07モジュールHCPチャート(ポストスクリプト/tgif形式
)
12.task08:指定位置移動タスク
-
機能
行動計画タスクから与えられた位置(獲得するポストの位置、ルートへの復帰位置)までの移動
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
角度修正 |
01 |
n |
角度修正する。nは、修正のためのパラメータ(int 配列)へのポインタ。 |
-
BB仕様
番号 |
内容 |
0 |
移動開始フラグ |
1 |
移動終了フラグ |
2 |
移動距離x |
3 |
移動距離y |
4 |
ポスト位置データ1のx |
5 |
ポスト位置データ1のy |
6 |
ポスト位置データ2のx |
7 |
ポスト位置データ2のy |
-
初期設定
BBクリアのみ。
-
モジュール定義
void inzt08():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図12.1 inzt08モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
割り込み処理タスク
何もしない。
-
モジュール定義
interrupt void intt08():NOP
-
HCPチャート
Not exist
-
コマンド処理
-
モジュール定義
void nrmt08(int,int):タイマタスクの起動。
-
HCPチャート
図12.2 nrmt08モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
タイマ処理
指定された位置までの移動
-
モジュール定義
void timt08(int,int):指定された位置までの移動
-
HCPチャート
図12.3 timt08モジュールHCPチャート(ポストスクリプト
/tgif形式 )
13.task09:ポスト獲得タスク
-
機能
ポストへ近づきポストを回りスイッチを押す。ポスト獲得時にポスト位置を記憶する。パラメータにより、ポストまで近づく動作、元の位置に戻る動作の有無を設定可能。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
獲得動作 |
01 |
n(postの座標を格納してある配列へのpointer) |
獲得動作をする。 |
-
BB仕様
番号 |
内容 |
0 |
獲得開始フラグ |
1 |
獲得終了フラグ |
2 |
ポスト発見位置x |
3 |
ポスト発見位置y |
4 |
スイッチ角度 |
5 |
ポスト回転数 |
-
初期設定
BBクリアのみ。
-
モジュール定義
void inzt09():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図13.1 inzt09モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
割り込み処理タスク
赤外線センサ割り込みによって起動。移動しながらポストスイッチを押す.ポストのデータを書く。
-
モジュール定義
interrupt void intt09():スイッチを押す.ポストのデータを書く.
-
HCPチャート
図13.2 intt09モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
コマンド処理
獲得行動をする準備をし、次の動作のためタイマータスクの解除。
-
モジュール定義
void nrmt09(int,int):後ろへ下がりながら90°反転、タイマータスクの解除
-
HCPチャート
図13.3 nrmt09モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
タイマ処理
-
モジュール定義
void timt09(int,int):ポストの周りを回る.
-
HCPチャート
図13.4 timt09モジュールHCPチャート(ポストスクリプト
/tgif形式 )
14.task10:回避タスク
-
機能
移動中、障害物(獲得済みポスト、壁)にぶつかったとき、その障害物を避けて正規の行動に復帰する。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
回避行動 |
01 |
n |
獲得済みポスト及び壁の回避行動をする. |
※現段階ではnrmt10の中で処理の選択をしている.しかしnrmt10にコードを与えられることにより処理の選択も可能である.(その場合は最上位タスクの行動計画タスクが障害物が何か読み取って、コマンドで渡さなければならない。)
-
BB仕様
番号 |
内容 |
0 |
回避開始フラグ |
1 |
回避終了フラグ |
2 |
復帰位置のx |
3 |
復帰位置のy |
-
初期設定
BBをクリアする。
-
モジュール定義
void inzt10():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図14.1 inzt10モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
割り込み処理タスク
NOP
-
モジュール定義
interrupt void intt10():なし
-
HCPチャート
なし
-
タイマ処理タスク
ポストならポストの周りを回って回避、壁なら最寄のポストへ戻る.
-
モジュール定義
void timt10(int, int):回避動作
-
HCPチャート
図14.2 timt10モジュールHCPチャート(ポストスクリプト/tgif形式
)
-
ノーマルタスク
- 回避行動の判別
- 後進しながら90°反転
- 復帰位置の設定
- Timer taskを起動する
※このnrmt10は回避行動の準備の処理をするものであるが、これはその準備が終わるまでほとんどの処理を占有すると思われる.
-
モジュール定義
void nrmt10(int,int):上記の3つの動作
-
HCPチャート
図14.3 nrmt10モジュールHCPチャート(ポストスクリプト/tgif形式
)
15.task11:補正タスク
-
機能
ルートから外れたときに位置を修正する。
-
コマンド仕様
コマンド名 |
コード
(HEX) |
サブコマンド |
機能 |
位置修正 |
01 |
n |
位置を修正するかを設定する.
|
-
BB仕様
番号 |
内容 |
0 |
タスク開始フラグ |
1 |
タスク終了フラグ |
2 |
現在位置のxデータ |
3 |
現在位置のyデータ |
-
初期設定
BBを初期化する。タイマタスク登録。
-
モジュール定義
void inzt11():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図15.1 inzt11モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
コマンド処理
目標地点、修正の有効無効の設定を行う。
-
モジュール定義
void nrmt11(int,int):設定変更
-
HCPチャート
図15.2 nrmt11モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
割り込み処理
特に無し。
-
モジュール定義
void intt11:無し
-
HCPチャート
Not exist
-
タイマ処理
特に無し。
-
モジュール定義
void timt11:無し
-
HCPチャート
Not exist
16.task12:センサ試験タスク
1.機能
各センサが正常に動作するかの試験。DIPスイッチによってどのセンサを試験するかを選別する。
2.コマンド仕様
コマンド |
コード(HEX) |
サブコマンド |
機能 |
センサ試験 |
01 |
|
DIPスイッチの状況より試験するセンサを選択後試験。 |
|
|
|
|
3.BB仕様
番号 |
内容 |
1 |
LED表示データ |
2 |
DIPスイッチ選択データ |
4.初期設定
BBのデータを初期化。
1.定義
void inzt12():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
図16.1.inzt12モジュールHCPチャート
5.割り込み
今のところ無し。
6.タイマ処理
今のところ無し。
7.コマンド処理
詳細は、試験項目を参照
1.定義
void nrmt12():センサのテストをする。
2.HCPチャート
図16.2.nrmt12モジュールHCPチャート
17.task13:行動試験タスク
1.機能
各行動が正常に動作するかの試験。DIPスイッチによってどの行動を試験するかを選別する。
2.コマンド仕様
コマンド |
コード(HEX) |
サブコマンド |
機能 |
選択及び試験 |
02 |
|
実際に試験させる。 |
|
|
|
|
3.BB仕様
番号 |
内容 |
1 |
LED表示データ |
2 |
DIPスイッチ選択データ |
4.初期設定
BBのデータを初期化。コマンド処理void nrmt13()を呼び出す。
1.定義
void inzt13():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート
図17.1.inzt13モジュールHCPチャート
5.割り込み
Mirsが暴走したときのためのハードウェア割り込み。
6.タイマ処理
今のところ無し。
7.コマンド処理
DIPスイッチの状態よりどの行動を試験するかを判断。それぞれの行動に関するタスクを呼び出して実行。結果をBBにから読み、それをLEDで表示する。
1.定義
void nrmt13():初期設定関数から呼び出されて起動。
2.HCPチャート
図17.2.nrmt13モジュールHCPチャート
18.task14:行動計画タスク
-
機能
ディップ初期化タスクを起動し、ルートのスタート位置に来ると、ルートトレースタスク、超音波センサに反応があると指定位置移動タスク、ポストがあれば獲得タスク、障害物にぶつかったら回避タスク、また位置修正タスクを起動する。
2回目には1回目のポストデータより最短ルートを出す。
このタスクにより行動の手順がわかる。
-
コマンド仕様
-
BB仕様
番号 |
内容 |
0 |
現在起動しているタスクのnumber |
1 |
現在位置のxデータ |
2 |
現在位置のyデータ |
3 |
獲得したいポストのxデータ |
4 |
獲得したいポストのyデータ |
※1,2は補正タスク、またはロータリーエンコーダの値より、3,4のデータはルートトレースタスク、または指定位置移動タスクのBBより持ってこられ、条件判断の材料となる.
-
初期設定
BBを初期化する。
-
モジュール定義
void inzt14():リアルタイムモニタから呼ばれる初期設定関数。
-
HCPチャート
図18.1 inzt14モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
コマンド処理
なし。
-
モジュール定義
void nrmt14(int,int):NOP
-
HCPチャート
-
割り込み処理
-
モジュール定義
void intt14():タッチセンサ割り込みによって回避、獲得タスクを起動する。
-
HCPチャート
図18.2 intt14モジュールHCPチャート(ポストスクリプト
/tgif形式 )
-
タイマ処理
スタンバイ、監視、MAP作成を行う。
-
モジュール定義
void timt14():スタンバイ、監視、MAP作成を行う。(獲得と回避タスクは割り込みによって起動される.)
-
HCPチャート
図18.3 timt14モジュールHCPチャート(ポストスクリプト
/tgif形式 )
※パフォーマンスタスクについては詳細は決めていない。多分PWMをメインに動かすことになると思われる。このタスクは実際にMIRSが出来あがった後でその動きから堂言う行動をさせるか決めていこうと思う。
19.試験
-
タスク単体試験
- MIRS9902タスク単体試験仕様書(現在作成中)参照
-
標準MIRS上での試験
- MIRS9902標準MIRS上試験仕様書(現在作成中)参照
-
規定走行試験
- MIRS9902規定走行試験仕様書(現在作成中) 参照
-
システム試験
- MIRS9902システム試験仕様書(現在作成中) 参照
20.作成ドキュメント一覧
ソフトウェアインストール手順書 |
|
MIRS9902.task00(Program file) |
|
MIRS9902.task01(Program file) |
|
MIRS9902.task02(Program file) |
|
MIRS9902.task03(Program file) |
|
MIRS9902.task04(Program file) |
|
MIRS9902.task05(Program file) |
|
MIRS9902.task06(Program file) |
|
MIRS9902.task07(Program file) |
|
MIRS9902.task08(Program file) |
|
MIRS9902.task09(Program file) |
|
MIRS9902.task10(Program file) |
|
MIRS9902.task11(Program file) |
|
MIRS9902.task12(Program file) |
MIRS9902タスク単体試験仕様書(現在作成中) |
MIRS9902標準MIRS上試験仕様書(現在作成中) |
MIRS9902規定走行試験仕様書(現在作成中) |
MIRS9902システム試験仕様書(現在作成中) |
MIRS9902取扱説明書(現在作成中) |