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との対応、詳細はエレクトロニクス詳細設計書を参照。
関連文書