MIRS0802 ソフトウェア詳細設計書
MIRS0802-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
B01 2008.10.18 梅原・土田・敦 Ver.B 初版
B02 2008.11.6 モード遷移表を修正・追加

目次

1. 本ドキュメントについて
2. MIRS0802プログラムについて
3. 標準プログラム関数について改良・流用
4. モード遷移表
5. 新規デバイスドライバ

1. 本ドキュメントについて

    このドキュメントは、MIRS0802ソフトウェアの詳細設計を記述するものである。

2. MIRS0802プログラムについて

    2.1. プログラム概要

      競技1回目と2回目では動作が異なる為、実行ファイルを2つ用意し、
      それに伴ない、各競技専用のモードも作成する。

      競技1回目は、反時計回りにライントレース、
      ポストは順不同、発見し次第獲得をしていき、同時にポスト情報(番号、位置)を記録する。

      競技2回目は、1回目に得たポスト情報により行動判断、経路設計を行い、
      短時間の間に順番にポストを獲得していくことを目指す。

      基本設計書を参照のこと)

    2.2. プログラム構成

  • 競技1回目



  • 図1. 競技1回目(struct1.bmp)


  • 競技2回目



  • 図2. 競技2回目(struct2.bmp)


    2.3. 各動作モード概要

    • 標準位置移動モード


    • 関数名:move_std()
      構成要素:白線センサデバイスドライバ、ロータリーエンコーダドライバ

      スタート位置から白線のある位置まで後退する。
      後退を完了した位置をポスト座標を考えるときの基準にする。
      「ポスト探索モード」に移る。
    • 白線復帰モード


    • 関数名:line_return()
      構成要素:白線センサデバイスドライバ、ロータリーエンコーダドライバ

      白線のある位置まで後退する。そして、右に90°回転し、ライントレースを始める。
      「ポスト探索モード」に移る。
    • ポスト探索モード


    • 関数名:post_search1(), post_search2()
      構成要素:白線センサデバイスドライバ、ロータリーエンコーダドライバ
      超音波センサタスクモジュール

      ライントレースしながら、左側の超音波センサでポストがあるか探索する。
      ポストを発見したら、「ポスト接近モード」へ

      2回目は前進と後退のライントレースを使い分け、
      1回目に得たポスト位置情報を元に、最短距離でポストへ移動する。
    • ポスト接近モード


    • 関数名:post_approach()
      構成要素:超音波センサタスクモジュール、ロータリーエンコーダドライバ
       タッチセンサデバイスドライバ

      前方の超音波センサで補正を行いながら、ポストに接近する。
      バンパーにあるタッチセンサにポストが当たったら、「ポスト判別モード」へ
    • ポスト判別モード


    • 関数名:post_check()
      構成要素:白線センサデバイスドライバ

      バンパーに付いている白線センサでポスト番号を判別する。
      また、読み取り時のMIRSの位置を記憶し、2回目の探索に役立てる。
      その後、「ポスト獲得モード」へ
    • ポスト獲得モード


    • 関数名:post_get()
      構成要素:

      ポスト判別後、アームを動かしポストを獲得する。
      アームを本体に閉まって、「周回復帰モード」へ
    • 行動判断モード


    • 関数名:act_decide()
      構成要素:

      1回目に得たポスト情報を整理し、不明なポストの位置も予測、
      行動経路を設計し、最短で、順番にポストの獲得が行なえるようにする。

3. 標準プログラム関数について改良・流用

    MIRS0802ではアームによる獲得機構によりポスト獲得動作時の周回動作を省き、位置の誤差を減らすように設計している。
    また、赤外線センサを使用してない。
    なので、標準機プログラムの関数、ヘッダファイルには、周回動作、赤外線センサに関わるものについては流用・及び改良しない。
      改良する関数
    • 行動制御系


    • control_test.c
      initialize.c
      post_search.c
      post_check.c
      rm_data.c
      post_approach.c
      functions.c
      correct_center.c
      流用する関数
    • 駆動系


    • void pwm_enco_start(int);
      void pwm_enco_stop(void);
      void pwm_enco_restart(void);
      void encoder_data(float *lm, float *rm, float *lv, float *rv, int *br);
      void encoder_data2(float *la, float *ra, int *br);
      void encoder_data3(float *la, float *ra, int *br);
      void pwm_both_data(int, int);
      void pwm_straight(int, int);
      void pwm_rotate(int);
      void pwm_lqr_straight(int, int);
      void pwm_lqr_rotate(int, int);
      int pwm_lqr_straight(int, int);
      int pwm_lqr_rotate(int, int);
      int pwm_lqr_circle(int, int, int);

    • スレッド系


    • void *irs_ts_ws(void *t);
      void *encoder(void *t);
      void *uss_read(void *t);
      void *uss_read(void *t);

4. モード遷移表

  • 競技1回目


  • 図3. 競技1回目(m_shift1.bmp)
  • 競技2回目


  • 図4. 競技2回目(m_shift2.bmp)

5. 新規デバイスドライバ

  • アーム制御ドライバ
    • IOポートアドレス0160(AMC制御信号)の下位2bitを使用。
      アームを動作させるモータの動作を制御する。
      FPGAとの対応、詳細はエレクトロニクス詳細設計書を参照。
関連文書