沼津高専 電子制御工学科
MIRS9904ソフトウェア詳細設計書
MIRS9904-DSGN-0004
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2000.05.30 桑名 良和 初版
A02 2000.06.16 桑名 良和 不正と思われるところを大幅に更新。まだ不正個所存在
A03 2000.09.22 桑名 良和 走行試験用のソフトを設計上変更があったところを更新
B01 2000.12,21 桑名 良和 ソフトの仕様変更
B02 2001.01.22 桑名 良和 ソフトの仕様変更
B03 2001.01.25 桑名 良和
ソフトの仕様変更
B04

2001.02.06

桑名 良和
ソフトの仕様変更

目次

はじめに

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

2.概要

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

  低レベルタスク


  高レベルタスク 3.リアルタイムモニタ
  1. タスクの数(MAX_TASK)=10タスク
  2. BBの数(MAX_BB)=8
  3. 以下に各タスク使われる処理と優先順位(0〜6)を示す。
タスク ナンバー イニシャライズノーマルタイマ割り込み優先順位
初期化(MMI) 00 ×2
赤外線センサ 01 3
超音波センサ 02 2
タッチセンサ 03 3
ダミータスク 04×××6
PWMモータ駆動 05×6
自己位置検索 06×2
軌道移動 07×2
ポスト判断08×3
移動 09 ×
ポスト獲得 10×3
軌道復帰 11×3
回避 12××1
行動計画 13×4
例外処理 14××1
軌道復帰タスク2 15 × 3

4.task00:初期化タスク


コマンド名コード
(HEX)
サブコマンド機能
データ分類 01anynon一回目、二回目か、判定し、必要なデータであるかないか判断、分別をおこなう。
初期化 02anynon不要なデータを削除する
番号内容
1LED表示データ
2初期タッチセンサ表示データ

BBの初期化
  1. モジュール定義void inzt00():リアルタイムモニタから呼ばれる初期設定関数。
  2. 割り込み処理
    dipスイッチにより割り込みを行う。
    電源投下時はTIMERタスクは起動されない。DIPスイッチを押すことにより、それぞれのTIMERタスクが起動される
  3. タイマ処理
    ロータリスイッチにより、各データを表示する。以下にそのデータを記す
    ロータリースイッチと表示データ
    ロータリースイッチNo 表示データ
    0 姿勢角
    1 Y座標
    2 X座標
    3 USS No1
    4 USS No2
    5 USS No4
    6 TS Data

なし

初期化HCPチャート

5.task01:赤外線センサタスク


  1. 初期化タスクによりモジュールが起動され、タッチセンサの割り込みまたは、赤外線を見失うまで結果をBBに書き込みながら行動し続ける。 BBに書き込まれた赤外線データ管理モジュールの情報をよみとりながらの行動となる。 タッチセンサの割り込み、かつ赤外線の見失いの場合は、、軌道復帰モジュールへ。 タッチセンサの割り込みのみならば、ポスト獲得モジュールへ。 赤外線を見失ったら、軌道確保モジュールへ。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
  3. BB仕様
    番号内容
    0赤外線データ
  4. 初期設定BBの初期化
    1. モジュール定義void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
      割り込みベクトル、BBの初期化を行う

  5. 割り込み処理
    1. モジュール定義void intt01():赤外線割り込み要求信号があったときに実行される関数。

  6. タイマ処理なし
  7. コマンド処理なし
  8. HCPチャート

    赤外線接近モジュールHCPチャート

