沼津高専 電子制御工学科
MIRS0201ソフトウェア詳細設計書
MIRS0201-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2003.5.27 全員 今村 初版
A02 2003.6.17 今村 今村 改訂版 白線探知センサをデバイスドライバに変更等

目次

  1. はじめに
  2. 概要
  3. OS(RT-Linux)の概要
  4. 行動モードの詳細
    1. 待機モード
    2. 白線検索モード
    3. コース検索モード
    4. ポスト探索モード
    5. コース移動モード1
    6. ポスト検索モード1
    7. ポスト検索モード2   
    8. ポスト獲得モード1   
    9. コース移動モード2   
    10. ポスト獲得モード2   
    11. 動作不明モード
  5. プログラム群の構成
  6. プログラム群の詳細
    1. モードモジュール
      1. 待機モード
      2. 白線検索モード
      3. コース検索モード
      4. ポスト探索モード
      5. コース移動モード1
      6. ポスト検索モード1
      7. ポスト検索モード2    
      8. ポスト獲得モード1    
      9. コース移動モード2    
      10. ポスト獲得モード2    
      11. 動作不明モード
    2. 機能モジュール
      1. 垂直補正モジュール
      2. ポスト周回モジュール
      3. ポスト識別モジュール
      4. ポスト獲得モジュール
      5. メインモジュール
      6. 直進走行モジュール
      7. 回転モジュール
      8. 総合試験モジュール
    3. RT タスクモジュール
      1. 超音波センサ RTタスクモジュール
      2. PWM・ロータリーエンコーダ RTタスクモジュール
    4. デバイスドライバ
      1. LCDデバイスドライバ
      2. タッチ、白線センサデバイスドライバ
      3. アームデバイスドライバ    
      4. 赤外線デバイスドライバ
  7. 試験
    1. モード、機能モジュール単体試験
    2. 標準MIRS上での試験
    3. 実機上での試験

  1. はじめに

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

  2. 概要

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

  3. OS(RT-Linux)の概要

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

  4. 行動モードの詳細
    1. 待機モード

      • 定義:メインプログラムを立ち上げる。競技が始まる(スタートスイッチが押される)まで、待機状態を続ける。
      • 遷移条件:
        • 競技開始時にテンキーからポスト数、動作番号を入力→白線検索モード      
        • ポストの配置状況により、ポストにぶつかることなく直進できる時テンキー入力→ポスト探索モード

    2. 白線検索モード

      • 定義:プログラムスタート直後、MIRSが白線まで後進する。その後、回転し,垂直補正する。
      • 遷移条件:
        • スタート直後、後退して白線を感知、垂直補正→コース探索モード

    3. コース検索モード

      • 定義:白線沿いに直進し、さらに競技場に向かってY軸となるコースを超音波により探索する。
      • 遷移条件:
        • MIRSが通過可能なY軸を発見→ポスト探索モード      
        • 右(左)の白線に到達→反対方向へ進みコース探索モード      
        • MIRSが通過可能なY軸を発見できない→○○○モード

    4. ポスト探索モード

      • 定義:通り道を探したら、向こう側の白線まで直進する。この際、左右の超音波センサでポストを探索していく。
        ただし、この時ポストには接近しない。
      • 遷移条件:
        • 白線を感知→コース移動モード1      
        • ポスト探索モード開始後3.6m以上進んでも白線を見つけられない→動作不明モード

    5. コース移動モード1

      • 定義:ポスト探索により記憶したポストの位置までコースを後進していく。超音波によりMIRS横にポストがあるところで停止する。
      • 遷移条件:
        • MIRS横にポストを発見し停止→ポスト検索モード1

    6. ポスト検索モード1

      • 定義:後進した場所からポストまで接近し、ポストを周回する。このとき、ポストからの赤外線を感知し記憶し、さらに周回するポストの
        反対側に隠れたポストを超音波で探
      • 索する。1周した後に元のコースへ戻る。また、ポストの座標も記憶しておく。 遷移条件:
        • スタート時に入力されたポストを識別完了→コース移動モード2      
        • ポスト番号識別完了後Y軸に戻る(認識していないポストがある)→ポスト検索モード1      
        • ポストの陰に隠れたポストを発見→ポスト検索モード2      
        • 赤外線コードが次に獲得すべき番号→ポスト獲得モード1      
        • 白線を感知→動作不明モード 

    7. ポスト検索モード2

      • 定義:ポスト検索モード1で新たなポストを発見した場合、そのポストまで接近し、モード1と同様の作業を行う。
        1周したあと、最初のポストの周回コースに戻る。
      • 遷移条件:
        • ポスト番号識別完了後Y軸に戻る(認識していないポストがある)→ポスト検索モード1      
        • ポストの陰に隠れたポストを発見→ポスト検索モード2      
        • 赤外線コードが次に獲得すべき番号→ポスト獲得モード1      
        • 白線を感知→動作不明モード

    8. ポスト獲得モード1

      • 定義:ポスト検索中に検知したポスト番号が、取得すべきポストの番号だった場合、そのポストをアームによって取得する。
      • 遷移条件:
        • ポストの赤外線が消えたことを確認しY軸に復帰→ポスト検索モード       
        • ポストの赤外線が消えない→ポスト獲得モード1       
        • 白線を感知→動作不明モード

    9. コース移動モード2

      • 定義:ポストの番号の順にコースを移動していくモード。
      • 遷移条件:
        • 次に獲得すべきポストを発見→ポスト獲得モード2      
        • 白線を感知→動作不明モード      
        • 一定時間探しても次に獲得すべきポストが発見できない→番号関係なしでポストを獲得する

    10. ポスト獲得モード2

      • 定義:Y軸からポストに接近し、周回、ポストの獲得をするモード。検索時に記憶した座標のポストを獲得する。隠れていたポストを取得する場合は超音波によって、正確な
      • 位置を測定し、接近する。 遷移条件:
        • そのポストの陰にポストがある場合→ポスト獲得モード2  
        • 白線を感知→動作不明モード

    11. 動作不明モード2

      • 定義:一定時間同じ動作を繰り返したら、直進して白線を探す。白線を見つけたあとは、白線からコース探索モードに移る。(初期化)
      • 遷移条件:
        • 白線を発見→白線上を移動→コース探索モード

     
  5. プログラム郡の構成
  6. プログラム群の詳細
    1. モード
      1. 待機モード
          
        定義:メインプログラムを立ち上げる。競技が始まる(スタートスイッチが押される)まで、待機状態を続ける。
        遷移条件:競技開始時にテンキーからポスト数、動作番号を入力→白線検索モード
             ポストの配置状況により、ポストにぶつかることなく直進できる時テンキー入力→ポスト探索モード
        構成要素:LCDデバイスドライバ
        関数名:post()
        引数:type,postnumber
        戻り値:start
        フローチャート:
          
          
      2. 白線検索モード
          
        定義:プログラムスタート直後、MIRSが白線まで後進する。その後、回転し,垂直補正する。
        遷移条件:スタート直後、後退して白線を感知、垂直補正→コース探索モード
        構成要素:垂直補正モジュール
             直進走行モジュール
             回転モジュール
             白線センサデバイスドライバ
        関数名:whiteline()
        引数:なし
        戻り値:line
        フローチャート:
          
          
      3. コース探索モード
          
        定義:白線沿いに直進し、さらに競技場に向かってY軸となるコースを超音波により探索する。
        遷移条件:MIRSが通過可能なY軸を発見→ポスト探索モード
             右(左)の白線に到達→反対方向へ進みコース探索モード
             MIRSが通過可能なY軸を発見できない→横軸へ
        構成要素:直進走行モジュール
             回転モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:course_tansaku()
        引数:なし
        戻り値:y_jiku,right_line,left_line,line
        フローチャート:
          
          
      4. ポスト探索モード
          
        定義:通り道を探したら、向こう側の白線まで直進する。この際、左右の超音波センサでポストを探索していく。ただし、この時ポストには接近しない。
        遷移条件:白線を感知→コース移動モード1
             ポスト探索モード開始後3.6m以上進んでも白線を見つけられない→動作不明モード
        構成要素:直進走行モジュール
             垂直補正モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:post_tansaku()
        引数:なし
        戻り値:right_uss,left_uss,line,post_right,post_left
        フローチャート:
          
          
      5. コース移動モード1
        定義:ポスト探索により記憶したポストの位置までコースを後進していく。超音波によりMIRS横にポストがあるところで停止する。
        遷移条件:MIRS横にポストを発見し停止→ポスト検索モード1
        構成要素:直進走行モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:course_idou1()
        引数:right_uss,left_uss
        戻り値:siten,line
        フローチャート:
          
          
      6. ポスト検索モード1
          
        定義:後進した場所からポストまで接近し、ポストを周回する。このとき、ポストからの赤外線を感知し記憶し、さらに周回するポストの反対側に隠れたポストを超音波で探索する。1周した後に元のコースへ戻る。また、ポストの座標も記憶しておく。
        遷移条件:スタート時に入力されたポストを識別完了→コース移動モード2
             ポスト番号識別完了後Y軸に戻る(認識していないポストがある)→ポスト検索モード1
             ポストの陰に隠れたポストを発見→ポスト検索モード2
             赤外線コードが次に獲得すべき番号→ポスト獲得モード1
             白線を感知→動作不明モード 
        構成要素:直進走行モジュール
             回転モジュール
             ポスト周回モジュール
             ポスト識別モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:post_kensaku1()
        引数:post_right,post_left,siten
        戻り値:post_n,kage_post,line
        フローチャート:
          
          
      7. ポスト検索モード2
          
        定義:ポスト検索モード1で新たなポストを発見した場合、そのポストまで接近し、検索モード1と同様の作業を行う。1周したあと、最初のポストの周回コースに戻る。
        遷移条件:ポスト番号識別完了後Y軸に戻る(認識していないポストがある)→ポスト検索モード1
             ポストの陰に隠れたポストを発見→ポスト検索モード2
             赤外線コードが次に獲得すべき番号→ポスト獲得モード1
             白線を感知→動作不明モード
        構成要素:直進走行モジュール
             回転モジュール
             ポスト周回モジュール
             ポスト識別モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:post_kensaku2
        引数:kage_post,siten
        戻り値:post_n,line
        フローチャート:
          
          
      8. ポスト獲得モード1
          
        定義:ポスト検索中に検知したポスト番号が、取得すべきポストの番号だった場合、そのポストをアームによって取得する。
        遷移条件:ポストの赤外線が消えたことを確認しY軸に復帰→ポスト検索モード1
             ポストの赤外線が消えない→ポスト獲得モード1
             白線を感知→動作不明モード
        構成要素:ポスト獲得モジュール
             白線センサデバイスドライバ
        関数名:post_kakutoku1()
        引数:なし
        戻り値:post_n,line
        フローチャート:
          
          
      9.   
      10. コース移動モード2
        定義:ポストの番号の順にコースを移動していくモード。
        遷移条件:次に獲得すべきポストを発見→ポスト獲得モード2
             白線を感知→動作不明モード
             一定時間探しても次に獲得すべきポストが発見できない→番号関係なしでポストを獲得する
        構成要素:直進走行モジュール
             回転モジュール
             超音波センサRT-タスクモジュール
             白線センサドライバ
        関数名:course_idou2()
        引数:post_n
        戻り値:siten,line,error
        フローチャート:
      11.   
      12. ポスト獲得モード2
        定義:Y軸からポストに接近し、周回、ポストの獲得をするモード。検索時に記憶した座標のポストを獲得する。隠れていたポストを取得する場合は超音波によって、正確な位置を測定し、接近する。
        遷移条件:そのポストの陰にポストがある場合→ポスト獲得モード2
        	 白線を感知→動作不明モード
        構成要素:直進走行モジュール
             回転モジュール
             ポスト周回モジュール
             ポスト識別モジュール
             ポスト獲得モジュール
             超音波センサRT-タスクモジュール
             白線センサドライバ
        関数名:post_kakutoku2()
        引数:siten,post_n,kage_post
        戻り値:post_n,line
        フローチャート:
      13.   
      14. 動作不明モード
        定義:一定時間同じ動作を繰り返したら、直進して白線を探す。白線を見つけたあとは、白線からコース探索モードに移る。(初期化)
        遷移条件:白線を発見→白線上を移動→コース探索モード
        構成要素:直進走行モジュール
             回転モジュール
             垂直補正モジュール
             超音波センサRT-タスクモジュール
             白線センサデバイスドライバ
        関数名:humei()
        引数:start
        戻り値:なし
        フローチャート:
    2. 機能モジュール
      1. 垂直補正モジュール
        定義:白線に対して本体を垂直に補正する
        構成要素:白線センサデバイスドライバ、PWM/ロータリエンコーダRT-タスクモジュール、LCDデバイスドライバ
        関数名:void suityoku()
        引数:なし
        戻り値:なし
        
      2. ポスト周回モジュール
        定義:ポストの周りを一定距離を保ったまま周回する
        構成要素:PWM/ロータリエンコーダRT-タスクモジュール、超音波センサRT-タスクモジュール、LCDデバイスドライバ
        関数名:void shykai()
        引数:なし
        戻り値:なし
        
      3. ポスト識別モジュール
        定義:ポストの赤外線の番号を識別する
        構成要素:赤外線センサRT-タスクモジュール、LCDデバイスドライバ
        関数名:void irs_number()
        引数:なし
        戻り値:number
        
      4. ポスト獲得モジュール
        定義:識別したポストが次にとるポストならばアームを伸ばす
        構成要素:タッチセンサデバイスドライバ、LCDデバイスドライバ、アームデバイスドライバ
        関数名:void get_post()
        引数:discernment
        戻り値:なし
        
      5. メインモジュール
        定義:MIRS0201の行動を決定する
        構成要素:PWM/ロータリエンコーダ・超音波センサ・白線検知センサRT-タスクモジュール、赤外線センサ・タッチセンサ・LCDデバイスドライバ等
        関数名:void main()
        引数:なし
        戻り値:なし
        
      6. 直進走行モジュール
        定義:MIRS0201を指定した距離直進移動させる
        構成要素:PWM/ロータリエンコーダRT-タスクモジュール、LCDデバイスドライバ
        関数名:void straight()
        引数:distance
        戻り値:なし
        
      7. 回転モジュール
        定義:MIRS0201を指定した角度その場で回転させる
        構成要素:PWM/ロータリエンコーダRT-タスクモジュール、LCDデバイスドライバ
        関数名:void turn()
        引数:angle
        戻り値:なし
        
      8. 総合試験モジュール
        定義:各種試験を行う
        構成要素:各種RT-タスクモジュール、デバイスドライバ等
        関数名:void exam()
        引数:なし
        戻り値:なし
        
    3. RT タスクモジュール
      1. 超音波センサRT-タスクモジュール(MIRS標準APIを使用)
        • 機能:FIFO1、FIFO2を用いて上位プログラムとコマンド、データのやり取りを行い、超音波センサを制御する。
        • このRTタスクモジュールが使われる機能モジュール・モード:
          • ポスト周回モジュール
          • 統合試験モジュール
          • コース探索モード
          • ポスト探索モード     
          • コース移動モード1     
          • ポスト検索モード2     
          • コース移動モード2     
          • ポスト獲得モード2     
          • 動作不明モード
        • 構成要素:関数モジュール


      2. PWM・ロータリーエンコーダRT-タスクモジュール(MIRS標準APIを使用)
        • 機能:左右のロータリーエンコーダのカウント値、速度データ、などをやり取りする。直進、回転を実現する。
        • このRTタスクモジュールがされる機能モジュール:
          • 垂直補正モジュール     
          • ポスト周回モジュール     
          • 直進走行モジュール     
          • 回転モジュール
          • 統合試験モジュール
        • 構成要素:関数モジュール


    4. デバイスドライバMIRS0201基本設計書ソフトウェアビジビリティ
      1. LCDデバイスドライバ(MIRS標準APIを使用)
        • 機能:MIRS0102に搭載されるLCD(SC1602BS)への表示を行う。
        • このドライバ使用されるモード:すべてのモード
        • IO アドレス:0100H、0102H


      2. タッチセンサ、白線センサデバイスドライバ (MIRS標準APIを変更)
        • 機能:MIRS0102に搭載されるタッチセンサのパワーオン信号のON/OFF、白線センサの入力信号のON/OFFを調べる。
        • このドライバが使用されるモード・機能モジュール:
          • すべてのモード(待機モードを除く)・・・・・白線センサデバイスドライバ
          • 垂直補正モジュール・・・・・白線センサ             
          • 統合試験モジュール・・・・・白線センサ             
          • ポスト獲得モジュール・・・・・タッチセンサ             
          • 統合試験モジュール・・・・・タッチセンサ
        • IO アドレス:0140H


      3. アームデバイスドライバ
        • 機能:MIRS0102に搭載されるポスト獲得用アームのON/OFFを制御する。
        • このドライバが使用されるモード:
          • ポスト獲得モジュール
          • 統合試験モジュール
        • IO アドレス:0150H


      4. 赤外線センサデバイスドライバ
        • 機能:赤外線のON/OFFを調べるとともに、赤外線のコードを識別する。
        • このドライバがされる機能モジュール:
          • ポスト識別モジュール
          • ポスト獲得モジュール
          • 統合試験モジュール
        • IO アドレス:0160H


  7. 試験
    1. モード、機能モジュール単体試験
      • 各モード、モジュールを単体で呼び出し、任意の信号を入れたときに予定通りの反応が返ってくるかをチェックする。
    2. 標準MIRS上での試験
      • MIRS0201は標準MIRSと構造が大きく異なるため、標準MIRSではライブラリの試験のみ行う。
      • ライブラリ
           
        • タッチセンサ  
        • 超音波センサ  
        • 赤外線センサ  
        • LCD  
        • PWM
    3. 実機上での試験
      • 各モジュール、モードの試験は実機で行う。このため、MIRS本体を早めに仕上げる必要がある。

関連ドキュメント
ドキュメント番号 ドキュメント名称 作成者
MIRS0201-SOFT-0002 MIRS0201 ソフトウェア取扱設計書 鈴木健二
MIRS0201-DSGN-0004 MIRS0201 基本設計書 MIRS0201全員
MIRS02SF-CURR-0012 MIRS2002 ソフトウェア詳細設計書作成規定 大原先生