沼津高専 電子制御工学科
MIRS0001ソフトウェア詳細設計書
MIRS0001-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.6.1 山下、太田 竹村 初版
A02 2001.6.15 山下、太田 竹村 戻り値へ説明を追加
A03 2001.6.29 山下 竹村 赤外線・タッチセンサデバイスドライバの変更
B01 2001.10.12 山下 竹村 各モジュールを大幅に変更
C01 2002.2.13 山下 竹村 MIRS0001最終仕様に変更

目次

  1. はじめに

  2. 概要

  3. OS(RT-Linux)の概要

  4. 行動モードの詳細

  5. プログラム群の構成

  6. プログラム群の詳細

    1. モードモジュール
      1. 初期設定(動作)モード
      2. ポスト探索事前モード
      3. ポスト探索モード1〜4
      4. 獲得判断モード1〜3
      5. ポスト接近モード1〜4
      6. ポスト獲得モード
      7. ポスト探索ルート復帰モード

    2. 機能モジュール

    3. RTタスクモジュール
      1. 超音波センサRT-タスクモジュール
      2. PWM・ロータリーエンコーダRT-タスクモジュール

    4. デバイスドライバ
      1. LCDデバイスドライバ
      2. 赤外線・タッチセンサデバイスドライバ

    5. ヘッダファイルの詳細
      1. 外部関数の定義ヘッダ

  7. 試験
    1. モード、機能モジュール単体試験
    2. 標準MIRS上での試験
    3. 実機上での試験


  1. はじめに

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

  2. 概要

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

    本 MIRS では、行動モードに対応した次の7個のモードモジュールと2個のモード補助モジュールを用意する。 IO 制御は、超音波測定と駆動系の制御を RT タスクとして駆動させ、 赤外線センサ信号入力探知と、LCD 出力は、デバイスドライバを用いて行う。 デバイスドライバは、標準 API のデバイスドライバを利用する。

  3. OS(RT-Linux)の概要

    OS(RT-Linux)の概要については下記の調査報告書へ。

    技術調査報告 リアルタイム処理とRT-Linux

  4. 行動モードの詳細

    1. 初期設定(初期動作)モード
      • 定義   :スタート位置の座標を(0,0)と設定する。 スタート位置から20cm後退し、左へ90°回転してポスト探索モードの準備に入る。
      • 遷移条件:初期設定が終了次第遷移。→ポスト探索モード

    2. ポスト探索事前モード
      • 定義   :初期設定モード終了位置から左側へ直進をはじめる。壁に接触したら10cm後退し、右へ90°回転する。
      • 遷移条件:ポスト探索事前モード終了次第遷移→ポスト探索モード

    3. ポスト探索モード1〜4
      • 定義   :競技場の回りを時計回りに進行しながら、MIRS右側に設置した超音波測距センサにより、ポストの探索を行う。ポストを発見したらそのポストの位置を記憶する。
      • 遷移条件:超音波センサによりポストを発見。→獲得判断モード

    4. 獲得判断モード1〜3
      • 定義   :ポスト探索モードで発見されたポストが獲得したものかそれとも未獲得かを判断する。
      • 遷移条件:未獲得と判断。→ポスト接近モード
        獲得済と判断。→ポスト探索モード

    5. ポスト接近モード1〜4
      • 定義   :ポスト探索モードの時、獲得判断モードで未獲得と判断されたポストへと直進接近する。
      • 遷移条件:タッチセンサに反応。→ポスト獲得モード

    6. ポスト獲得モード
      • 定義   :ポスト接近後からスイッチを押してポストを一周回り終わるまでの一連の動作をする。
      • 遷移条件:動作終了→ポスト探索ルート復帰モード

    7. ポスト探索ルート復帰モード
      • 定義  :ポストを獲得した後、ポスト探索ルートへと移動する。
      • 遷移条件:ルート復帰終了(壁にタッチセンサが接触)。→ポスト探索モード

  5. プログラム群の構成

    MIRS0001のプログラム構成を以下の図に示す。

    fig. 全体構成図


    fig. ユーザプログラム構成図
  6. プログラム群の詳細

    1. モードモジュール

      1. 初期設定(初期動作)モード
        • 定義   :スタート位置の座標を(0,0)と設定する。 スタート位置から20cm後退し、左へ90°回転してポスト探索モードの準備に入る。
        • 遷移条件:初期設定が終了次第遷移。→ポスト探索モード
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
          LCDデバイスドライバ
        • 関数名 :void syoki()
        • 引数:なし
        • 戻り値:なし
        • アルゴリズム(フローチャート)

      2. ポスト探索事前モード
        • 定義   :初期設定モード終了位置から左側へ直進をはじめる。壁に接触したら10cm後退し、右へ90°回転する。
        • 遷移条件:ポスト探索事前モード終了次第遷移→ポスト探索モード
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
          LCDデバイスドライバ
        • 関数名 :void psbefore()
        • 引数:なし
        • 戻り値:なし
        • アルゴリズム(フローチャート)

      3. ポスト探索モード1〜4
        • 定義   :競技場の回りを時計回りに進行しながら、MIRS右側に設置した超音波測距センサにより、ポストの探索を行う。ポストを発見したらそのポストの位置を記憶する。
        • 遷移条件:超音波センサによりポストを発見。→獲得判断モード
          タッチセンサ反応。→ポスト探索モード1〜4(1→2、2→3、3→4、4→1)
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
          超音波センサRT-タスクモジュール
          タッチセンサデバイスドライバ
          LCDデバイスドライバ
        • 関数名 :int pssearch1〜4()
        • 引数:なし
        • 戻り値:hanbetu(探索中に壁に接触したかどうか値を返す)
        • アルゴリズム(フローチャート)

      4. 獲得判断モード1〜3
        • 定義   :ポスト探索モードで発見されたポストが獲得したものかそれとも未獲得かを判断する。
        • 遷移条件:未獲得と判断。→ポスト接近モード
          獲得済と判断。→ポスト探索モード
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
          超音波センサRT-タスクモジュール
          LCDデバイスドライバ
        • 関数名 :int gethandan1〜3()
        • 引数:なし
        • 戻り値:get(次に呼び出すモードを指定する。接近モードへの遷移は0を探索モードへの遷移は1を割り当てる。)
        • アルゴリズム(フローチャート)

      5. ポスト接近モード1〜4
        • 定義   :ポスト探索モードの時、獲得判断モードで未獲得と判断されたポストへと直進接近する。また、1m進んでもタッチセンサに反応が無い場合探索へ戻る。
        • 遷移条件:タッチセンサに反応。→ポスト獲得モード
        • 構成要素
          タッチセンサデバイスドライバ
          PWM・ロータリーエンコーダRT-タスクモジュール
          超音波センサRT-タスクモジュール
          LCDデバイスドライバ
        • 関数名 :void psclose1〜4()
        • 引数:なし
        • 戻り値:nopost(ポストへ接触したかどうか値を返す)
        • アルゴリズム(フローチャート)

      6. ポスト獲得モード
        • 定義   :ポスト接近後からスイッチを押してポストを一周回り終わるまでの一連の動作をする。
        • 遷移条件:動作終了→ポスト探索ルート復帰モード
        • 構成要素
          赤外線デバイスドライバ
          タッチセンサデバイスドライバ
          超音波センサRT-タスクモジュール
          LCDデバイスドライバ
        • 関数名 :void psget()
        • 引数:なし
        • 戻り値:なし
        • アルゴリズム(フローチャート)

      7. ポスト探索ルート復帰モード
        • 定義  :ポストを獲得した後、ポスト探索ルートへと移動する。
        • 遷移条件:ルート復帰終了(壁にタッチセンサが接触)。→ポスト探索モード
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
          タッチセンサデバイスドライバ
          LCDデバイスドライバ
        • 関数名 :void fukki()
        • 引数:なし
        • 戻り値:なし
        • アルゴリズム(フローチャート)

    2. 機能モジュール

      1. 左(右)90°回転モジュール
        • 定義  :左右90°回転する。
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
        • 関数名 :void circle90_right()、void circle90_left()
        • 引数:なし
        • 戻り値:なし

      2. 前後直進モジュール
        • 定義  :指定した距離(mm)だけ前進(後退)させる。
        • 構成要素
          PWM・ロータリーエンコーダRT-タスクモジュール
        • 関数名 :void mm_data()、void mm_back()
        • 引数:なし
        • 戻り値:なし

    3. RT タスクモジュール

      1. 超音波センサRT-タスクモジュール(MIRS標準APIを使用)
        1. 機能:FIFO1、FIFO2を用いて上位プログラムとコマンド、データのやり取りを行い、超音波センサを制御する。
        2. このRTタスクモジュールがされるモード・機能モジュール
          ポスト探索モード
          獲得判断モード
        3. 構成要素:関数モジュール
            ※関数名、優先度、FIFO の仕様、アルゴリズムについてはリンク先参照。

      2. PWM・ロータリーエンコーダRT-タスクモジュール(MIRS標準APIを使用)
        1. 機能:左右のロータリーエンコーダのカウント値、速度データ、などをやり取りする。直進、回転を実現する。
        2. このRTタスクモジュールがされるモード・機能モジュール
          初期設定(動作)モード
          ポスト探索モード(1,2,3)
          獲得判断モード
          ポスト接近モード(1,2,3)
        3. 構成要素:関数モジュール
            ※関数名、優先度、FIFO の仕様、アルゴリズムについてはリンク先参照。

    4. デバイスドライバ

      1. LCDデバイスドライバ(MIRS標準APIを使用)
        1. 機能:MIRS0001に搭載されるLCD(SC1602BS)への表示を行う。
        2. このドライバ使用されるモード・モジュール
          すべてのモードモジュール。
        3. IO アドレス:0100H、0102H
            ※アルゴリズム・関数名についてはリンク先参照。

      2. 赤外線、タッチセンサデバイスドライバ
        1. 機能:MIRS0001に搭載されるタッチセンサ、赤外線センサ、パワーオン信号のON/OFFを調べる。
        2. このドライバが使用されるモード・モジュール
          ポスト探索モード(1,2,3)→タッチセンサデバイスドライバ
          ポスト接近モード(1,2,3)→タッチセンサデバイスドライバ
          ポスト獲得モード(スイッチ探索モード、スイッチ押モード)→赤外線・タッチセンサ
          ポスト探索ルート復帰モード→タッチセンサデバイスドライバ
        3. IO アドレス
          タッチセンサ⇒0140H、0142H
          赤外線センサ⇒0150H、0152H、0154H、0156H、0158H
            ※アルゴリズム・関数名についてはリンク先参照。

    5. ヘッダファイルの詳細

      1. 外部関数の定義ヘッダ
        1. 機能:使用する外部関数の名前を宣言する。
        2. このヘッダファイルを利用するモード
          このヘッダファイルは全てのモードモジュールの中で使用する。
        3. ヘッダ名:myhead.h
        4. 定義する変数,関数
          extern void syoki();
          extern void circle90_left();
          extern void circle90_left_long();
          extern void circle90_right();
          extern void circle90_right_long();
          extern int lcd_msg();
          extern int pssearch1();
          extern int pssearch2();
          extern int pssearch3();
          extern void psafter();
          extern void psbefore();
          extern void mm_data();
          extern void mm_back();
          
          extern int gethandan1();
          extern int gethandan2();
          extern int gethandan3();
          extern int psclose1();
          extern int psclose2();
          extern int psclose3();
          extern int psclose4();
          extern int psget();
          extern void fukki();
          
          extern int x,y;
          extern int kaihi;
          extern int get;
          extern int Lkyori;
          extern int kaisuu1;
          extern int kaisuu2;
          extern int kaisuu3;
          extern int kaisuu4;
          extern int uss_check;
          extern int hanbetu;
          extern int nopost;
          extern int syuukai_long,syuukai_short,syuukai_middle1,syuukai_middle2,syuukai_middle3;
          extern int syuukai_middle;
          extern int totta;
          extern int kakutoku;
          extern int diffx,diffy;
          extern int xpost[11],ypost[11];
          extern int xpost_dumy[11],ypost_dumy[11];
          extern int TorF;
          extern char *lcase1[];
          extern char *lcase2[];
          
      2. 外部変数の定義ヘッダ
        1. 機能:使用する外部変数の名前を宣言する。
        2. このヘッダファイルを利用するモード
          このヘッダファイルは全てのモードモジュールの中で使用する。
        3. ヘッダ名:myhead1.h
        4. 定義する変数
          extern char ts[5];
          extern char irs[3];
          extern int uss[3];
          

  7. 試験

    1. モード、機能モジュール単体試験
      • 各モードモジュールを単体で呼び出しモードの動作を十分に果たすかを試験する。
      • 機能モジュールがその定められた機能を正確に実現できるか試験する。

    2. 標準MIRS上での試験
      • MIRS0001は標準MIRSよりもセンサ数が少なく、またLCDと赤外線・タッチセンサのデバイスドライバおよび超音波センサとPWM/ロータリーエンコーダのRT-タスクモジュールはMIRS標準APIを使用するためソフトウェア的にほぼ完全に互換する。従ってMIRS0001のハードが完成する前にもメインプログラムを実行し、総合的なテストを行うことができる。

    3. 実機上での試験
      • 直進、回転、左トレースの各機能モジュールの調整は実機で行う。
      • 実際に走行を重ね、プログラムを安定させソフトウェア的な信頼度を高める。


関連文書