沼津高専 電子制御工学科
MIRS9905ソフトウェア詳細設計書
MIRS9905-DSGN-0003
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 H12.5.7 山下晋 八窪 初版
A02 H12.9.20 稲葉友洋 八窪 赤外線センサのHCPチャートを少し変更
A03 H12.10.12 山下晋 八窪 PWMタスクの各コマンドに対する動作の変更

目次

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

1.はじめに

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

2.概要

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

3.リアルタイムモニタ

リアルタイムモニタの設定等
  1. タスク・ファイルのMAX数の宣言(MAX_TASK) = 12タスク
  2. BBの個数の宣言(MAX_BB) = 10個
  3. タスクテーブル
  4. タスク関数の処理の有無と優先度(高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 X O X
    04 (PWM) O O O X 1
    05 (行動計画) O O O X 6
    06 (自己位置修正) O O O X 2
    07 (ポスト回避) O O O X 4
    08 (起動トレース) O O O X 5
    09 (試験走行) O O O X 5
    10 (位置復帰) O O O X 6
    11 (ポスト獲得タスク) O × × O 3
  5. 注意点 : tableでBBの初期化をしてるが、要素数はBB_MAXとなるのに注意。

タスクの詳細

4.task00:MMIタスク

  1. 機能

  2. MMIボードのLED表示のコントロールと押しボタンスイッチの割り込みの受け取りを行う。BBに書かれた4桁のデータを4桁7seg-LEDに表示する機能。タイマにより一定時間ごとに表示の更新を行う。ロータリスイッチの値をBBに書き込む。
    BBに各設定値へのポインタを乗せているので、コマンドを使わずにそのポインタを用いることにより設定が即時反映される。
     
  3. コマンド仕様
  4. コマンド名 コード
    (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 に設定
  5. BB仕様
  6. 番号 内容
    0 表示データその1のポインタ
    1 表示データその2のポインタ
    2 表示データその3のポインタ
    3 表示データその4のポインタ
    4 表示するBB番号のポインタ
    5 ローテーションフラグのポインタ
    6 赤、緑LED表示状態のポインタ
    7 押しボタン割り込みフラグのポインタ
    8 ロータリスイッチの値
    9 押しボタンの押された回数
  7. 初期設定

  8. LED周りの初期設定を行う。BBクリア等も行う。
    1. モジュール定義

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

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

  10. 押しボタンスイッチの割り込みを受け取る。割り込みフラグをインクリメントする。(割り込みがあったかどうかは、各タスク内で値の変化を判断してください)。ロータリフラグが立っていれば表示BB位置を次の位置にする。
    1. モジュール定義

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

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

  12. 表示BB位置、赤緑LED表示、ローテーションの設定を行う。
    1. モジュール定義

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

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

  14. 指定された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 赤前状態 赤点滅 赤点灯
    1. モジュール定義

    2. void timt00(int,int):表示する。
    3. HCPチャート

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

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

  1. 機能

  2. 4個の超音波を入力された順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してBBに書き込む。その後、次の決定したチャネルのセンサより超音波を発信し再び割り込み待ち状態になる。
  3. コマンド仕様
  4. コマンド名 コード
    (HEX)
    サブコマンド 機能
    測定開始 01 n(チャネル) 指定されたチャネル番号のセンサの測定を開始する。測定はqueに登録された順で行われる。既に測定が開始されている状態でこのコマンドが起動されたときはqueに登録する。
    測定停止 02 any(未使用) 測定を停止し、queをクリアする。
    測定開始 03 any(未使用) 測定を開始。QUE への登録は無し。(通常は使用禁止)
  5. BB仕様
  6. 番号 内容
    0 チャネル0の測定結果[cm]
    タイムアウト:999
    ハードウェアエラー:888
    近すぎ: 777
    1 チャネル0の測定回数
    2 チャネル1の測定結果[cm]
    他は同上
    3 チャネル1の測定回数
    4 チャネル2の測定結果[cm]
    他は同上
    5 チャネル2の測定回数
    6 チャネル3の測定結果[cm]
    他は同上
    7 チャネル3の測定回数
    8 queに入っている個数
    9 queの中身(bit coding)
  7. 初期設定

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

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

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

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

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

    4. 図5.2 : intt01モジュールHCPチャート(ポストスクリプト/tgif形式
  11. タイマ処理タスク

  12. やることなし。
    1. モジュール定義

    2. void timt01(int, int):なし
    3. HCPチャート

    4. なし
  13. コマンド処理
    1. モジュール定義

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

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

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

  1. 機能

  2. 随時ロータリーエンコーダの値を使い自己位置の確認をする。又、時々超音波センサを使い壁との間隔を確認する。
  3. コマンド仕様
  4. コマンド名 コード
    (HEX)
    サブコマンド 機能
    自己位置設定 01 n 自己位置を設定する。nは、float 型の配列へのポインタで、x[cm]、y[cm]、θ[rad]の順で格納されていること。
    Limit設定 02 n 自己位置のLimitを設定する。nは、float 型の配列へのポインタで、x[cm]、y[cm]の順で格納されていること。
  5. BB仕様
  6. 番号 内容
    0 位置のX軸データ
    1 位置のY軸データ
    2 姿勢角データ
    3 右のロータリエンコーダのデータ
    4 左のロータリエンコーダのデータ
    5 タッチセンサのデータ
    6 方向のデータ(2:前 3:左 0:後 1:右)
    7 速度
    8 角速度
    9 システムが動き出してからの移動距離(cm)
  7. 初期設定

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

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

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

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

    2. void nrmt02(int,int):自己位置を設定
    3. HCPチャート

    4. 設定のみ
  11. 割り込み処理

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

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

    4. Not exist
  13. タイマ処理

  14. ロータリエンコーダの値をもとに自己位置を計算する。そして、その値をBBに書き込む。さらに、タッチセンサの値をBBに書き込む。
    1. モジュール定義

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

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

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

  1. 機能

  2. 赤外線センサの情報をBBへ書きこむ。タイマで動きつづけます。
     
  3. コマンド仕様
  4. コマンド名 コード
    (HEX)
    サブコマンド 機能
    no command any any NOP
  5. BB仕様
  6. 番号 内容
    0 赤外線センサ情報
    1 赤外線測定回数
  7. 初期設定

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

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

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

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

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

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

  12. 動作無し.
    1. モジュール定義

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

    4. Not exist
  13. タイマ処理

  14. 赤外線センサ情報をBBへ書きこむ。
    1. モジュール定義

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

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

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

  1. 機能

  2. デューティ比を用いて左右のモータを制御する。
  3. コマンド仕様
  4. コマンド名 コード
    (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で、停止する。
  5. BB仕様
  6. 番号 内容
    0 右の論理デューティ比
    1 左の論理デューティ比
    2 右の物理デューティ比
    3 左の物理デューティ比
    4 右のR.E.値を換算したデューティ比
    5 左のR.E.値を換算したデューティ比
  7. 初期設定

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

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

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

  10. BBに書き込んであるデータをもとにPWM信号を送信しモータを駆動させる。
    1. モジュール定義

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

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

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

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

    4. Not exist
  13. タイマ処理

  14. LQI制御、PID制御を行っている。
    1. モジュール定義

    2. void timt04():LQI制御、PID制御を行っている。
    3. HCPチャート

    4. Not exist

9.task05:行動計画タスク

  1. 機能

  2. ディプスイッチの値で試験走行か1回目の走行か2回目の走行かを判別する。試験走行の場合は試験走行をする。1回目と2回目の場合は、駆動系の電源が入ると5秒後に、自己の位置を確認した上でトレースタスクを起動する。トレス、獲得の両タスクが停止しているとき、トレスタスクを起動する。駆動系がきれると、2回目のマップを作成して停止する。2回目には、一回目で作成したMAPが利用できる(電源を落としてもかまわない)。MAPの作成はバックトラック法で最短になるように作る。
  3. コマンド仕様
  4. なし。
  5. BB仕様
  6. なし。
  7. 初期設定

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

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

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

  10. なし。
    1. モジュール定義

    2. void nrmt05(int,int):NOP
    3. HCPチャート
  11. 割り込み処理

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

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

    4. Not exist
  13. タイマ処理

  14. スタンバイ、監視、MAP作成を行う。
    1. モジュール定義

    2. void timt05():スタンバイ、監視、MAP作成を行う。
    3. HCPチャート

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

task06:自己位置修正タスク

  1. 機能
    超音波センサ、ロータリーエンコーダーにより、自己位置の修正を行う。
  2. コマンド仕様
    BBにある超音波センサからの値を読み込み、BBにある自機座標の値 と比較し、違いがあったら自機座標を更新する。
    コマンド名 コード
    (HEX)
    サブコマンド 機能
    座標の修正 01 n 座標の修正を行う
  3. BB仕様

  4. 番号 内容
    0 修正の終了
  5. 初期設定
    BBをクリアする。
    1. モジュール定義
      void inzt06():リアルタイムモニタから起動される初期設定関数。
    2. HCPチャート

11.

task07:回避タスク

1.機能
タッチセンサに反応があり、それが障害物であると判断された場合に起動。障害物を回避し、ルートにもどる。

2.コマンド仕様

コマンド コード(HEX) サブコマンド 機能
回避      01   障害物を回避。

3.BB仕様

番号 内容

4.初期設定
BBのデータの初期化。
1.定義
void inzt07():リアルタイムモニタから呼び出される初期設定関数。
2.HCPチャート

図9.1.inzt07モジュールHCPチャート

5.割り込み処理
なし

6.タイマ処理
なし

7.コマンド処理
回避はpwmモータ駆動タスク、位置復帰タスクにより行う。
1.定義
void nrmt07():初期設定関数から呼び出される。
2.HCPチャート

図9.2.nrmt07モジュールHCPチャート

12.task08:軌道トレースタスク

  1. 機能
    軌道計算後、行動開始。 BBの軌道計算モジュールにより計算されたルートの値とロータリエンコーダの値を比べながら軌道を進む。 タッチセンサの割り込みの場合、壁かを確認後ポストならポスト獲得モジュールへ。 壁だったら今のX、Y座標をBBにかきこみ、軌道計算モジュールへ。 赤外線センサの割り込みの場合、赤外線接近モジュールへ。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
    行動開始01any(未使用)BBからの読み込みを開始する。   既に行動が開始されている状態でこの コマンドが起動されたときは何もしない。 割り込み後次のコマンドで停止する。
    行動停止02any(未使用)行動を停止する。
  3. BB仕様
    番号内容
    1X座標
    2Y座標
  4. 初期設定
    BBの初期化
    1. モジュール定義
      void inzt08():リアルタイムモニタから呼ばれる初期設定関数。
  5. 割り込み処理
    タッチセンサまたは、赤外線センサの割り込みにより終了する。
    1. モジュール定義
      void intt08():タッチセンサからの割り込み要求信号があったときに実行される関数。
  6. タイマ処理
    なし
  7. コマンド処理
    軌道計算後、自動的に起動
    1. モジュール定義
      void nrmt08():軌道計算後、自動的に起動される関数。
  8. HCPチャート
    起動トレースモジュールHCPチャート

13. task09:試験走行タスク

  1. 機能

  2. テストモードにしたがって、超音波、赤外線、タッチセンサ、 サーボ、ロータリーエンコーダ、及び走行テストを行う。
     
  3. コマンド仕様
  4. コマンド名コード
    (HEX)
    サブコマンド機能
    試験走行01n(モード)走行試験を行う。
    センサテスト02n(試験個所)各センサ試験を行う。試験個所の指定可能
  5. BB仕様
  6. 番号内容
    1情報1
    2情報2
    3情報3
    4情報4
    5情報5
    6情報6
    7情報7
    8情報8
  7. 初期設定

  8. BBをクリアする。
    1. モジュール定義

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

    4. 図13.1 inzt09モジュールHCPチャート(ZWD
  9. 割り込み処理タスク

  10. なし
    1. モジュール定義

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

  11. コマンド処理

  12. 詳細は、試験項目を参照
    1. モジュール定義

    2. void nrmt09(int,int):テストを行う
    3. HCPチャート

    4. 図13.2 nrmt09モジュールHCPチャート(ZWD
  13. タイマ処理

  14. なし
    1. モジュール定義

    2. void timt09(int,int):なし
    3. HCPチャート

    4. Not exist

14.task10:位置復帰タスク

  1. 機能
    ポストの獲得後、行動開始。 BBの軌道計算モジュールで作られた軌道復帰用データの値を読み込み、その位置まで移動。 タッチセンサの割り込み、目標位置への到着で行動停止。
  2. コマンド仕様
    コマンド名 コード
    (HEX)
    サブコマンド 機能
    行動開始 01 any(未使用) BBからの読み込み,書き込みを開始する。 割り込み時次のコマンドで停止する。
    行動停止 02 any(未使用) 行動を停止する。タッチセンサの割り込みのときは、障害物回避後行動開始へ。
  3. BB仕様 なし
  4. 初期設定
    BBの初期化
    1. モジュール定義
      void inzt10():リアルタイムモニタから呼ばれる初期設定関数。
  5. 割り込み処理
    1. モジュール定義
      void intt10():タッチセンサと赤外線センサの割り込み要求信号があったときに実行される関数。
  6. タイマ処理
    なし
  7. コマンド処理
    なし
  8. HCPチャート
    位置復帰タスクHCPチャート

15.task11:ポスト獲得タスク

  1. 機能
    軌道確保モジュールのタッチセンサ割り込みで壁でないとの判断後、行動開始。 BBのタッチセンサの値でポストの中心座標を計算し、ロータリエンコーダの値を読み込みながら動作する。 赤外線センサの割り込みの場合その座標をBBに書込み、赤外線接近モジュールへ。 タッチセンサの割り込みの場合は、超音波センサでの座標計算後、中心座標の計算のし直しをして動作を再開。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
    行動開始01any(未使用)BBからの読み込み,書き込みを開始する。 割り込み時次のコマンドで停止する。
    行動停止02any(未使用)行動を停止する。タッチセンサの割り込みのときは、計算後行動開始へ。
  3. BB仕様
    番号内容
    1赤外線センサ割り込み時X座標
    2赤外線センサ割り込み時Y座標
  4. 初期設定
    BBの初期化
    1. モジュール定義
      void inzt11():リアルタイムモニタから呼ばれる初期設定関数。
  5. 割り込み処理
    タッチセンサの割り込みにより開始する。
    1. モジュール定義
      void intt11():タッチセンサからの割り込み要求信号があったときに実行される関数。
  6. タイマ処理
    なし
  7. コマンド処理
    なし
  8. HCPチャート
    ポスト獲得モジュールHCPチャート

7.試験

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

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

ソフトウェアインストール手順書
MIRS9905.task00(Program file)
MIRS9905.task01(Program file)
MIRS9905.task02(Program file)
MIRS9905.task03(Program file)
MIRS9905.task04(Program file)
MIRS9905.task05(Program file)
MIRS9905.task06(Program file)
MIRS9905.task07(Program file)
MIRS9905.task08(Program file)
MIRS9905.task09(Program file)
MIRS9905.task10(Program file)
MIRS9905.task11(Program file)
関連文書