沼津高専 電子制御工学科
MIRS98ソフトウェア詳細設計書
MIRS9803-SOFT-0003
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 1999.5.23 梅原 馬場 初版
B01 1999.6.14 梅原 馬場 全体改訂
C01 2000.2.28 梅原 馬場 全体改訂

目次

  1. はじめに
  2. 概要
  3. リアルタイムモニタ
  4. task00〜task13
    1. 機能
    2. コマンド仕様
    3. BB仕様
    4. 初期設定
    5. 割り込み処理
    6. タイマ処理
    7. コマンド処理
  5. 試験
    1. タスク単体試験
    2. 標準MIRS上での試験
    3. 試験走行
    4. システム試験
  6. 作成ドキュメント一覧
  7. 参考資料

1.はじめに

本ドキュメントは、MIRS98XX基本設計書(MIRS98SF-CURR-0008)に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。

2.概要

MIRS98XXソフトウェアはリアルタイムモニタMIRX68KとMIRX68K上で動作するタスクから構成される。タスクは低レベルタスクと高レベルタスクとメインタスクに大別され、基本的には低レベルタスクはハードウェアの制御を高レベルタスクは低レベルタスクを用いてシステムの動作を実現する。メインタスク(行動計画タスク)はスイッチ状態やセンサ情報をもとに動作を決定しそれに応じたタスクの起動を行う。MIRS98XXソフトウェアは下記のタスクから構成される。
低レベルタスク   高レベルタスク メインタスク      

3.リアルタイムモニタ

レベルタスク
ポスト獲得タスク、接触回避タスク
1起動復帰タスク
2軌道トレースタスク
3行動計画タスク、試験走行タスク
4
5超音波タスク、赤外線タスク
6
7PWMモータ駆動タスク,マンマシンインターフェイスタスク




タスク名tskXX初期設定割り込み処理タイマ処理コマンド処理
マンマシニンターフェイスタスクtask00×
超音波センサタスクtask01×
ダミータスクtask02××××
赤外線センサタスクtask03××
PWMモータ駆動タスクtask04××
ダミータスクtask05××××
ロータリーエンコーダタスクtask06××
行動計画task07××
2回目行動タスクtask08××
接触回避タスクtask09××
軌道トレースタスクtask10××
ポスト獲得タスクtask11××
ランダム行動タスクtask12×

4.タスク

