沼津高専 電子制御工学科
MIRS0004ソフトウェア詳細設計書
MIRS0004-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
B01 2002.2.15 勇・高根沢・中村 高根沢 初版

目次

  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. モード定義
        最初後ろに下がり壁に向かって移動するモード。
      2. モード遷移条件
        初期状態→回避モード→ポスト探索モード
    2. 獲得トレースモード
      1. モード定義
        ポストの獲得をトレースするモード
      2. モード遷移条件
        ポスト探索モード→ポストが発見された場合→獲得トレースモード
    3. ポスト探索モード
      1. モード定義
        ポストの位置を探索するモード
      2. モード遷移条件
        回避モード→ポストの発見→自己位置修正モード
        ポスト探索→向かいの壁まで到着→自己位置修正モード
    4. 自己位置修正モード
      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. モード定義
        競技開始時に後ろに下がり壁に接触するためのモード
      2. モード遷移条件
        実行開始→ポスト探索モード
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール、回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバなし
      4. 関数名
        void avoid(int argc,char* argv[]);
      5. 引数
        メイン関数の引数
      6. 戻り値
        無し。
      7. アルゴリズム(フローチャート)
    3. ポスト探索モード
      1. モード定義
        ポストの位置を探索するモード
      2. モード遷移条件
        回避モード→ポストの発見→自己位置修正モード
        ポスト探索→向かいの壁まで到着→自己位置修正
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバタッチセンサドライバ
      4. 関数名
        void search();
      5. 引数
        発見したかどうかもしくは壁と接触したかを入力。
      6. 戻り値
        なし
      7. アルゴリズム(フローチャート)
    4. 獲得トレースモード
      1. モード定義
        ポストの獲得をトレースするモード
      2. モード遷移条件
        自己位置修正→獲得トレースモード
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール・回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード・回転角のエンコード
        RT タスクRTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバタッチセンサ、赤外線センサ
      4. 関数名
         void irs_mode();
      5. 引数
        なし。
      6. 戻り値
        ポストを発見して押したかどうか。
      7. アルゴリズム(フローチャート)
    5. 自己位置修正モード
      1. モード定義
        かべ、ポストなどと接触したときに90度に補正するモード
      2. モード遷移条件
        ポスト探索モード→自己位置修正
        壁に接触→自己位置修正
      3. 構成要素
        機能モジュール、補助関数、RT タスク、デバイスドライバ
        機能モジュール直進モジュール・回転モジュール
        補助関数PWM・ロータリーコーダエンコ−ダ
        デューティー比のデコード・回転角のエンコード
        RT タスク超音波センサ RTタスクモジュール
        PWM・ロータリーエンコーダ RTタスクモジュール
        デバイスドライバタッチセンサドライバ
      4. 関数名
        double manage();
      5. 引数
        なし。
      6. 戻り値
        double radius;
        補正した角度
      7. アルゴリズム(フローチャート)
  7. 機能モジュール
    1. 直進モジュール
      1. 機能
        モーターを回転させて直進させるモジュール。
      2. 構成要素
        補助関数、RT タスク、デバイスドライバ
        PWM・ロータリーエンコーダRT-タスクモジュール
      3. このモジュールが使用されるモード
        回避モード、獲得トレースモード、補助探索モード、ポスト探索モード、自己位置修正モード
      4. 関数名
        void straight(double left,double right,int leng);
        第一引数:左の速度
        第二引数:右の速度
        第三引数:直進距離
      5. 引数
        double left;
        double right;
        int leng;
      6. 戻り値
        なし
      7. アルゴリズム(フローチャート)
    2. 回転モジュール
      1. 機能
        自機を回転させて向かう方向を変えるモジュール
      2. 構成要素
        補助関数、RT タスク、デバイスドライバ
        PWM・ロータリーエンコーダRT-タスクモジュール
      3. このモジュールが使用されるモード
        回避モード、補助探索モード、ポスト探索モード 、獲得トレースモード 、自己位置修正モード
      4. 関数名
        void rotation(double radius);
      5. 引数
        double radius;(回転角)
      6. 戻り値
        なし。
      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 feed_speed(double* left,double *right,int direct);
      4. 引数、戻り値
        引数
        int *right;右のディユーティー比
        int *left;左のディユーティー比
        int direct;前か後ろか
        戻り値なし
    2. フィードバック関数(距離)
      1. 機能
        ディユーティー比の調整を行なう
      2. このモジュールが使用されるモード、モジュール
        獲得トレースモード、回転モジュール、直進モジュール
      3. 関数名
        void feed_rot(double* left,double *right,int direct);
      4. 引数、戻り値
        引数
        int *right;右のディユーティー比
        int *left;左のディユーティー比
        int direct;前か後ろか
        戻り値なし
    3. フィードバック関数(ポストと接触したとき)
      1. 機能
        少し後ろに下がって角度の補正をしてまた、獲得モードに入る
      2. このモジュールが使用されるモード、モジュール
        獲得トレースモード、回転モジュール、直進モジュール
      3. 関数名
        void feed_post(double left,double right);
      4. 引数、戻り値
        引数
        int right;右のディユーティー比
        int left;左のディユーティー比
        戻り値なし
    4. ポストと接触するための関数
      1. 機能
        ポストと接触するため、デューティー比を調整する関数
      2. このモジュールが使用されるモード、モジュール
        獲得トレースモード
      3. 関数名
        int post_touch(double* left, double* right);
      4. 引数、戻り値
        引数
        int *right;右のディユーティー比
        int *left;左のディユーティー比
        戻り値なし
    5. 絶対値を返す関数
      1. 機能
        引数の絶対値を返す
      2. このモジュールが使用されるモード、モジュール
        獲得トレースモード、回転モジュール、直進モジュール
      3. 関数名
        double myabs(double);
      4. 引数、戻り値
        引数:値
        戻り値:絶対値
  11. ヘッダファイルの詳細
    1. 関数定義ヘッダ
      1. 機能
         使う関数の名前の定義を行う
      2. このヘッダファイルを利用するモード、機能モジュール、ドライバ、RTタスクなど
        回避モード ,獲得トレースモード ,補助探索モード ,ポスト探索モード ,自己位置修正モード ,直進モジュール ,回転モジュール ,超音波センサ RTタスクモジュール ,PWM・ロータリーエンコーダ RTタスクモジュール ,赤外線センサドライバ PWM・ロータリーエンコーダ RTタスクモジュール ,タッチセンサドライバ
      3. ヘッダ名・定義する関数
        ヘッダファイル名
        avoid.h
        定義関数
        	void straight(double,double,int);
        	void rotation(double);
        	void feed_back(double,double);
        	int rot_poll(int,double);
        	void call_encoder_data();
        	void encoder_print();
        	int post_touch(double* , double*);
        	void feed_post(double left,double right);
        	void feed_rot(double* ,double *,int);
        	void feed_speed(double* ,double *,int);
        	double myabs(double);

        ヘッダファイル名
        irs_mode.h
        定義関数
        extern int irs_mode();

        ヘッダファイル名
        manage.h
        定義関数
        double manage();

        ヘッダファイル名
        search.h
        定義関数
        extern void search();

        ヘッダファイル名
        senser.h
        定義関数
        extern int uss[5];
        extern char irs[7];	
        extern char ts[7];

    2. 定数・型定義ヘッダ
      1. 機能
         使う定数・型の名前の定義を行う
      2. このヘッダファイルを利用するモード、機能モジュール、ドライバ、RTタスクなど
        回避モード ,獲得トレースモード ,補助探索モード ,ポスト探索モード ,自己位置修正モード ,直進モジュール ,回転モジュール ,超音波センサ RTタスクモジュール ,PWM・ロータリーエンコーダ RTタスクモジュール ,赤外線センサドライバ PWM・ロータリーエンコーダ RTタスクモジュール ,タッチセンサドライバ
      3. ヘッダ名 myfuncs.h
      4. 定義する変数

        #define RIGHT 23.
        #define LEFT -23.

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