MIRS0802 ソフトウェア詳細設計書
MIRS0802-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2008.9.15 梅原・土田・敦 初版
A02 2008.9.16 デバイスドライバの詳細を追加

目次

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

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

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

2. 各動作モード概要・フローチャート

  • 後退動作モード


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

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


  • 関数名:post_search()
    構成要素:白線センサデバイスドライバ
    超音波センサタスクモジュール

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

    図. (post_search.bmp)


  • 左回転モード


  • 関数名:turn left()
    構成要素:なし

    ライントレースができるように、左に90°回転する。
    その後、「ポスト探索モード」へ
  • ポスト接近モード


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

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


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

    バンパーに付いている白線センサでポスト番号を判別する。
    その後、「ポスト獲得モード」へ
  • ポスト獲得モード


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

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

    図. (post_get.bmp)


  • 周回復帰モード


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

    右に90°回転する。そして、白線が見つかるまで前進する。
    白線を感知したら、左に90°回転し、ライントレースを数秒する。(ポスト探索は行わない。)
    その後、「ポスト探索モード」へ
    4つのポストを獲得したら、スタートしてからポストを発見した順番と、そのポスト番号を書き込む。これをもとにして2回目の競技では、判別動作をなしに順番どおりにポストを獲得する
  • ポスト番号保存モード


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

    4つのポストを獲得したら、スタートしてからポストを発見した順番と、そのポスト番号を書き込む。これをもとにして2回目の競技では、判別動作をなしに順番どおりにポストを獲得する
  • 危機回避動作


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

    想定される基本プログラム外のトラブルを危機回避モードとしてスレッドを走らせ、予定外の行動を起こしたときに緊急回避を可能にさせる。

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. モード遷移表



    図.(m_shift1.bmp)

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

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