沼津高専 電子制御工学科
MIRS9903ソフトウェア詳細設計書
MIRS9903-DSGN-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2000.6.2 岡本、田口、松浦 小杉 初版
A02 2000.6.20 岡本 小杉 遷移図を加え遷移条件を見直した
A03 2000.7.13 岡本 小杉 超音波センサ、赤外線センサを修正
A04 2000.8.21 田口 小杉 自己位置検出タスクのコマンド、BB、HCPチャート変更。
A05 2000.10.20 岡本 小杉 超音波タスクの仕様を変更
B01 2001.2.7 岡本 小杉 本競技のプログラムにあわせ、タスクの数を変更、内容も大幅に変更。

目次

  1. はじめに
  2. 概要
  3. リアルタイムモニタ
  4. MMIタスク
  5. 超音波センサタスク
  6. 自己位置検出タスク
  7. 赤外線センサタスク
  8. PWMモータ制御タスク
  9. 行動計画タスク
  10. 自己位置修正タスク
  11. ルート移動・ポスト獲得タスク
  12. 誤動作修正タスク
  13. 試験
  14. 作成ドキュメント一覧

1.はじめに

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

2.概要

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

3.リアルタイムモニタ

リアルタイムモニタの設定等
  1. タスク・ファイルのMAX数の宣言(MAX_TASK) = 9タスク
  2. BBの個数の宣言(MAX_BB) = 10個
  3. タスクテーブル
  4. タスク関数の処理の有無と優先度(高0〜6低)
    Oは有り
    Xは無し
    Task No. Initialization Normal Timer Interrupt
    00 (MMI) O O O O
    01 (超音波センサ) O O O O
    02 (自己位置検出) O O O X
    03 (赤外線センサ) O O O O
    04 (PWM) O O O X
    05 (行動計画) O O O X
    06 (自己位置修正) O O O X
    07 (ルート移動・ポスト獲得) O O O X
    08 (誤動作修正) O O O X
  5. 注意点 : tableでBBの初期化をしてるが、要素数はBB_MAXとなるのに注意。

4.task00:MMIタスク

  1. 機能

  2. MMIボードのLED表示のコントロールと押しボタンスイッチの割り込みの受け取りを行う。BBのデータを7seg-LEDに表示する機能。タイマにより一定時間ごとに表示の更新を行う。ロータリスイッチの値をBBに書き込む。
  3. コマンド仕様
  4. コマンド名 コード サブコマンド 機能
    4segLED表示 01 n(BBの番号) 指定されたBB上のデータを4segLEDに表示する。
    赤、緑LED表示 02 n(点灯状態を表す) 赤、緑LEDの表示状態の設定。
    割込設定 04 n(1で許可、0で不許可) 押しボタンスイッチの割込設定
    4segLED表示2 05 n(データ(変数)) 指定された変数のデータを4segLEDに表示する。
    押しボタン設定 06 n 押しボタンの押された回数をnにする。
  5. BB仕様
  6. 番号 内容
    0 変数データ
    4 表示BB番号
    6 赤、緑LED表示データ
    7 押しボタンスイッチの割込設定
    8 ロータリスイッチの値
    9 押しボタンの押された回数
  7. 初期設定

  8. MMIの初期化を行う。BBクリアも行う。
    1. モジュール定義

    2. void inzt00():リアルタイムモニタから呼ばれる初期設定関数。タイマタスクの初期化を行う
    3. HCPチャート

    4. 図4.1 inzt00モジュールHCPチャート/ポストスクリプト
  9. 割り込み処理タスク

  10. 押しボタンスイッチの割り込みを受け取り、押された回数を1増やす。
    1. モジュール定義

    2. interrupt void intt00():リアルタイムモニタから呼ばれる割り込み関数。
    3. HCPチャート

    4.  

      図4.2 intt00モジュールHCPチャート/ポストスクリプト
  11. コマンド処理

  12. 表示データ、赤緑LED表示の設定、押しボタンスイッチの設定を行う。
    1. モジュール定義

    2. void nrmt00(int,int):各フラグ等の設定を行う。
    3. HCPチャート

    4. 図4.1 nrmt00モジュールHCPチャート/ポストスクリプト
  13. タイマ処理

  14. 指定されたBB上のデータをMMIの7seg-LEDに表示する。赤緑LEDの表示も行う。BB表示データの編集も行う。赤緑LEDの表示状態は、点灯および点滅をするかをBB4で指定。また、ロータリスイッチの値をBBに書き込む。
    1. モジュール定義

    2. void timt00(int,int):設定に基づいて、LEDの表示、スイッチの値の書きこみをする。
    3. HCPチャート

    4. 図4.3 timt00モジュールHCPチャート/ポストスクリプト

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

  1. 機能

  2. 超音波センサを動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してn番目のBBに書き込む。サブコマンドのデータから使用する超音波センサを選択し、順次測定する。
  3. コマンド仕様
  4. コマンド名 コード サブコマンド 機能
    測定開始1 01 n(チャネル) 指定されたチャネル番号のセンサの測定を開始する。登録したセンサの測定が一通り終わると停止する。
    測定開始2 02 n(チャネル) 指定されたチャネル番号のセンサの測定を開始する。登録されたセンサ順に繰り返し測定する。
  5. BB仕様
  6. 番号 内容
    0 左方向距離データ(チャネル0)[cm]
    タイムアウト:999
    ハードウェアエラー(センサが接続など):888
    1 右方向距離データ[cm]<
    他は同上
    2 前方向距離データ[cm]
    他は同上
    3 後ろ方向距離データ[cm]
    他は同上
  7. 初期設定

  8. IP-Digtal48のPIT(68230)のB側の初期設定を行う。ポートAをモード0サブモード01に設定する。タイマをDevicewatchdog モードに設定し、タイマ初期値として最大測定距離3mに相当するカウント値を設定する。
    1. モジュール定義

    2. void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. 図5.1 : inzt01モジュールHCPチャート/ポストスクリプト
  9. 割り込み処理タスク

  10. 超音波受信があった時、割り込み処理を行う。
    1. モジュール定義

    2. interrupt void intt01():リアルタイムモニタから呼ばれる割り込み関数。
    3. HCPチャート

    4. 図5.2 : intt01モジュールHCPチャート/ポストスクリプト
  11. コマンド処理
    1. モジュール定義

    2. void nrmt01(int,int):超音波測定開始・停止を行う関数。
    3. HCPチャート

    4. 図5.3 : nrmt01モジュールHCPチャート/ポストスクリプト

