沼津高専 電子制御工学科
MIRS0004ソフトウェア詳細設計書
MIRS0004-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.5.31 勇・高根沢・中村 高根沢 初版
A02 2001.6.1 勇・高根沢・中村 高根沢 構成を表に改正
A03 2001.8.1 勇・高根沢・中村 高根沢 機能モジュールに赤外線デコードモジュールの追加、それに伴い図も更新
A04 2001.8.31 勇・高根沢・中村 高根沢 構造体の型を表にした・画像の更新

目次

  1. はじめに
  2. 概要
  3. OS(RT-Linux)の概要
  4. 行動モードの詳細
  5. プログラム群の構成
  6. プログラム群の詳細
    1. モードモジュール
    2. 機能モジュール
    3. RTタスクモジュール
    4. 関数モジュール
    5. ヘッダファイルの詳細
  7. 試験
  8. 作成ドキュメント一覧

  1. はじめに

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

  2. 概要

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

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

  3. OS(RT-Linux)の概要
    主な内容は、本MIRS0004のMIRS0004-TECH-0008に記載する。
    本OSRTLINUXは標準のLINUX環境でのプログラムの開発ができ、フラッシュメモリ上に収めることができ、MIRSの開発に極めて適しているOSといえる。

  4. 行動モードの詳細
      0. メインモード
    1. モード定義
      すべてのモードの制御を行うモード
    2. モード遷移条件
      なし。
    1. 回避モード
      1. モード定義
        スタート時にMIRSの進む直線上にポストがあった場合に行われるモード(回避理由は行動計画書に記す)
      2. モード遷移条件
        初期状態→ポストが経路にある場合→ポスト探索モード
    2. 獲得トレースモード
      1. モード定義
        ポストの獲得をトレースするモード
      2. モード遷移条件
        ポスト探索モード→ポストが発見された場合→獲得トレースモード
    3. 補助探索モード
      1. モード定義
        直進して反対の壁まで行きついた後に実行するモード
      2. モード遷移条件
        向かいの壁まで到着→補助探索モード→獲得トレースモード(ポスト発見時)
    4. ポスト探索モード
      1. モード定義
        ポストの位置を探索するモード
      2. モード遷移条件
        回避モード→ポストの発見→獲得トレースモード
        ポスト探索→向かいの壁まで到着→補助探索
    5. 自己位置修正モード
      1. モード定義
        ポストを獲得した後に元の直進していた位置まで戻るモード
      2. モード遷移条件
        ポストの獲得終了→自己位置修正→ポスト探索モード
  5. プログラム群の構成

    以下にMIRS0004で用いる。モードモジュール・RTタスクモジュール・デバイスド ライバ・機能モジュール・関数モジュール・ヘッダファイルの関係を示す。

  6. プログラム群の詳細
    1. モードモジュール
        0. メインモード
      1. モード定義
        すべてのモードの制御を行うモード
      2. モード遷移条件
        なし
      3. 構成要素
        機能モジュール全て
        補助関数全て
        RT タスク全て
        デバイスドライバ全て
      4. 関数名
        int main(int argc,char *argv[]);
      5. 引数
        main関数の引数
      6. 戻り値
        0(正常終了)
      7. アルゴリズム(フローチャート)
        なし
    2. 回避モード
      1. モード定義
        スタート時にMIRSの進む直線上にポストがあった場合に行われるモード(回避理由は行動計画書に記す)
      2. モード遷移条件
        初期状態→ポストが経路にある場合→ポスト探索モード
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール、回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバなし
      4. 関数名
        StructEvode ModeEvode();
        typedef struct POINT{
        	int radius;
        	double rage;
        }POINT;
        typedef struct{
        	int flag;
        	POINT pt;
        }StructEvode;
        
        回避モード実行時に右にずれたか左にずれたか、どれだけずれたかを入力。
      5. 引数
        なし
      6. 戻り値
        StructEvode Srevo;
      7. アルゴリズム(フローチャート)
    3. 補助探索モード
      1. モード定義
        直進して反対の壁まで行きついた後に実行するモード
      2. モード遷移条件
        向かいの壁まで到着→補助探索モード→獲得トレースモード(ポスト発見時)
      3. 構成要素
        機能モジュール直進モジュール、回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード
        回転角のエンコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバ赤外線センサドライバ・タッチセンサドライバ
      4. 関数名
        void support(POSTDATA dat[]);
      5. 引数
        とったポストすべてのデータを渡す。
        typedef struct {
        	int postnum;
        	int x;
        	int y;
        }POSTDATA;
        	postnumはポストの取る順番。
        	xはポストのx座標
        	yはポストのy座標
        		
      6. 戻り値 なし
      7. アルゴリズム(フローチャート)
    4. ポスト探索モード
      1. モード定義
        ポストの位置を探索するモード
      2. モード遷移条件
        回避モード→ポストの発見→獲得トレースモード
        ポスト探索→向かいの壁まで到着→補助探索
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバタッチセンサドライバ・赤外線ドライバ
      4. 関数名
        void SearchPillars(Discover* discover);
      5. 引数
        typedef struct{
        	int  Length;
        	int flag;
        }Discover;
        
        発見したかどうかとポストまでの距離を入力。
      6. 戻り値
        なし
      7. アルゴリズム(フローチャート)
    5. 獲得トレースモード
      1. モード定義
        ポストの獲得をトレースするモード
      2. モード遷移条件
        ポスト探索モード→ポストが発見された場合→獲得トレースモード
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール・回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード・回転角のエンコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバなし
      4. 関数名
         void GetPillar(Discover* discover,GetPillarMove* MoPillar);
      5. 引数
        Discover構造体はポスト探索モード時に入力した距離を参照するため。
        typedef struct {
        	int Lenght;
        	double rage;
        	int radius;
        }GetPillarMove;
        獲得とレースモードの実行時に移動した距離、回った半径、回った角度を入力。
      6. 戻り値
        なし
      7. アルゴリズム(フローチャート)
    6. 自己位置修正モード
      1. モード定義
        ポストを獲得した後に元の直進していた位置まで戻るモード
      2. モード遷移条件
        ポストの獲得終了→自己位置修正→ポスト探索モード
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール・回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード・回転角のエンコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバなし
      4. 関数名
         int ReviLocation(GetPillarMove MovePt);
      5. 引数
        GetPillarMove MovePt;
      6. 戻り値
        return END_REVI; (#define END_REVI (1));
        正常に終わったか報告
      7. アルゴリズム(フローチャート)
  7. 機能モジュール
    1. 直進モジュール
      1. 機能
        モーターを回転させて直進させるモジュール。
      2. 構成要素
        補助関数、RT タスク、デバイスドライバ
        PWM・ロータリーエンコーダRT-タスクモジュール
      3. このモジュールが使用されるモード
        回避モード、獲得トレースモード、補助探索モード、ポスト探索モード、自己位置修正モード
      4. 関数名
        void GoStraight(int length,int flag,int time_f);
        length:移動距離
        flag:前か後ろか?
        time_f:もしこのフラグが立っていたら割り込みが来るまで直進
      5. 引数
        int length;
        int flag;
        int time_f;
      6. 戻り値
        なし
      7. アルゴリズム(フローチャート)
    2. 回転モジュール
      1. 機能
        自機を回転させて向かう方向を変えるモジュール
      2. 構成要素
        補助関数、RT タスク、デバイスドライバ
        PWM・ロータリーエンコーダRT-タスクモジュール
      3. このモジュールが使用されるモード
        回避モード、補助探索モード、ポスト探索モード 、獲得トレースモード 、自己位置修正モード
      4. 関数名
        int Rot_P(double rage);
      5. 引数
        double rage;(回転角)
      6. 戻り値
        return 0;(正常に終了したか?)
      7. アルゴリズム(フローチャート)
    3. カーブモジュール
      1. 機能
        自機を回転させて移動するモジュール
      2. 構成要素
        補助関数、RT タスク、デバイスドライバ
        PWM・ロータリーエンコーダRT-タスクモジュール
      3. このモジュールが使用されるモード
        補助探索モード獲得トレースモード 、自己位置修正モード
      4. 関数名
        int Rot_M(double rage ,int radius);
      5. 引数
        double rage;(回転角)
        int radius;回る半径。(内側タイヤが基準)
      6. 戻り値
        return 0;(正常に終了したか?)
      7. アルゴリズム(フローチャート)
  8. RT タスクモジュール
    1. 超音波センサ RTタスクモジュール
        標準MIRSで提供されている物を使用する。MIRSATML 超音波センサRTタスクモジュール取扱説明書(MIRSATML-SOFT-1001)     
      1. 機能
      2. このRTタスクモジュールがされるモード、機能モジュール
      3. 構成要素 関数モジュール
      4. 関数名
      5. 優先度
      6. FIFO の仕様
      7. アルゴリズム
    2. PWM・ロータリーエンコーダ RTタスクモジュール
        標準MIRSで提供されている物を使用する。MIRSATML PWM・ロータリーエンコーダRTタスクモジュール取扱説明書(MIRSATML-SOFT-1002)
      1. 機能
      2. このRTタスクモジュールがされるモード、機能モジュール
      3. 構成要素 関数モジュール
      4. 関数名
      5. 優先度
      6. FIFO の仕様
      7. アルゴリズム
  9. デバイスドライバ
    1. 赤外線センサドライバ
        標準MIRSで提供されている物を使用する。MIRSATML 赤外線・タッチセンサデバイスドライバ取扱説明書(MIRSATML-SOFT-1004)  
      1. 機能
      2. このドライバ使用されるモード、モジュール
      3. 関数名
      4. IO アドレス、IRQ
      5. アルゴリズム
    2. LCDドライバ
        標準MIRSで提供されている物を使用する。MIRSATLM LCDデバイスドライバ取扱説明書(MIRSATML-SOFT-1003)  
      1. 機能
      2. このドライバ使用されるモード、モジュール
      3. 関数名
      4. IO アドレス、IRQ
      5. アルゴリズム
    3. タッチセンサドライバ
        標準MIRSで提供されている物を使用する。MIRSATML 赤外線・タッチセンサデバイスドライバ取扱説明書(MIRSATML-SOFT-1004)  
      1. 機能
      2. このドライバ使用されるモード、モジュール
      3. 関数名
      4. IO アドレス、IRQ
      5. アルゴリズム
  10. 関数モジュール
    1. ディユーティー比のデコードモジュール
      1. 機能
        ディユーティー比の調整を行なう
      2. このドライバ使用されるモード、モジュール
        獲得トレースモード、回転モジュール
      3. 関数名
        void decode_duty(int *right,int *left);
      4. 引数、戻り値
        引数
        int *right;右のディユーティー比
        int *left;左のディユーティー比
        戻り値なし
    2. 回転角のデコードモジュール
      1. 機能
        回転角の調整を行なう
      2. このドライバ使用されるモード、モジュール
        獲得トレースモード、回転モジュール、自己位置値修正モード、補助探索モード
      3. 関数名
        void decode_duty(double *rage);
      4. 引数、戻り値
        引数 double *rage;回転角
        戻り値なし
    3. 赤外線のデコードモジュール
      1. 機能
        赤外線センサのデコードを行いポストの存在を確認する。
      2. このドライバ使用されるモード、モジュール
        獲得トレースモード、回転モジュール、自己位置値修正モード、補助探索モード
      3. 関数名
        int decode_infrared(void);
      4. 引数、戻り値
        引数 なし
        戻り値 1 or NULL;
        1かNULLでポストがあるかないかを戻り値として返す。
  11. ヘッダファイルの詳細
    1. 関数定義ヘッダ
      1. 機能
         使う関数の名前の定義を行う
      2. このヘッダファイルを利用するモード、機能モジュール、ドライバ、RTタスクなど
        回避モード ,獲得トレースモード ,補助探索モード ,ポスト探索モード ,自己位置修正モード ,直進モジュール ,回転モジュール ,超音波センサ RTタスクモジュール ,PWM・ロータリーエンコーダ RTタスクモジュール ,赤外線センサドライバ PWM・ロータリーエンコーダ RTタスクモジュール ,タッチセンサドライバ
      3. ヘッダ名
         "defs_func.h"
      4. 定義する関数
        extern StructEvode ModeEvode();
        extern void GetPillar(Discover* discover,GetPillarMove* MoPillar);
        extern int ReviLocation(GetPillarMove MovePt);
        extern void GoStraight(int length,int flag);
        extern int Rot_M(double rage);
        extern int Rot_P(double rage);
    2. 定数・型定義ヘッダ
      1. 機能
         使う定数・型の名前の定義を行う
      2. このヘッダファイルを利用するモード、機能モジュール、ドライバ、RTタスクなど
        回避モード ,獲得トレースモード ,補助探索モード ,ポスト探索モード ,自己位置修正モード ,直進モジュール ,回転モジュール ,超音波センサ RTタスクモジュール ,PWM・ロータリーエンコーダ RTタスクモジュール ,赤外線センサドライバ PWM・ロータリーエンコーダ RTタスクモジュール ,タッチセンサドライバ
      3. ヘッダ名
         "defs_datas.h"
      4. 定義する変数
        #define R (0)

        #define L (1)

        #define END (0)

        構造体名GetPillarMove
        定義
        typedef struct{
        	int Lenght;
        	double rage;
        	int radius;
        }GetPillarMove;
        
        Length柱までの距離
        rage柱の方向の角度
        radius柱の回る半径

        構造体名Discover
        定義
        typedef struct{
        	int  Length;
        	int flag;
        }Discover;
        
        Length柱までの距離
        flag右か左か

        構造体名POSTDATA
        定義
        typedef struct{
        	int postnum;
        	int x;
        	int y;
        }POSTDATA;
        
        postnum柱をとった順番
        xx座標
        yy座標

        構造体名POINT
        定義
        typedef struct{
        	int radius;
        	double rage;
        }POINT;
        
        radius初期位置から移動した量
        rage移動した角度

        構造体名StructEvode
        定義
        typedef struct{
        	int flag;
        	POINT pt;
        }StructEvode;
        
        pt上記参照
        flag左右どちらに進んだか

  • 試験
    1. モード、機能モジュール単体試験
    2. 標準MIRS上での試験
    3. 実機上での試験
  • 作成ドキュメント一覧
    1. モードモジュール単体試験手順・仕様書
    2. 機能モジュール単体試験手順・仕様書
    3. システム総合試験手順・仕様書
  • 参考資料
    関連文書