4.task00:マンマシインターフェースタスク

  1. 機能
    主に7seg.LED表示,単色LED点灯の処理を行う。  電源投入時またはリセットボタンが押されたとき、一回だけ初期設定し,処理終了後行動計画タスクを起動する。タスクの初期化,ハードウェアの初期設定,掲示板(BB)の初期化を行う。また,DIPスイッチを読み込み,動作モードをBBに書き込む。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
  4. 初期設定
     Hardware Function Libraryのマン・マシンインターフェース系の初期化関数void mmi_init();を用いる。BBを初期化し、タイマタスク登録をする。
    1. モジュール定義
      void inzt00():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-0-1.inzt00モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    DIPスイッチを読み込み1回目の動作か2回目の動作か判断。
    1. モジュール定義
      void intt00():電源投入時またはリセットボタン押下時に一回だけ起動される関数
    2. HCPチャート

      図4-0-2.intt00モジュールHCPチャート(頭脳winCAD

  6. タイマ処理
    一定時間毎にセンサの状態を読み出し、LED表示してBBに書き込む。
    1. モジュール定義
      void timt00():タイマ割り込みによって一定時間ごとに実行される関数。
    2. HCPチャート

      図4-0-3.timt00モジュールHCPチャート(頭脳winCAD

  7. コマンド処理
    なし

4.task01:超音波センサタスク

  1. 機能
     4つの超音波を順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで繰り返し測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してBBに書き込む。その後、次のチャネルのセンサより超音波を発信し再び割り込み待ち状態になる。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
    1前超音波センサの値
    2右超音波センサの値
    3後超音波センサの値
    4左超音波センサの値
    51つ目の超音波センサの最小値(ポールの中心までの距離)
    61つ目のポールの中心までに進んだ距離[cm]
    72つ目の超音波センサの最小値(ポールの中心までの距離)
    82つ目のポールの中心までに進んだ距離[cm]
    93つ目の超音波センサの最小値(ポールの中心までの距離)
    103つ目のポールの中心までに進んだ距離[cm]
    11第1ポストの左右を示す 1:右 2:左
    12第2ポストの左右を示す 1:右 2:左
    13第3ポストの左右を示す 1:右 2:左
    14第1ポストの検出中フラグ 1:右 2:左 3:計測終了
    15第2ポストの検出中フラグ 1:右 2:左 3:計測終了
    16第3ポストの検出中フラグ 1:右 2:左 3:計測終了
    17使う超音波センサを示す 1:右 2:左 3:左右
  4. 初期設定
     Hardware Function Libraryの超音波センサ系の初期化関数void uss_init();を用いる。BBを初期化し、割り込みタスク、タイマタスク登録をする。
    1. モジュール定義
      void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-1-1.inzt01モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    超音波センサへの受信信号があったときに距離を計算しBBに書き込む。ポスト位置を確認するのも同時に行う。
    1. モジュール定義
      void intt01():超音波センサへの割り込み要求があった時に実行される関数
    2. HCPチャート

      図4-1-2.intt01モジュールHCPチャート(頭脳winCAD

  6. タイマ処理
    一定時間に受信信号がなかったとき受信を中断して他のセンサに移る。
    1. モジュール定義
      void timt01():タイマ割り込みによって一定時間ごとに実行される関数。
    2. HCPチャート

      図4-1-3.timt01モジュールHCPチャート(頭脳winCAD

  7. コマンド処理
    なし

4.task02:ダミータスク

  1. 機能
  2. コマンド仕様
  3. BB仕様
  4. コマンド名コード
    (HEX)
    サブコマンド機能
    番号内容
  5. 初期設定
    なし
  6. 割り込み処理
    なし
  7. タイマ処理
  8. コマンド処理
    なし

4.task03:赤外線センサタスク

  1. 機能
    一定時間ごとに起動。 赤外線を感知し、感知した場所の値をBBに書き込む。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
    1赤外線の値
  4. 初期設定
     HFLの赤外線センサ系初期化関数void irs_init();を用いる。BBを初期化し、割り込みタスク登録をする。
    1. モジュール定義
      void inzt03():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-3-1.inzt03モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    なし
  6. タイマ処理
    赤外線センサからの割り込み要求信号があったとき、各赤外線センサの状態を読み取り、感知数をBBに書き込む。
    1. モジュール定義
      void timt03():一定時間ごとに赤外線の値を読み取る。
    2. HCPチャート

      図4-3-2.timt03モジュールHCPチャート(頭脳winCAD

  7. コマンド処理
    なし

4.task04:PWMモータ駆動タスク

  1. 機能
     一定時間毎に起動され、BBの値を読み込みPWMに書き込む。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
    1左PWMデータ
    2右PWMデータ
    3右補正量 (タスク6で決定)
    4左補正量 (タスク6で決定)
    5ポスト獲得時右補正量 (タスク6で決定)
    6ポスト獲得時左補正量 (タスク6で決定)
  4. 初期設定
     HFLのPWM系初期化関数void pwm_init();を用いる。BBを初期化し、タイマタスク登録をする。
    1. モジュール定義
      void inzt04():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-4-1.inzt04モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    なし
  6. タイマ処理
    一定時間毎に実行され、HFLのPWM系関数のvoid pwm_data(int r,int l);によって指定される左右車輪の速度データをPWMに書き込む。
    1. モジュール定義
      timt04:タイマ割り込みによって一定時間ごとに実行される関数。
    2. HCPチャート

      図4-4-2.timt04モジュールHCPチャート(頭脳winCAD

  7. コマンド処理
    なし

4.task05:ダミータスク

  1. 機能
  2. コマンド仕様
  3. BB仕様
  4. コマンド名コード
    (HEX)
    サブコマンド機能
    番号内容
  5. 初期設定
    なし
  6. 割り込み処理
    なし
  7. タイマ処理
  8. コマンド処理
    なし

4.task06:ロータリエンコーダタスク

  1. 機能
    一定時間毎に左右のロータリエンコーダの値を読み取りPWMにいれる値を決定。また、自己姿勢角計算する。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
    0不意に止まったとき
    1タッチセンサ入力データ
    2右タイヤのパルス数
    3左タイヤのパルス数
    4右タイヤの進んだ距離の総和[mm]
    5左タイヤの進んだ距離の総和[mm]
    6右モータのパルス数
    7左モータのパルス数
    8右タイヤの回転数
    9左タイヤの回転数
    10姿勢角[°]
    11補正のモード
    12目標速度 [cm/sec]
    13目的補正角
    14目標移動距離[cm]
    15フラグ
    16タッチセンサデータ
    17周回の距離記憶用
    18ポスト獲得時姿勢角保持
    19ポスト獲得時モード
  4. 初期設定
     Hardware Function Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void re_ts_init();を用いる。BBを初期化し、タイマタスク登録をする。
    1. モジュール定義
      void inzt06():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-6-1.inzt06モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    なし
  6. タイマ処理
    一定時間毎に実行され、左右のロータリエンコーダの値ををBBに書き込む。
    1. モジュール定義
      timt06:タイマ割り込みによって一定時間ごとに実行される関数。
    2. HCPチャート

      図4-6-2.timt06モジュールHCPチャート(頭脳winCAD

  7. コマンド処理
    なし

task07:行動計画タスク

  1. 機能
    行動計画モジュールで次の行動を決定する。
    その場回転モジュールでは指定された角度へ回転し、その後その場回転終了フラグをオンにする。
  2. コマンド仕様
  3. BB仕様
    番号内容
    1その場回転フラグ
    2その場回転の目標速度[cm/sec]
    3その場回転の目標角度
    4mode
  4. 初期設定
    BBを初期化しノーマルタスク及びタイマタスクを登録する。
    1. モジュール定義
      void inzt07():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-7-1.inzt07モジュールHCPチャート

  5. 割り込み処理
    なし
  6. タイマ処理
    その場回転フラグが入ると設定された角度へ姿勢角を変え、その場回転フラグをオフにする。
    1. モジュール定義
      void timt07():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-7-2.timt07モジュールHCPチャート

  7. コマンド処理
    タスクが呼び出されると今のモードによって次の行動を決定する。
    1. モジュール定義
      void nrmt07():行動を計画する
    2. HCPチャート

      図4-7-3.nrmt07モジュールHCPチャート

task08:2回目行動タスク

  1. 機能
    BBの情報からポストの位置を決定しそこに移動する。
  2. コマンド仕様
    なし
  3. BB仕様
    番号内容
    0mode
    11つ目の超音波センサの最小値(ポールの中心までの距離)
    21つ目のポールの中心までに進んだ距離[cm]
    32つ目の超音波センサの最小値(ポールの中心までの距離)
    42つ目のポールの中心までに進んだ距離[cm]
    53つ目の超音波センサの最小値(ポールの中心までの距離)
    63つ目のポールの中心までに進んだ距離[cm]
    7第1ポストの左右を示す 1:右 2:左
    8第2ポストの左右を示す 1:右 2:左
    9第3ポストの左右を示す 1:右 2:左
  4. 初期設定
    BBの初期化、ノーマルタスクの登録
    1. モジュール定義
      void inzt08():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-8-1.inzt08モジュールHCPチャート

  5. 割り込み処理
  6. タイマ処理
  7. コマンド処理
    軌道のトレースを行う
    1. モジュール定義
      void nrmt08():
    2. HCPチャート

      図4-8-2.nrmt08モジュールHCPチャート

task09:ポスト回避タスク

  1. 機能
    1回目のスタート後、中央を走っているとき、タッチセンサの割り込みにより起動される。
    BBのロータリエンコーダの情報を読み込みながらポストをよける処理をする。
    また、タッチセンサの値からポストの位置を計算しをBBに書き込む。
    ポスト回避終了時点で、処理は終了となり軌道トレースタスクへ戻る。
  2. コマンド仕様
    なし
  3. BB仕様
    番号内容
    0モード
    1反応したタッチセンサの値
    21つ目のポールの中心までに進んだ距離[cm]
    3余分に走った量(タイヤ)
    4余分に計る量(センサ)
    5ポストまでに走った距離
    63つ目のポールの中心までに進んだ距離[cm]
    7左右に出た量
    8ポスト回避不可フラグ
  4. 初期設定
    BBの初期化、ノーマルタスクの登録
    1. モジュール定義
      void inzt09():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-9-1.inzt09モジュールHCPチャート

  5. 割り込み処理
  6. タイマ処理
  7. コマンド処理
    ポストの回避を行う
    1. モジュール定義
      void nrmt09():
    2. HCPチャート

      図4-9-2.nrmt09モジュールHCPチャート

task10:軌道トレースタスク

  1. 機能
    スタート後、行動計画タスクにより呼び出される。
    超音波センサデータタスクのBBにポストの位置を書き込みながらまず直進する。
    その後、超音波センサデータタスクのBBの値を読み込み、ルートを計算しルートどうりに移動。
  2. コマンド仕様
    なし
  3. BB仕様
    番号内容
    0モード
    1第3ポストへの目標姿勢角
    2第3ポストへの目標移動距離
    3第3ポストと比べて第2ポストがどこにあるか 1:右 2:左
    4第2ポストへの目標姿勢角
    5第2ポストへの目標移動距離
    6第2ポストと比べて第1ポストがどこにあるか 1:右 2:左
    7第1ポストへの目標姿勢角
    8第1ポストへの目標移動距離
  4. 初期設定
    BBの初期化、ノーマルタスクの登録
    1. モジュール定義
      void inzt10():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-10-1.inzt10モジュールHCPチャート

  5. 割り込み処理
  6. タイマ処理
  7. コマンド処理
    軌道トレースを行う
    1. モジュール定義
      void nrmt10():
    2. HCPチャート

      図4-10-2.nrmt10モジュールHCPチャート

task11:ポスト獲得モジュール

  1. 機能
    軌道トレースタスクの軌道計算後のタッチセンサ割り込みで壁でないとの判断後、行動開始。
    タッチセンサの値でポストの中心を計算し、右回り、左回りを考えポストを回転する。
  2. コマンド仕様
    なし
  3. BB仕様
    番号内容
    0モード
    1反応したタッチセンサの値
    2今の姿勢角
    3ポスト回転方向 1:時計周り 2:反時計周り
  4. 初期設定
    BBの初期化、ノーマルタスクの登録
    1. モジュール定義
      void inzt11():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-11-1.inzt10モジュールHCPチャート

  5. 割り込み処理
  6. タイマ処理
  7. コマンド処理
    ポスト回転を行う
    1. モジュール定義
      void nrmt11():
    2. HCPチャート

      図4-11-2.nrmt11モジュールHCPチャート

task12:ランダム動作

  1. 機能
    動作がとまったとき起動。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
    回転制御01any(未使用)BBから状態を読み込み,回転を制御。
  3. BB仕様
    番号内容
    1行動フラグ
    2行動フラグ
    3行動フラグ
    4行動フラグ
    5行動フラグ
    6目標姿勢角
    7タッチセンサデータ
    8カウンタ
    9any
    10回転フラグ
  4. 初期設定
    BBの初期化
    1. モジュール定義
      void inzt12():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図4-12-0.inzt12モジュールHCPチャート(頭脳winCAD

  5. 割り込み処理
    なし
  6. タイマ処理
    進む距離やその場回転の角度を決定。
    1. モジュール定義
      void timt12():一定時間ごとに動作を決める関数。
    2. HCPチャート
      図4-12-1.timt12モジュールHCPチャート(頭脳winCAD
  7. コマンド処理
    ポスト回転の補正と壁とを判断する。
    1. モジュール定義
      void nrmt12():ポスト回転の補正
    2. HCPチャート
      図4-12-2.nrmt12モジュールHCPチャート(頭脳winCAD

7.試験

  1.タスク単体試験

    1.MMIタスク
      ・7segLED表示
       7segLEDに0〜fまでの数を順に表示させる。
      ・単色LED表示
       赤,緑のLEDがつくことを確認する。
       次に赤,緑のLEDを交互に点灯させる。

    2.超音波センサタスク
      ・距離測定
       超音波の送受信を行い,距離の測定をする。
       結果をBBに書き込み,表示する。
      ・超音波切り替え
       四個の超音波センサを順に切り替えながら距離測定を行う。

    3.赤外線センサタスク
      ・赤外線受信
       赤外線受信データをBBに書き込む。
       データを7segLEDに表示する。
      ・赤外線カウント
       赤外線を感知した数を計算しBBに書き込む。
       データを7segLEDに書き込む。

    4.PWMモータ駆動タスク
      ・左右モータ駆動
       出力デューティ値を7segLEDに表示する。
       停止,前(3段階),停止,後ろ(3段階),を繰り返し出力する。
       初めは左だけ,次に右だけを試験し,最後に両方あわせて試験する。
       回転方向,回転速度の変化が正しく変化するか,しっかり止まるかを見る.

    5.タッチセンサ制御タスク
      ・タッチセンサ制御
       タッチセンサの状態をBBに書き込み,7segLEDに表示する。

    6.ロータリーエンコーダタスク
      ・ロータリーエンコーダ制御
       7segLEDに左右のエンコーダ値と方向ロータリ表示。
       タイヤを回転した時に得られるパルス数を確認する。

    7.赤外線接近タスク
      ・赤外線接近
       赤外線センサが赤外線を感知したら赤外線に向かっていく。
       赤外線の反応が消えたら停止する。

    8.接触回避タスク
      ・障害物回避
       障害物を発見したらそれを回避する。
       その時のロータリーエンコーダの値をBBから読み込み,7ssegLEDに表示する。
       タッチセンサに反応があった場合処理を一時中断し,する。

    9.軌道トレースタスク
      ・トレース
       マップデータを渡し,MIRSがそのとうりに動くかを調べる。

    10.ポスト獲得タスク
      ・ポスト中心計算
       MIRSをポストに衝突させて。
       タッチセンサの反応の位置からポスト中心を計算する。
       計算結果を元にポストの周りを回る。
      ・赤外線の割り込み
       このタスクを起動中に赤外線を当てる。
       その時,赤外線接近タスクが起動されるかを調べる。

    11.軌道復帰タスク
      ・軌道復帰
       軌道復帰データを与えておく。
       MIRSがこのデータどうりの位置にしっかりと行くかどうかを調べる。

    12.試験走行タスク
      ・各種試験走行
       試験走行できるかどうかを調べる。


  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取扱説明書
関連文書