4.task02:自己位置検出タスク

  1. 機能

  2. 随時ロータリーエンコーダの値を使い自己位置、自己姿勢角、タッチセンサ の値の獲得をする。
  3. コマンド仕様
  4. コマンド名 コード サブコマンド 機能
    自己位置再設定
    (x座標)
    01 n 自己位置x座標をnに設定し直す。
    自己位置再設定
    (y座標)
    02 n 自己位置y座標をnに設定し直す。
    自己姿勢角再設定 03 n 自己姿勢角をnに設定し直す。nはデジタル表示とする。
    姿勢角回転数再設定 04 n 自己姿勢角が反時計回りに何周したかを判別する姿勢角回転数をnに設定し 直す。時計周りに回った場合はマイナスの値とする。
  5. BB仕様
  6. 番号 内容
    0 位置のX軸データ [cm]
    1 位置のY軸データ [cm]
    2 姿勢角データ [°]
    3 右のロータリエンコーダのデータ
    4 左のロータリエンコーダのデータ
    5 タッチセンサデータ
    6 姿勢角回転数
    7 速度データ [cm/s]
    8 角速度データ [deg/s]
    9 移動量データ [cm]
  7. 初期設定

  8. BB、ロータリーエンコーダーとタッチセンサの 値を初期化する。タイマタスク登録も行う。
    1. モジュール定義

    2. void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. 図6.1inzt02モジュールHCPチャート/ポストスクリプト
  9. コマンド処理

  10. 自己位置を再設定する。
    1. モジュール定義

    2. void nrmt02(int,int):自己位置修正
    3. HCPチャート

    4. 図6.2nrmt02モジュールHCPチャート/ポストスクリプト
  11. 割り込み処理

  12. 特に無し。
    1. モジュール定義

    2. void intt02:無し
    3. HCPチャート

    4. Not exist
  13. タイマ処理

  14. ロータリエンコーダの値をもとに自己位置、自己姿勢角、姿勢角回転数、速度、角速度、移動量を計算する。そして、その値をBBに書き込む。さらに、タッチセンサの値を読み込み、加工して、BBに書き込む。
    1. モジュール定義

    2. void timt02():自己位置を算出する関数。
    3. HCPチャート

    4. 図6.3timt02モジュールHCPチャート/ポストスクリプト

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

  1. 機能

  2. 赤外線センサの情報をBBへ書きこむ。タイマで動きつづける。
     
  3. コマンド仕様
  4. コマンド名 コード サブコマンド 機能
    赤外線割込許可 1 any 赤外線の割込みを許可する。
    赤外線割込不許可 2 any 赤外線の割込許可を取り消す。
    タイマタスクのスタート・ストップ 3 0 or any サブコマンドが0でタイマストップ、それ以外でタイマスタート。
  5. BB仕様
  6. 番号 内容
    0 最新赤外線センサ情報
    1 一つ前の赤外線センサ情報
    2 赤外線センサ情報の変化を表す情報
  7. 初期設定

  8. PITの初期化を行う。BBをクリアし、タイマタスクの登録を行う。
    1. モジュール定義

    2. void inzt03():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. 図7.1 inzt03モジュールHCPチャート/ポストスクリプト
  9. 割り込み処理タスク

  10. NOP
    1. モジュール定義

    2. interrupt void intt03():NOP
    3. HCPチャート

    4. Not exist
  11. コマンド処理

  12. NOP
    1. モジュール定義

    2. void nrmt03(int,int):NOP
    3. HCPチャート

    4. Not exist
  13. タイマ処理

  14. 赤外線センサ情報をBBへ書きこむ。まえの赤外線センサ情報と比較し変化をBBへ書きこむ。
    1. モジュール定義

    2. void timt03(int,int):IRS->BB書きこみ。
    3. HCPチャート

    4. 図7.2 timt03モジュールHCPチャート/ポストスクリプト

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

  1. 機能

  2. デューティ比を用いて左右のモータを制御する。
  3. コマンド仕様
  4. コマンド名 コード サブコマンド 機能
    PWM信号発信 01 any PWMデータ送信
    右モータ信号設定 02 n 右モータ信号設定を行う。nは-100〜100のデューティー比
    左モータ信号設定 03 n 左モータ信号設定を行う。nは-100〜100のデューティー比
    左右モータ停止 04 n 左右モータを停止
  5. BB仕様
  6. 番号 内容
    0 右のデューティ比
    1 左のデューティ比
    2 実際の右デューティ比
    3 実際の左デューティ比
    4 右REデータをduty比に換算した値
    5 左REデータをduty比に換算した値
  7. 初期設定

  8. BBとPWMを初期化する。タイマタスク登録、モータ停止も行う。
    1. モジュール定義

    2. void inzt04():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. 図8.1 inzt04モジュールHCPチャート/ポストスクリプト
  9. コマンド処理

  10. PWM信号を送信しモータを駆動させる。duty比設定のみも行う。
    1. モジュール定義

    2. void nrmt04(int,int):モータ駆動関数。
    3. HCPチャート

    4. 図8.2 nrmt04モジュールHCPチャート/ポストスクリプト
  11. 割り込み処理

  12. 特に無し。
    1. モジュール定義

    2. void intt04:無し
    3. HCPチャート

    4. Not exist
  13. タイマ処理

  14. 一定時間毎に実行され、HFLのPWM系関数のvoid pwm_data(int r,int l);によって指定される左右車輪の速度データをPWMに書き込む。
    1. モジュール定義

    2. void timt04():
    3. HCPチャート

    4. Not exist