6.task02:超音波センサタスク


  1. 機能4個の超音波を入力された順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスクが起動されると、停止コマンドが発行されるまで測定を行い結果をBBに書き込む。超音波発信したのち、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動され距離を計算してBBに書き込む。その後、次の決定したチャネルのセンサより超音波を発信し再び割り込み待ち状態になる。
  2. コマンド仕様
    コマンド名 コード 
    (HEX)
    サブコマンド 機能
    測定開始 01 n(チャネル) 指定されたチャネル番号のセンサの測定を開始する。
  3. BB仕様
    番号内容
    0発進する超音波センサNO
    1 チャネル1の測定結果[cm] 
    タイムアウト:999 
    ハードウェアエラー(センサが接続など):888 
    近すぎ: 777
    2チャネル2の測定結果[cm] 
    他は同上
    4チャネル3の測定結果[cm] 
    他は同上
    6チャネル4の測定結果[cm] 
    他は同上
  4. 初期設定IP-Digtal48のPIT(68230)のB側の初期設定を行う。ポートAをモード0サブモード01に設定する。タイマをDevice watchdog モードに設定し、タイマ初期値として最大測定距離3mに相当するカウント値を設定する。
    1. モジュール定義void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
      超音波割り込み要求信号があったときに実行される。
    2. HCPチャート
    3. 図 : inzt02モジュールHCPチャート
    超音波受信があった時、割り込み処理を行う。
    1. モジュール定義interrupt void intt02():リアルタイムモニタから呼ばれる割り込み関数。
    2. HCPチャート

      図 : intt01モジュールHCPチャート

  5. タイマ処理タスク
    1. モジュール定義void timt01(int, int):
      発進するUSSチャンネルを入れ替え、発信をアイドル状態にする。
    2. HCPチャートなし

  6. コマンド処理
    1. モジュール定義void nrmt01(int,int):超音波測定開始・停止を行う関数。
    2. HCPチャート

      図 : nrmt01モジュールHCPチャート

7.task03:タッチセンサタスク


  1. 機能 タッチセンサが反応する毎に、このタスクが起動されてタッチセンサの状態を読み取りBBに書き込む。
  2. コマンド仕様
    コマンド名コマンド(HEX)サブコマンド機能
    なしanyanyコマンドなし
  3. BB仕様
    番号内容
    0タッチセンサのデータ
  4. 初期設定 Hardware Function Library(HFL)のロータリーエンコーダ・タッチセンサの初期化関数void re_ts_init();を用いる。BBを初期化し、割り込みタスク登録をする。
    1. モジュール定義void inzt04():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図.inzt03モジュールHCPチャート

  5. 割り込み処理タッチセンサからの割り込み要求信号があったときにタッチセンサの状態を読み取りBBに書き込む。
    1. モジュール定義void intt03():タッチセンサからの割り込み要求信号があったときに実行される関数。
    2. HCPチャート

      図.intt03モジュールHCPチャート

  6. タイマ処理なし
  7. コマンド処理なし

8.task04:ダミータスク


元はロータリーエンコーダタスクであったが 自己位置検索タスクに統合

9.task05:自己位置検索タスク


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

      図inzt05モジュールHCPチャート

  5. コマンド処理自己位置を設定する。
    1. モジュール定義void nrmt05(int,int):自己位置を設定
    2. HCPチャート設定のみ

  6. 割り込み処理特に無し。
    1. モジュール定義void intt02:無し
    2. HCPチャートNot exist

  7. タイマ処理ロータリエンコーダの値をもとに自己位置を計算する。そして、その値をBBに書き込む。さらに、タッチセンサの値をBBに書き込む。
    1. モジュール定義void timt05():自己位置を算出する関数。
    2. HCPチャート

      図timt02モジュールHCPチャート

