名称 MIRS1601 ソフトウェア詳細設計書
番号 MIRS1601-SOFT-0001

最終更新日:2016.12.14

版数 最終更新日 作成 承認 改訂記事
B01 2017.2.3 諏訪 尚也 第二版

目次

  1. はじめに
  2. モジュール構成
  3. モジュール一覧
  4. モジュール詳細
  5. フローチャート
  6. スレッド構成と走行制御の動作仕様
  7. テスト項目
  8. コーディングルール

  1. はじめに

    本ドキュメントは、MIRS1601のソフトウェア詳細設計について記したドキュメントである。

  2. モジュール構成

    モジュール構成を以下に示す。

    fig.1 モジュール構成

  3. モジュール一覧

    以下にArduinoで使用するモジュールの一覧を示す

    モジュール名 概要 関数名 担当
    mirsak mirs全体の動作を管理する。 void set_up(void)
    void loop(void)
    打味
    sequence スタートから数字認識、展示室進入までの動作を行う。 void sequence_main(void) 打味
    omuni_ctrl オムニホイールを制御、壁との距離を測定して走行する。 void omuni_ctrl_execute(void)
    void omuni_ctrl_set(omuni_state_t state, double speed, int dist)
    void omuni_ctrl_reset(void)
    諏訪
    omuni_dist_ctrl オムニホイールを制御、距離計のみを用いて走行する。 void omuni_dist_ctrl_execute(void)
    void omuni_ctrl_set(void)
    打味
    motor モータを動かす。 void motor_set(int pwm_n, int pwm_s, int pwm_e, int pwm_w, byte state) 打味
    distance 走行距離を管理する。 void distance_get(double *dist_n, double *dist_s, double *dist_e, double *dist_w) 諏訪
    encoder エンコーダ値を管理する。 void encoder_open(void)
    void encoder_get(long *cnt_n, long *cnt_s, long *cnt_e, long *cnt_w)
    static void enc_change_n(void)
    static void enc_change_s(void)
    static void enc_change_e(void)
    static void enc_change_w(void)
    久保寺
    uss 超音波センサの信号処理を行う。 int uss_get(int uss_port) 久保寺
    cpu CPUとの通信を行う。 void cpu_open(void)
    void cpu_num_trans(uint8_t cam_no)
    int cpu_com_read(char *c)
    打味

    以下にCPU側で使用するモジュールの一覧を示す。

    モジュール名 説明 関数名 担当
    number 数字認識を行う。 int number_get(int dist)
    int number_serial(void)
    久保寺
    server 認識した数字をサーバーに送る。 void server_send(int number)
    balloon 怪盗機の赤い風船を認識する。 int picture_detect(int cammnum,int *area)
    int balloon_serial(void)
    serial_ctrl CPUとArduinoの間で信号を共有して処理する。 void serial_cpu(void) 打味
  4. モジュール詳細

    使用するモジュールの仕様について示す。
    既存のモジュールは、変更点がある部分のみ示す。
    参考:MG3S 標準プログラム 関数レファレンス

    mirsak
    関数名 引数 戻り値 動作説明
    void set_up(void) なし なし エンコーダ、CPUの起動時の処理を行う
    void mirsak_main(void) なし なし モジュール全体を統合し管理する。
    sequence
    関数名 引数 戻り値 動作説明
    void sequence_main(void) なし なし スタート地点から走行して数字認識を行い、展示室に入る。
    omuni_ctrl
    関数名 引数 戻り値 動作説明
    void omuni_ctrl_execute(void) なし なし 走行制御の処理を実行する。
    void omuni_ctrl_set(omuni_state_t state, double speed, int dist) 走行モード、走行速度[cm/s]、走行距離[cm] なし オムニホイールによる走行モード、走行速度、壁との目標距離をセットする。
    void omuni_ctrl_reset(void) なし なし 状態を初期化する。
    omuni_dist_ctrl
    関数名 引数 戻り値 動作説明
    void omuni_ctrl_execute(void) なし なし 走行制御の処理を実行する。
    void omuni_ctrl_set(omuni_state_t state, double speed, int dist) 走行モード、走行速度[cm/s]、走行距離[cm] なし オムニホイールによる走行モード、走行速度、走行距離をセットする。
    motor
    関数名 引数 戻り値 動作説明
    void motor_open(void) なし なし モータに使用するピンの設定を行う。
    void motor_set(int pwm_l,int pwm_r,int pwm_f,int pwm_b) 左右前後のモータPWM指令値(0〜±255) なし モータへPWM指令値を与える。
    encoder
    関数名 引数 戻り値 動作説明
    void encoder_open(void) なし なし エンコーダに使用するピンの設定とエンコーダカウント関数の割り込み設定を行う
    void encoder_get(long *cnt_l,long *cnt_r,long *cnt_f,long *cnt_b) 左右前後のエンコーダ回転数 なし エンコーダの回転数を取得する。
    void encoder_reset(void) なし なし エンコーダの回転数をリセットする。
    static void enc_change_n() なし なし 北側のタイヤのエンコーダを読み取る。
    static void enc_change_s() なし なし 南側のタイヤのエンコーダを読み取る。
    static void enc_change_e() なし なし 東側のタイヤのエンコーダを読み取る。
    static void enc_change_w() なし なし 西側のタイヤのエンコーダを読み取る。
    distance
    関数名 引数 戻り値 動作説明
    void distance_get(double *dist_n, double *dist_s, double *dist_e, double *dist_w) 前後左右のタイヤの走行距離[cm] なし 前後左右のタイヤの走行距離を取得する。
    uss
    関数名 引数 戻り値 動作説明
    double uss_get(int uss_port) 処理を行う超音波センサの番号 測定結果を返す[cm] 超音波センサの信号処理を行う。
    number
    関数名 引数 戻り値 動作説明
    int number_get(int dist) 数字認識を行う距離 読み取った数字、エラーがあれば-1 モジュール全体を統合し管理する。
    int number_serial(void) なし 読み取った数字、エラーがあれば-1 CPUとAruduino間の通信を管理する。
    server
    関数名 引数 戻り値 動作説明
    void server_send(int number) 数字認識で読み取った数字 なし サーバーとの通信を行う。
    balloon
    関数名 引数 戻り値 動作説明
    int balloon_detect(int cammnum,int *area) 使用するカメラのポート、赤色の面積 正常に終了したら0、エラーがあれば-1 カメラで撮影し、撮影した画像の赤色の占める面積を計算する
    int balloon_serial(void) なし 読み取った数字、エラーがあれば-1 CPUとAruduino間の通信を管理する。
    serial_CPU
    関数名 引数 戻り値 動作説明
    void serial_cpu(void) なし なし CPUとArduinoの間で信号を共有して処理する。
  5. フローチャート

    フローチャートを以下に示す。また、競技フィールドの右端を0[deg]としてMIRSの角度表示を絶対角度として表す。

    fig.2 競技フィールドとMIRSの基準角度
    MIRS1601の機体は方向転換せずにオムニホイールによって指定した方向へ走行する。便宜上、競技フィールドとMIRS1601の絶対角度を一致させて以下のフローチャートでは方向を指定する。

    fig.3 フローチャート

  6. スレッド構成と走行制御の動作仕様


    fig.4 スレッド構成図
    loopではメインの走行プログラムを実行する。LEDや音楽再生など、別で動作し続ける処理を必要とするモジュールについては、適宜スレッドの生成を行う。

  7. テスト項目

    既存のテストプログラムがあるものは、それを実施する。
    その他のモジュールで第1段階で使用するものについて以下に示す。

    1. モジュール単体試験

      モジュール単体試験では、各モジュールが正常に動作するかを試験する。

      motor

      distance

      uss

      encoder

      omuni_ctrl

      omuni_dist_ctrl

      • オムニホイールを用いた走行制御に関する単体試験を行う。
      • 指定した方向に対してオムニホイールによる走行ができるか確認する。
      • 指定距離または指定した壁との距離まで走行できるか確認する。

      sequence

      • 競技場のスタート位置から数字ボードがあるところまで、確実にたどり着けることを確認する。

      number

      • 数字を正しく認識できることを確認する。
      • 正しく認識できなかったときに、位置を修正することで正しく認識できるようになることを確認する。
      • 数字認識後に、指定した位置に移動することを確認する。

      balloon

      • 画像認識ができるかどうかを確認する。
      • 赤い風船が正しく認識できるかテストする。
      • さまざまな角度や距離でテストを行う。
    2. 機能試験

      機能試験では、一部のモジュールを組み合わせた時に正常に動作することを確認する。

      走行テスト

      • 走行制御(motor,encoder,distance)モジュールの動作を確認する。
      • 追加したomuni_ctrl,omuni_dist_ctrlモジュールの動作を含めて走行テストを行う。
      • 直進、オムニホイールによる走行が安定して行えた場合を合格とする。

      現場急行 と 数字認識

      • sequence と numberを統合して、スタート地点から開始して数字認識を成功させ、展示室に進入できたら合格とする。

      巡回

      • patrolモジュールの巡回機能について確認する。
      • 指定したルートを走行できるかをテストする。

      追跡・確保

      • 怪盗機を追跡できるかを確認する。
      • 赤外線センサを用いて、怪盗機の方向を認識できるか
      • 認識した方向に対して移動することができるかをテストする。
    3. 統合試験

      • 統合試験では、すべてのモジュールを組み合わせて、本番で行う一通りの動作が正常に動作することを確認する。
  8. コーディングルール

MIRS1601ドキュメント管理台帳