9.task05:行動計画タスク

  1. 機能

  2. あらかじめ1回目か2回目かを設定し、それに基づいて競技を行う。 1回目の競技では後退し、ポストの無いゾーンまで行った後に自己位置を確認し、ルート移動タスクを起動する。 2回目の競技でポストの座標をルート移動タスクに渡す。
  3. コマンド仕様

  4. コマンド名 コード サブコマンド 機能
    初期動作 00 any 初期動作を行い、その後ルート移動タスクを呼び出す。
    ポストx座標保存 01 n ポストのx座標を受け取る。nはポストのx座標。
    ポストy座標保存 02 n ポストのy座標を受け取る。nはポストのy座標。
  5. BB仕様

  6. 番号 内容
    0 保存するポストの番号(x座標用)
    1 保存するポストの番号(y座標用)
    2 現在のポスト番号
    3 dipスイッチの値
    4
    5 過去のPUSH Switchの値
    6 初期動作前の時間稼ぎタイマー
    7 カウントアップフラグ
    8 タイマータスクの遷移フラグ
    9 超音波待ちカウンタ
  7. 初期設定

  8. メインタスクに登録後、BBを初期化・タイマータスクの登録。
    1. モジュール定義

    2. void inzt05():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート


    4. 図9.1 inzt05モジュールHCPチャート(ポストスクリプト/tgif形式
  9. コマンド処理

  10. コマンド0で呼び出され、タイマータスクを起動する。
    1. モジュール定義

    2. void nrmt05(int,int):タイマータスクの起動
    3. HCPチャート


    4. 図9.2 nrmt05モジュールHCPチャート(ポストスクリプト/tgif形式
  11. 割り込み処理

  12. 特に無し。
    1. モジュール定義

    2. void intt05:なし
    3. HCPチャート

    4. なし
  13. タイマ処理

  14. 遷移条件にしたがって初期動作を行う。
    1. モジュール定義

    2. void timt05():Normal Taskにより起動され、初期動作を行う。
    3. HCPチャート


    4. 図9.3 timt05モジュールHCPチャート(ポストスクリプト/tgif形式

10.task06:自己位置修正タスク

  1. 機能

  2. task07より設定された目標値をもとに、MIRSの動作を制御する。
  3. コマンド仕様

  4. コマンド名 コード サブコマンド 機能
    直進 01 n n[cm] 直進する。
    後退 02 n n[cm] 後退する。
    回転1 03 n n°までその場回転する。(n°方向を向く)
    回転2 04 n n°回転する。
    ポスト周回 05 n n°時計回りに周回する。
    壁と平行に 06 n n°方向の壁と平行になる。
    タイマータスクストップ 0 any 動作終了
  5. BB仕様

  6. 番号 内容
    0 動作終了を示すフラグ
    1 目標姿勢角
    2 目標距離
    3 目標値までの残存距離、または残存姿勢角
  7. 初期設定

  8. BBを初期化する。タイマタスク登録。
    1. モジュール定義

    2. void inzt06():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート


    4. 図10.1 inzt06モジュールHCPチャート(ポストスクリプト/tgif形式
  9. コマンド処理

  10. 目標地点の設定、タイマタスク起動を行う。
    1. モジュール定義

    2. void nrmt06(int,int):設定変更
    3. HCPチャート


    4. 図10.1 nrmt06モジュールHCPチャート(ポストスクリプト
  11. 割り込み処理

  12. 特に無し。
    1. モジュール定義

    2. void intt06:なし
    3. HCPチャート

    4. なし
  13. タイマ処理

  14. 目標点を目指して動き、目標点に達したら停止する。同時に動作終了フラグが上がる。
    1. モジュール定義

    2. void timt06():動作関数
    3. HCPチャート


    4. 図10.2 timt06モジュールHCPチャート(ポストスクリプト/tgif形式

11.task07:ルート移動タスク

  1. 機能

  2. ある決まった軌道に沿って本体を動かす。センサを使い状況に応じた動作をするよう定期的にtask06を呼び出す。
  3. コマンド仕様

  4. コマンド名 コード サブコマンド 機能
    ルート移動開始 01 n ルートを移動し、ポストを発見次第獲得する。
    移動終了 0 n ルート移動をストップする。
  5. BB仕様

  6. not used
  7. 初期設定

  8. BBを初期化する。
    1. モジュール定義

    2. void inzt07():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート


    4. 図11.1 : inzt07モジュールHCPチャート(ポストスクリプト/tgif形式
  9. 割り込み処理タスク

  10. 特に無し。
    1. モジュール定義

    2. interrupt void intt07():なし
    3. HCPチャート

    4. なし
  11. タイマ処理タスク

  12. 目標位置をセットし、それに向かって本体を動かす。この時、自己位置修正タスクを呼び出し目標値を設定。また、ポストに対して獲得・復帰をするか、無視するかを行う。
    1. モジュール定義

    2. void timt07(int, int)状況に応じた目標値をtask06へ設定。
    3. HCPチャート


    4. 図11.2 : timt07モジュールHCPチャート(ポストスクリプト/tgif形式
  13. ノーマルタスク

  14. タイマ処理タスクの起動。
    1. モジュール定義

    2. void nrmt07(int,int):タイマ処理タスクの起動と変数の受け渡しを行なう。
    3. HCPチャート


    4. 図11.3 : nrmt07モジュールHCPチャート(ポストスクリプト/tgif形式

12.task08:誤動作修正タスク

  1. 機能

  2. 何らかの原因により、MIRSが動かなくなったときにそこから抜け出し、ルート移動に戻る。
     
  3. コマンド仕様
  4. コマンド名 コード
    (HEX)
    サブコマンド 機能
  5. BB仕様
  6. 初期設定

    1. モジュール定義

    2. void inzt08():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. Not exist
  7. 割り込み処理タスク

  8. 何もしない。
    1. モジュール定義

    2. interrupt void intt08():NOP
    3. HCPチャート

    4. Not exist
  9. コマンド処理

    1. モジュール定義

    2. void nrmt08(int,int);
    3. HCPチャート

    4. 図15.2 nrmt11モジュールHCPチャート/ポストスクリプト
  10. タイマ処理

  11. なし。

13.試験

  1. タスク単体試験
  2. 標準MIRS上での試験
  3. 規定走行試験
  4. システム試験

14.作成ドキュメント一覧

ソフトウェアインストール手順書
MIRS9903.task00(Program file)
MIRS9903.task01(Program file)
MIRS9903.task02(Program file)
MIRS9903.task03(Program file)
MIRS9903.task04(Program file)
MIRS9903.task05(Program file)
MIRS9903.task06(Program file)
MIRS9903.task07(Program file)
MIRS9903.task08(Program file)
MIRS9903タスク単体試験仕様書(MIRS9903-SOFT-0002)
MIRS9903標準MIRS上試験仕様書(MIRS9903-SOFT-0002)
MIRS9903規定走行試験仕様書(MIRS9903-SOFT-0003)
MIRS9903システム試験仕様書(MIRS9903-SOFT-0004)
関連文書