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

最終更新日:2015.12.14

版数 最終更新日 作成 変更点 承認 改訂記事
A01 2015.12.11 河合将和・高橋元太・中村勇吾 初版
A02 2015.12.14 河合将和・高橋元太・中村勇吾 レビューで指摘された箇所の変更 第2版
A03 2015.12.14 河合将和・高橋元太・中村勇吾 レビューで指摘された箇所の変更 牛丸先生 第3版

目次

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

1.はじめに

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

2.モジュール構成

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

fig.1 モジュール構成

3.モジュール一覧

モジュール一覧を以下に示す。

全体のモジュール一覧
モジュール名 機能 開発要素 使用段階 担当者
pilot MIRSの動作全体を制御する。 mirsak_*モジュール全てを統括する。 第1段階 -
mirsak_* 動作シーケンスを管理する。 動作に応じたモジュールを作成する。 第1段階 下表参照
device デバイスファイルを Open/Close する。 Arduinoを追加する。 第1段階 中村
io ON/OFF IOデバイスのデータを読む。 既存のものを使用する。 第1段階 -
infrared Arduinoと通信を行う。 新規に作成する。 第1段階 中村
revise 位置補正をを行う。 新規に作成する。 第2段階 -
search 赤色認識を行う。 新規に作成する。 第2段階 -
number 数字認識を行う。 距離に応じてパラメータを変更する。 第1段階 高橋
run_ctrl 直進・回転・YUGOカーブを行う。 精度を向上させる。 第1段階 高橋
vel_ctrl モータの速度制御を行う。 既存のものを使用する。 第1段階 -
position 位置情報を管理する。 新規に作成する。 第2段階 -
distance 走行距離を管理する。 既存のものを使用する。 第1段階 -
uss 超音波計測を行う。 精度を向上させる。 第2段階 -
encoder エンコーダ値を管理する。 既存のものを使用する。 第1段階 -
motor モータを動かす。 既存のものを使用する。 第1段階 -
mirsak_*の一覧
モジュール名 機能 概要 改良する点 担当者
mirsak_demo 現場急行 直進走行とYUGOカーブを用いて、数字ボードがあるところまで走行する。 シーケンス内容の変更 高橋
mirsak_num 画像処理 現場急行時、数字認識の画像処理を行う。 認識距離によるパラメータの変更 高橋
mirsak_patrol 巡回 展示室内を周回運動し、怪盗機を探す。 シーケンス内容の変更 河合
mirsak_chase 怪盗機確保 赤外線センサからの情報を元に怪盗を追跡し、確保する。 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する関数を追加する 中村・河合

4.モジュール詳細

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

device
関数名 引数 戻り値 機能
int device_arduino_open() なし なし Arduinoデバイスをオープンする
int device_arduino_close() なし なし Arduinoデバイスをクローズする
int device_arduino_get() なし なし Arduinoデバイスのディスクリプタ番号を取得する
infrared
関数名 引数 戻り値 機能
void infrared_create() なし なし 赤外線データ処理スレッドを生成する
void infrared_cancel() なし なし 赤外線データ処理スレッドをキャンセルする
void infrared_get() (int *)赤外線センサのポート番号 、 (int *)赤外線の強さ なし 赤外線センサのポート番号と赤外線の強さを得る
int infrared_run_set() (int *)走法 、 (float *)走行量 、 (int *)赤外線センサのポート番号 、 (int *)赤外線の強さ なし 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する

6.フローチャート

フローチャートを以下に示す。

fig.2 フローチャート

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

7.1.スレッド構成

第1段階では、以下の5つのスレッドが動作する。

  1. pilot : メインスレッド。デバイスをオープンする。encoder、vel_ctrl、infraredスレッドを生成する。
  2. encoder : 一定周期でエンコーダ値を取得し、エンコーダのカウンタをリセットする。
  3. vel_ctrl : 一定周期でモータの速度制御を行う。
  4. infrared : 一定周期でArduinoと通信を行い、赤外線センサのデータを取得する。
  5. run_ctrl : 一定周期で直進・回転またはYUGOカーブ制御を行う。全体の動作シーケンスの途中で必要になった場合に生成され、その制御を完了すると消滅させられる。

メインスレッド以外のスレッドは、20ms周期でloop処理を行い、優先度を20に設定する。

上記のスレッドの動作の関連をシーケンス図に示す。



fig.3 スレッド構成

7.2.走行制御の動作仕様

全体の動作シーケンスを管理するモジュール(mirsak_*)が、走行制御が必要になったところで、走行制御モジュールに対して走行モード(直進,回転,YUGOカーブ)と速度の指定を行い、走行制御(run_ctrl)スレッドを生成する。

走行制御スレッドは、全体の動作シーケンスの途中で必要になった場合に生成され、左右のタイヤの回転距離から、直進・その場回転またはYUGOカーブに必要な左右のモータの速度指定値を計算し、その指令値を速度制御モジュールに送る。

以下にその様子をシーケンス図で示す。


mirsak_*はctrl_endflagが1になるのを待って、走行制御スレッドをキャンセルする。



fig.4 走行制御の動作仕様

8.テスト項目

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

  1. モジュール単体試験

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

    mirsak_demo

    mirsak_num

    mirsak_patrol

    infrared

    mirsak_chase


  2. 機能試験

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

    現場急行 と 数字認識

    巡回 と 赤外線認識 と 追跡・確保


  3. 統合試験

    統合試験では、すべてのモジュールを組み合わせて、本番で行う一通りの動作が正常に動作することを確認する。
    この試験の合格をもって、第一段階のプログラムを完成とする。

9.コーディングルール


MIRS1501ドキュメント管理台帳