10.task06:PWMモータ制御タスク


  1. 機能デューティ比を用いて左右のモータを制御する。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
    PWM信号発信 01anyPWMデータ送信
  3. BB仕様
    番号内容
    0右の論理デューティ比(変動あり)
    1左の論理デューティ比(変動あり)
    3 正転、反転のフラグ
    4 右の論理デューティ比(保存用)
    5 左の論理デューティ比(保存用)
    6 姿勢角保存
  4. 初期設定BBとPWMを初期化する。
    1. モジュール定義void inzt06():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図8.1 inzt06モジュールHCPチャート(ポストスクリプト/tgif形式

  5. コマンド処理BBに書き込んであるデータをもとにPWM信号を送信しモータを駆動させる。
    1. モジュール定義void nrmt06(int,int):モータ駆動関数。
    2. HCPチャート

      図8.2 nrmt06モジュールHCPチャート(ポストスクリプト/tgif形式

  6. 割り込み処理特に無し。
    1. モジュール定義void intt04:無し
    2. HCPチャートNot exist

  7. タイマ処理独自の補正モジュールを持ち居ている。
    1. モジュール定義void timt06():
      前回保存した姿勢角を元に、デューティ比の変化量を定め、新たにPWMDataを送信する
    2. HCPチャートNot exist

11.task07:軌道移動タスク


スタート位置から基本経路を移動。

コマンド名

コード(hex)

サブコマンド

機能

初期化

01

 

これまでの状態をリセットする

番号

内容

0

大まかな区切りの座標データ

1

遷移フラグ

2

バックデータ

3

獲得遷移、回避遷移フラグ

4 フラグ2
5 タッチセンサ補正フラグ
6 タッチセンサフラグ

初期設定

  1. モジュール定義
     BBのクリア。

  2. HCPチャート

    fig.1 inzt07 HCPチャート
  3. ノーマルタスク

  1. モジュール定義
     軌道復帰タスクが終わった後、再び初期化を行う

  2. HCPチャート

    fig.2 nrmt07 HCPチャート
  3. タイマータスク

    1. モジュール定義void timt07():
      Task13のデータを元に、直進、回転の指令を与え、また、タスク8のポスト獲得フラグ、
      Task14の回避フラグを監視する

なし

12.task08:POST判断タスク


実際に機体を基本経路に沿って動かす。この時、超音波センサ、赤外線センサの割り込みをONにする。

コマンド名

コード(hex)

サブコマンド

機能

超音波データ初期化

01

 

保存してある超音波データを初期化する

    ・BB使用

番号

内容

0

超音波2のデータ

1

超音波4のデータ

  1. モジュール定義
     BBのクリア、タスク登録。

  2. HCPチャート

    fig.1 inzt08 HCPチャート
  3. ノーマルタスク

  1. モジュール定義
     再度このタスクを軌道時に超音波センサのデータをリセットする

  2. HCPチャート

    fig.2 nrmt08 HCPチャート
  3. タイマータスク

  1. モジュール定義void timt08():
    前回の超音波センサデータと比較し、20cm以上データが減少していたら
    Postとみなす。PostとみなしたらStaticでつくった配列にそのデータを書きこむ
  1. モジュール定義
     超音波タスクを呼び出し周囲の確認をする。

  2. HCPチャート

    fig.3 timt08 HCPチャート
  3. 割り込みタスク

  1. モジュール定義
    無し

  2. HCPチャート

    fig.4 intt08 HCPチャート

13.task09:移動タスク

 

コマンド名

コード(hex)

サブコマンド

機能

軌道座標保存、TIMEタスク軌道

01

 

初期化し、TIMERタスクを起動する

番号

内容

0

軌道座標

1 Postdata
2 フラグ
3 フラグ
4 未使用
5 姿勢角保存
6 タッチセンナフラグ
7 タッチセンサデータ
  1. モジュール定義
     BBのクリア。

  2. HCPチャート

    fig.1 inzt09 HCPチャート
  3. ノーマルタスク

  1. モジュール定義
    Task8によりPostとみなされた場合起動される。

  2. HCPチャート

    fig.2 nrmt09 HCPチャート
  3. タイマータスク

  1. モジュール定義void timt09():
    Postのある方向を向き、その方向へと直進する。
    タッチセンサの割り込みがあり、かつそのデータが正面であればPost獲得タスクへと遷移する

なし

14.task10:ポスト獲得タスク


ポストを獲得するための動作。

  1. ポストの中心を検出

  2. ポストの周りを回る

  3. 赤外線センサ受信

  4. ポスト獲得(ポールのスイッチを押す)

  5. LED消灯確認

※一周しても赤外線に反応がなければ軌道復帰タスクを呼び出す。

コマンド名

コード(hex)

サブコマンド

機能

初期化 01

 

Post獲得のための初期化を行う

番号

内容

0

起動座標保存

1

フラグ

2

フラグ2

3

距離保存

4 獲得フラグ
5 補正フラグ
6 タッチセンサフラグ
  1. モジュール定義
     BBのクリア、タスク登録。

  2. HCPチャート

    fig.1 inzt10 HCPチャート
  3. ノーマルタスク

  1. モジュール定義
    初期化を行う

  2. HCPチャート

    fig.2 nrmt10 HCPチャート
  3. タイマータスク

  1. モジュール定義
     Postの周りを回転運動する。その間赤外線の割り込みを監視し、
    反応があれば押しに行く。LEDの消灯(赤外線の信号が無くなる)を確認したら
    軌道復帰タスクを起動する。

  2. HCPチャート

    fig.3 timt10 HCPチャート
  3. 割り込みタスク

  1. モジュール定義
     LEDの発見。

  2. HCPチャート

    fig.4 intt10 HCPチャート

 


15.task11:軌道復帰タスク


ポールを獲得(LED消灯確認)後、基本経路に戻る動作。

  1. ポールを周回していた軌道まで戻る

  2. 右と左のどちらが基本経路に近いかを割り出す

  3. 回避動作をふまえ、基本経路へ戻る

  4. コマンド

コマンド名

コード(hex)

サブコマンド

機能

初期化 01 データをリセットする

番号

内容

00

起動座標

01

Flag

02 TSFlag
03 TSDATA
04 遷移フラグ
   
   
  1. モジュール定義
     タイマータスク、割り込みタスク登録。

  2. HCPチャート

    fig.1 inzt11 HCPチャート
  3. ノーマルタスク

  4. タイマータスク

  5. 割り込みタスク


16.task12:回避タスク


ポール、壁に突き当たったときそれらを回避する。

コマンド名

コード(hex)

サブコマンド

機能

回避

01

 

障害物を回避し基本軌道へ戻る

 

BB使用

番号

内容

00

起動座標

01

Flag

02 TSFlag
03 TSDATA
04 遷移フラグ
   
   

 

なし

  1. モジュール定義
     タイマータスク、割り込みタスク登録。

  2. HCPチャート

    fig.1 inzt12 HCPチャート
  3. ノーマルタスク

  1. モジュール定義
     障害物を回避し基本軌道へ戻る。

  2. HCPチャート

    fig.2 nrmt12 HCPチャート
  3. タイマータスク

  1. モジュール定義
     超音波センサによる割り込みを受けて軌道確保タスクを呼び出す。

  2. HCPチャート

    fig.3 nrmt12 HCPチャート
  3. 割り込みタスク

  1. モジュール定義
     赤外線センサ、タッチセンサによる割り込み処理を行う。

  2. HCPチャート

    fig.4 nrmt12 HCPチャート

17.task13:行動計画タスク

  1. ルートトレスのためのフラグ制御を行う。
  2. コマンド仕様 なし。
  3. BB仕様 なし。
  4. 初期設定BBを初期化する。
    1. モジュール定義void inzt13():リアルタイムモニタから呼ばれる初期設定関数。
    2. HCPチャート

      図9.1 inzt05モジュールHCPチャート(ポストスクリプト /

  5. コマンド処理なし。
    1. モジュール定義void nrmt13(int,int):NOP
    2. HCPチャート

  6. 割り込み処理特に無し。
    1. モジュール定義void intt13:無し
    2. HCPチャートNot exist

  7. タイマ処理スタンバイ、監視、MAP作成を行う。
    1. モジュール定義void timt13():スタンバイ、監視、MAP作成を行う。
    2. HCPチャート


  1. 機能例外処理・・・・普段では考えられない行動をしたとみなしたときに、このタスクを実行する。
  2. コマンド仕様
    コマンド名コード
    (HEX)
    サブコマンド機能
    座標復帰 01 座標が検出できなくなったときの復帰処理
    例外処理1(名前未定) 02 ロータリーエンコーダの値がX秒変化がないときに復帰動作を行う

  3. BB仕様
    番号
    内容
    0

    起動フラグ状態

    1 遷移条件カウント
    2 移動距離フラグ

    18.task14:例外処理タスク


    1. 初期設定 なし


      図9.1 inzt05モジュールHCPチャート(ポストスクリプト

    1. コマンド処理
      コマンド名コード
      (HEX)
      サブコマンド機能
      移動不能回避 01any一定時間座標の変化等がない場合実行。全力移動を試みる
      超音波センサ受け取り不能回復 02n4個の超音波センサの反応がすべてないときに実行。
      PWM信号の異常 03nPWM信号に異常があるときに実行
      赤外線センサ異常 04n常に赤外線センサが入っているときに実行
      座標位置異常 05n過去の座標と現在の座標が大幅に異常があるときに実行
      以下検討中 06n
      1. モジュール定義void nrmt14(int,int):NOP
      2. HCPチャート
    2. 割り込み処理特に無し。
      1. モジュール定義void intt14:無し
      2. HCPチャートNot exist

    3. タイマ処理スタンバイ、監視、MAP作成を行う。
      1. モジュール定義void timt14():スタンバイ、監視、MAP作成を行う。
      2. HCPチャート

試験


以下に試験走行で使用したプログラムを掲載する。
試験走行用プログラム



以上
関連文書