沼津高専 電子制御工学科
MIRS0002ソフトウェア詳細設計書
MIRS0002-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.6.1 野崎 横山・野崎・増田 初版
A02 2001.6.29 野崎 横山・野崎・増田 待機モードの削除・獲得モードの分割・指摘を受けた箇所の修正
A03 2002.2.15 横山 野崎 メインモードを行動計画モードへ。角度・位置補正モード追加。コース選択モジュールをモードへ。 獲得モードの更なる分割。直進・回転モジュール追加。各機能モジュール・ヘッダファイルの内容をより詳しく。

目次

  1. はじめに
  2. 概要
  3. OS(RT-Linux)の概要
  4. 行動モードの詳細
    1. 行動制御モード
    2. コース選択モード
    3. ポスト探索モード
    4. ポスト獲得モード1
    5. ポスト獲得モード2
    6. ポスト獲得モード3
    7. ポスト獲得モード4
    8. 角度位置補正モード
  5. プログラム群の構成
  6. プログラム群の詳細
    1. モードモジュール
         
      1. 行動制御モード
      2. コース選択モード  
      3. ポスト探索モード
      4. ポスト獲得モード1  
      5. ポスト獲得モード2
      6. ポスト獲得モード3
      7. ポスト獲得モード4
      8. 角度位置補正モード
    2. 機能モジュール
      1. 直進モジュール
      2. 回転モジュール
      3. 中心接触モジュール
      4. 周回モジュール  
      5. 消灯モジュール  
    3. RT タスクモジュール
      1. 超音波センサ RTタスクモジュール
      2. PWM・RE RTタスクモジュール
    4. デバイスドライバ
      1. 赤外線センサドライバ
      2. タッチセンサドライバ
      3. LCDドライバ
    5. ヘッダファイル
      1. define1.h
      2. extern1.h
  7. 試験
    1. モード、機能モジュール単体試験
    2. 実機上での試験
  8. 参考資料

  1. はじめに

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

  2. 概要

    MIRS0002ソフトウェアは、RT-Linux 上で動作するプログラム群で構成される。
    プログラムは、Linux の標準の API とともに、行動モードに対応したプログラム、一つの機能を複数の プログラム群で提供する機能モジュール、および、RTタスク、ドライバと、補助関数と独自に定義した ヘッダファイルから構成される。
    本 MIRS では、行動モードに対応した次の6個のモードモジュールを用意する。

    1. 行動制御モード
    2. ポスト探索モード
    3. ポスト獲得モード1・2・3・4

    IO 制御は、超音波測定と駆動系の制御を RT タスクとして駆動させ、赤外線・タッチセンサ信号入力探知と LCD 出力は、デバイスドライバを用いて行う。デバイスドライバは、標準 API のデバイスドライバを利用する。

  3. OS(RT-Linux)の概要

     RT-Linuxは、Linuxの機能にリアルタイム処理をする機能を付け加えたものである。
     RT-カーネルは、RT-タスクとLinuxカーネルを対象にしたスケジューリングを行う。 Linuxカーネル本体は最も低い優先度でスケジューリングされるもので、RT-タスクの優先度のほうが Linuxカーネルよりも高い。
     MIRSでは、通常動作の状態では最も優先度の低いユーザプログラム(行動制御プログラム)を実行し、 その中で決められた周期でRT-タスクを実行していく。これがリアルタイム処理である。
     RT-タスク・ユーザプログラム間の情報交換は、FIFO(First In First Out)を生成して それを用いて行われる。

  4. 行動モードの詳細

    1. 行動制御モード   
      1. モード定義
         メインモード。
         まずコース選択モードを実行し、基本動作の「ポスト探索→ポスト獲得→再び探索→獲得→…」 をポスト5個獲得するまで実行する。また、探索を繰り返した後に競技場片道を走りきり壁に接触 したら、角度と自己位置(行き帰り同じ探索コース)の補正をする。その後、基本動作を繰り返す。
         この一連の動作を実行できるように行動制御する。
         全てのポストを獲得したら、プログラムを終了する。
      2. モード遷移条件
         コース選択→
        • ポスト探索→「左右にポストを発見」→獲得1→探索…
        • ポスト探索→「ポストに接触」→獲得3→獲得4→探索…
        • ポスト探索→「競技場を走りきって壁に接触」→角度位置補正→探索…
        • 「ポスト5個獲得完了」→プログラム終了

    2. コース選択モード   

      1. モード定義
         キーボード入力で受け取った番号のコース(上図参照)へ移動する。
         下表に番号と動作の対応を示す。
        35cm後退&右40cmコースをずらす
        35cm後退&右20cmコースをずらす
        35cm後退
        35cm後退&左20cmコースをずらす
        35cm後退&左40cmコースをずらす
      2. モード遷移条件
         移動が完了したら終了。

    3. ポスト探索モード   
      1. モード定義
         直進しながら、左右の超音波センサによりポストの探索をする。この動作を 単に「探索」と呼ぶ。ポストを発見したら、「ポスト発見」を表す変数の内容を書きかえて、終了する。 ポスト発見前に何かに接触したときは、終了する。
         超音波が、指定した距離以内の値を感知して、その状態が一定回数以上続いた場合に、ポスト発見とみなす。 各値は、実機での実験によって最適と思われる値を決定する。
      2. モード遷移条件
         ポストを発見するか、接触するかしたら終了する。

    4. ポスト獲得モード1
      1. モード定義
         探索モードで左右の超音波でポストを発見した場合の獲得に使用する。
         左、または右のみにポストがある場合、まずポスト方向に向き、直進し、ポストに中心接触する。 次に周回モジュールを実行する。その後、元の探索コースに戻って終了する。
         左右両方にポストがある場合は、右側のポストから獲得動作を行う。その後、上記動作と同様に 探索コースへ向い、そのまま直進し、左側のポスト獲得へ移り、終了後には探索コースへ戻る。
         ポストに接触しなかった場合は、一定距離走ったら戻ってくるようにする。
        (※周回から赤外線スイッチを押す動作への移行は、周回・消灯モジュールの欄に示す)
      2. モード遷移条件
        このモードが始まった地点まで戻る動作が完了したら終了する。

    5. ポスト獲得モード2
      1. モード定義
         ポスト探索中以外でポストに接触した場合に実行する。
        まず中心接触をし、次に周回・獲得する。周回開始位置に戻って、接近してきた方向と逆向きに向く。
      2. モード遷移条件
         動作が完了したら終了。

    6. ポスト獲得モード3
      1. モード定義
         探索中にポストに接触した場合に使用する。
         まず中心接触する。次に周回する。このとき周回中には、このポストの左右両側に別のポストが存在するかを 超音波で調べていく。
         周回完了後、死角にポストがあったかを判断し、死角にポストがある時は、その方向(右優先)に移動し、 超音波で確認したら、その方向に向き接触する。そして獲得する。左側にもある場合には右側のときと同様に 取りに行く。最後にこのモードが始まった位置まで戻る。
      2. モード遷移条件
        このモードが始まった地点まで戻る動作が完了したら終了する。

    7. ポスト獲得モード4
      1. モード定義
         獲得3で死角にポストがあるとわかった場合に実行する。
         死角ポストがある方向(右優先)に移動し、超音波で確認したら、その方向に向き接触する。 そして獲得する。超音波で確認中に接触したら、そのまま獲得する。 左側にもある場合には右側のときと同様に取りに行く。最後にこのモードが始まった位置、 つまり探索コース上のポストの位置まで戻る。
      2. モード遷移条件
        このモードが始まった地点まで戻る動作が完了したら終了する。

    8. 角度位置補正モード
      1. モード定義
         探索を片道終了した後に実行する。
        壁に対して機体が垂直に向くように姿勢を直す。前面の2つのTSがONになったら垂直に向いたとみなす。
        そして、左右の超音波を用い、自己位置を確認し、探索コースに自己位置を修正する。
      2. モード遷移条件
        超音波で読み取った自己位置と指定した位置の差が一定値以内に収まったら終了する。

  5. プログラム群の構成



  6. プログラム群の詳細
    1. モードモジュール
      1. 行動制御モード
        1. モード定義
           メインモード。
           デバイスドライバ、FIFOなどのオープン。
           超音波測定値・タッチセンサ赤外線センサ状態を配列に格納するスレッドの生成(プログラム実行中は動作し続ける)。
           まずコース選択モードを実行し、基本動作の「ポスト探索→ポスト獲得→再び探索→獲得→…」 をポスト5個獲得するまで実行する。また、探索を繰り返した後に競技場片道を走りきり壁に接触 したら、角度と自己位置の補正(行き帰り同じ探索コースを辿るため)をする。その後、基本動作を繰り返す。
           この一連の動作を実行できるように行動制御する。
           全てのポストを獲得したら、プログラムを終了する。
        2. モード遷移条件
        3. 構成要素
          USS,PWM・RE RT-task・IRS,TS driver
          コース選択・探索・獲得1,3,4・角度,位置補正モード
        4. 関数名
          main()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)
      2. コース選択モード
        1. モード定義
           キーボード入力で受け取った番号のコース(上図参照)へ移動する。
           下表に番号と動作の対応を示す。
          35cm後退&右40cmコースをずらす
          35cm後退&右20cmコースをずらす
          35cm後退
          35cm後退&左20cmコースをずらす
          35cm後退&左40cmコースをずらす
        2. モード遷移条件
        3. 構成要素
          PWM・RE RT-task・TS driver
          直進・回転モジュール
        4. 関数名
          course_select()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)
      3. ポスト探索モード
        1. モード定義
        2. モード遷移条件
           直進モジュールを実行し、同時にスレッドで左右の超音波センサにより ポストの探索をする。ポストを発見したら、「ポスト発見」を表す変数の内容を書きかえて、終了する。 左右のポスト発見前に何かに接触したときは、終了する。
           超音波が、指定した距離以内の値を感知して、その状態が一定時間以上続いた場合に、ポスト発見とみなす。
           引数によって、距離・速度に加え、機体のどちら側を探索するかも指定出来るようにする。
        3. 構成要素
          USS,PWM・RE RT-task・TS driver・直進モジュール
        4. 関数名
          tansaku()
        5. 引数
          探索方向、走行距離、走行速度(PWM値)
        6. 戻り値
          走行距離
        7. アルゴリズム(フローチャート)
      4. ポスト獲得モード1

        1. モード定義
           探索モードで左右の超音波でポストを発見した場合の獲得に使用する。
           左、または右のみにポストがある場合、まずポスト方向に向き、直進し、ポストに中心接触する。 次に周回モジュールを実行する。自己位置から判断して上図に示すような死角ポストが存在する可能性があれば、 それの監視を行う。死角ポストがあった場合は死角ポスト側まで周回を続け、死角ポスト側へ向いて 獲得動作を行い、来た道を戻る。その後、このモードが始まった位置に戻って終了する。
           左右両方にポストがある場合は、右側のポストから獲得動作を行う。その後、上記動作と同様に 探索コースへ向い、そのまま直進し、左側のポスト獲得へ移り、獲得終了後にはこのモードが始まった位置に戻る。
           ポストに接触しなかった場合は、一定距離走ったら戻ってくるようにする。
        2. モード遷移条件
          このモードが始まった地点まで戻る動作が完了したら終了する。
        3. 構成要素
          直進・回転・中心接触・周回モジュール
        4. 関数名
          kakutoku1()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)

      5. ポスト獲得モード2
        1. モード定義
           ポスト探索中以外でポストに接触した場合に実行する。
          まず中心接触をし、次に周回・獲得する。周回開始位置に戻って、接近してきた方向と逆向きに向く。
        2. モード遷移条件
          動作が完了したら終了する。
        3. 構成要素
          直進・回転・中心接触・周回モジュール
        4. 関数名
          kakutoku2()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)

      6. ポスト獲得モード3

        1. モード定義
           探索中にポストに接触した場合に使用する。
           まず中心接触する。次に周回する。周回中には、上図に示すような死角ポストが存在するかを 超音波で調べていく。
           周回完了後、
        2. モード遷移条件
          このモードが始まった地点まで戻る動作が完了したらポスト探索モードに遷移する。
          獲得個数を戻り値として返す。
        3. 構成要素
          直進・回転・中心接触・周回モジュール
        4. 関数名
          kakutoku3()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)

      7. ポスト獲得モード4
        1. モード定義
           獲得3で死角にポストがあるとわかった場合に実行する。
           死角ポストがある方向(右優先)に移動し、超音波で確認したら、その方向に向き接触し、 獲得モード2を実行する。超音波で確認中に接触したら、そのまま獲得モード2を実行する。 左側にもある場合には右側のときと同様に取りに行く。最後にこのモードが始まった位置、 つまり探索コース上のポストの位置まで戻る。
        2. モード遷移条件
          このモードが始まった地点まで戻る動作が完了したら終了する。
        3. 構成要素
          直進・回転・中心接触・周回モジュール
        4. 関数名
          kakutoku4()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)

      8. 角度位置補正モード

        1. モード定義
           探索を片道終了した後に実行する。
          壁に対して機体が垂直に向くように姿勢を直す。左右の超音波を用い、自己位置を確認し、探索コースに戻る。
        2. モード遷移条件
          超音波で読み取った自己位置と指定した位置の差が 一定値以内に収まったら終了する。
        3. 構成要素
          USS RT-task,直進、回転モジュール
        4. 関数名
          ang_hosei(),posi_hosei()
        5. 引数
          無し
        6. 戻り値
          無し
        7. アルゴリズム(フローチャート)

    2. 機能モジュール
        走行動作のモジュールでは、走行中に下記の条件を満たしたら、MIRSは何かに「接触」したものとみなす。
        • タッチセンサがON
        • ロータリエンコーダの値が一定時間以上変化していない(速度がゼロ)

        以上を踏まえて開発する。
      1. 直進モジュール
        1. 機能
          指定した走行距離、速度(PWM値)で直進する。左右のタイヤの速度のずれが無く 走行するように制御する。接触した場合は、どのTSがONになったかを保存し、いつでも5cm後退してから終了する。探索モードに用いるため、 超音波によるポスト探索結果の変数がONになったら停止する。
        2. 構成要素
          PWM,RE RT-task,TS driver
        3. このモジュールが使用されるモード
          コース選択・探索・獲得1〜4・角度位置補正モード
        4. 関数名
          cmdata()
        5. 引数
          走行距離、速度(PWM値)
        6. 戻り値
          走行距離
        7. アルゴリズム(フローチャート)
      2. 回転モジュール
        1. 機能
          指定した角度だけその場回転する。左右のタイヤの速度のずれが無く、 左右タイヤが逆に回転するように制御する。
        2. 構成要素
          PWM,RE RT-task,TS driver
        3. このモジュールが使用されるモード
          コース選択・獲得1〜4・角度位置補正モード
        4. 関数名
          cirdata()
        5. 引数
          角度
        6. 戻り値
          角度
        7. アルゴリズム(フローチャート)
      3. 中心接触モジュール
        1. 機能
          一度ポストに接触した時点で、TS0(左前)がONだった時にTS2(前方右側)が ONになるまで、または、TS3(右前)がONだった時にTS1(前方左側)がONになるまで姿勢を直す。 後退し、TS0がONの時は左,TS3がONの時は右へ15度回転し、直進を繰り返す。条件を満たしたら終了。
        2. 構成要素
          TS driver、直進・回転モジュール
        3. このモジュールが使用されるモード
          ポスト獲得モード1,2,3
        4. 関数名
          tyuusin()
        5. 引数
          無し
        6. 戻り値
          動いた角度
        7. アルゴリズム(フローチャート)
      4. 周回モジュール
        1. 機能
          指定された走行距離(半周か、1周か、等)・死角監視位置に従い、走行制御、死角監視、 赤外線監視を行う。円軌道を描いて走行するため、左右のタイヤの回転比をある一定の値に保つ様に制御する。
           指定位置で監視スレッドを生成し死角ポストを監視する。死角ポストを発見した場合は、それを表す変数の内容を書き換える。
           ポスト側に赤外線を感知したら消灯モジュールを実行する。再び周回を続け、指定された距離を 走り終わるまで続ける。
           また、周回途中にMIRSの内側が何かに接触したら、いくらかポストの周りを45度ほどバックし5cm前進し、外側が接触のときは同様に下がり、5cm後退する。その後周回を続ける。この動作を三回繰り返したらそれを壁と判断し、動作を終了する。
        2. 構成要素
          PWM・RE RT-task・IRS,TS driver・消灯モジュール
        3. このモジュールが使用されるモード
          ポスト獲得モード
        4. 関数名
          int syuukai( )
        5. 引数
          int kansi
        6. 戻り値
          int sikaku_post
        7. アルゴリズム(フローチャート)

      5. 消灯モジュール
        1. 機能
          赤外線を感知した方向へ回転し、接触するまで直進する。5cm後退し、 消灯させたか確認して、点灯していたら再び押しに行く。消灯していたらこのモジュールが 始まった位置まで戻って終了。
        2. 構成要素
          PWM・RE RT-task・IRS driver,直進・回転モジュール
        3. このモジュールが使用されるモード
          周回モジュール
        4. 関数名
          syoutou()
        5. 引数
          なし
        6. 戻り値
          なし
        7. アルゴリズム(フローチャート)
    3. RT タスクモジュール
      1. 超音波RTタスクモジュール
        MIRS標準APIを使用する。
        MIRSATLMプログラム詳細仕様書(MIRSATLM-SOFT-0001)
      2. PWM RE RTタスクモジュール
        MIRS標準APIを使用する。REでの機体情報(タイヤ径、実行周期など)は、変更する。
        MIRSATLMプログラム詳細仕様書(MIRSATLM-SOFT-0001)

    4. デバイスドライバ
      1. 赤外線ドライバ
        MIRS標準APIを使用する。
        MIRSATLMプログラム詳細仕様書(MIRSATLM-SOFT-0001)
      2. タッチセンサドライバ
        MIRS標準APIから、タッチセンサ1個分減らしたものに変更する。
      3. LCDドライバ
        MIRS標準APIを使用する。
        MIRSATLMプログラム詳細仕様書(MIRSATLM-SOFT-0001)
      4. ヘッダファイル
        1. define1.h
          定数の定義。
          • 総ポスト数
          • 周回動作の修正の最大繰り返し数
          • 探索方向指定定数
          • ポスト探索時のポスト存在確認回数
          • 周回動作の修正の最大繰り返し数
        2. extern1.h
          変数のextern宣言。
          • 超音波測定値格納配列、タッチセンサ・赤外線状態格納配列
          • 獲得したポストの数
          • 探索時の左右ポストの有無を表す変数(探索モード用、獲得モード用)
          • タッチセンサ状態保存変数

  7. 試験
    1. モード、機能モジュール単体試験
      プログラム通りに動作するかを試験する。
    2. 実機上での試験
      プログラム通りに動作するか試験する。
      設定した値と実際に動いた距離との間に大きなズレは無いか試験する。

  8. 参考資料

    MIRSMY2K 基本MIRSソフトウェア仕様書(MIRSMY2K-SOFT-0001)
    MIRS0002 データリンク集(MIRS0002-MEMO-0002)

関連文書
  • MIRS0002基本設書(MIRS0002-DSGN-0003)
  • MIRSATLMプログラム詳細仕様書(MIRSATLM-SOFT-0001)