名称 MIRS1201 標準機競技用システム開発書
番号 MIRS1201-PLAN-0003

最終更新日:2012.10.19

版数 最終更新日 作成 承認 改訂記事
A01 2012.10.19 鈴木雄太、戸本佳佑、齋藤亮 出川教員

目次




1.はじめに


本ドキュメントは、MIRS1201の標準機で迷路を攻略するための戦略・プログラム設計及び開発過程について記したドキュメントである。


2.戦略


動作一つ一つの精度を高め、無駄な動きを極力省き、確実かつ競技時間内のゴールを可能とするためのプログラムの設計を目標に掲げる。

3.スレッド概要


MIRS1201では、基本的に3つのスレッド(メインスレッド・モータ制御スレッド・計測スレッド)を用いて動作させる。
それぞれのスレッドの詳細を以下に示す。
スレッド概要
メイン計測スレッドを監視し、モーター制御スレッドに指示を出す
モータ制御メインスレッドから出された指示に従いモーターの動きを制御する。
計測各センサの値を読み取りメインスレッドに渡す。

4.動作仕様

    プログラムのフローチャートと簡単な動作説明を以下に示す。MIRS1201は、各機能をモジュール化して必要に応じて呼び出す形式を取る。各機能の動作の流れは機能定義、詳細設計で示す。


  • 通路走行
    1. 超音波センサを用いてT字路、曲がり角、行き止まりを検知する。
    2. 直進の場合、超音波センサやロータリーエンコーダなどを使用し、壁に接触しないように走行する。
    3. 曲がり角の場合、その場で90°回転し走行する。

  • Direction Board
    1. 白線センサで白線を検知する。
    2. 画像を正確に取得するために正対補正を行う。
    3. 画像の取得を行い、それをもとに数字認識処理を行う。
    4. 数字認識に成功した場合、処理5へ移行。数字認識に失敗した場合、処理2へ移動。
    5. 設定してある優先度に従い、攻略する仕掛けを選択し通路動作に移行する。


  • ロータリー
    1. Direction Boardで識別後、ロータリーに侵入したことを左右の超音波センサで判断する。
    2. ロータリーに侵入後、通路の中央まで直進し、その場で90°回転する。
    3. 設定した回転半径で走行させる。また、右センサで行き過ぎ誤差を修正する。
    4. 壁検知後、再び左の超音波センサがエラー(出口)になるまで走行する。
    5. 出口検知後、出口後の通路の真ん中に補正
    6. 出口に向けて90度回転する


  • 小部屋
    1. Direction Boardで識別後、小部屋に侵入したことを超音波センサで判断する。
    2. 左の壁伝いで、出口を探しながら走行する。
    3. 見つけたら出る or 前方のタッチセンサに反応があれば90°回転して再度探索する。


  • 鍵・扉
    1. Direction Boardで識別後、鍵の方向へ90度回転し、鍵まで直進。
    2. 壁に衝突し扉をあける。この時タッチセンサが押される。
    3. 180度回転し、扉を通過し、次の動作へ移行する。



    5.詳細設計


    プログラムの詳細設計を以下に示す。

    5.1 通路走行

    • 直進走行
      1. 超音波センサから得た左右の壁との距離を用いてPID制御で左右のモータの制御量を算出
      2. ロータリーエンコーダから得た左右のタイヤの回転量を用いてPID制御で左右のモータの制御量を算出
      3. 1,2を足し合わせ左右のモータの制御量とする

    • 回転走行
      1. 右(又は左)に壁が無いことを検出
      2. 前の超音波センサの距離が一定値(調整する)になるまで前進
      3. モータ停止
      4. 右(又は左)に90度回転
      5. 右(又は左)に壁を検出するまで前進
      6. 右(又は左)に壁を検出した後直進走行に戻る

    • 周回走行
      1. 小部屋侵入判断:左and,右ussが大きな値(後々測定)を返す
      2. 右左折判断:右or左ussが大きな値(後々測定)を返す
      3. 出口検知判断:左ussが大きな値(後々測定)

    • 動作に必要な関数
      1. int motor_control(char motor_select,int pwm);
        仕様:動作させるモータを選択し入力したpwm値でモータを回転させる
        引数:
        char motor_select : 制御するモータの選択r(右),l(左)を入力する
        int pwm : モータの制御量を入力する
        返り値:int
        -9999:エラー値
        pwm:制御量が返り値

      2. int run_along_wall(null);
        仕様:直進走行を実装
        返り値:-1:エラー値
        1:正常に動作

        使用変数:
        dis_r,dis_l:左右の壁との距離(グローバル変数)
        rot_x,rot_y:左右のエンコーダ値(グローバル変数)
        dis_r_p,dis_l_p:前回の測定時の左右の壁との距離(グローバル変数)
        rot_x_p,rot_y_p: 前回の測定時の左右のエンコーダ値(グローバル変数)


      3. int turn_along_wall(null);
        仕様:回転走行を実装
        返り値:-1:エラー値
        1:正常に動作

        使用変数:
        dis_r,dis_l:左右の壁との距離(グローバル変数)
        rot_x,rot_y:左右のエンコーダ値(グローバル変数)
        dis_r_p,dis_l_p:前回の測定時の左右の壁との距離(グローバル変数)
        rot_x_p,rot_y_p: 前回の測定時の左右のエンコーダ値(グローバル変数)

    5.2 ダイレクションボード攻略における正対補正

    1. 白線を検知するまで5.1の通路走行のプログラムで走行
    2. どちらかの白線センサが白線を検知したら信号を送り通路走行OFF
    3. 左右両方の白線センサがONになるまで片輪で回転する(左右どちらかのOFFとなっている方のタイヤで回転する)
    4. 左右両方の白線センサがONとなったら画像認識プログラムに移る
    5. 画像認識が失敗したら一定の距離を後退し1〜4を繰り返す

    6.開発計画

    ソフトは戸本、鈴木、平蛯ェメカ、エレキは大塩、齊藤、齋藤、清水が主に担当し、以下に示す予定で開発を進めていく予定である。

    10/22 10/26 10/29 11/2
    ソフト 開発 開発
    各機能試験
    統合試験 調整
    メカ・エレキ 機体修正

    MIRS1203ドキュメント管理台帳