名称 MIRS1603 ソフトウェア詳細設計書
番号 MIRS1603-SOFT-0001
版数 最終更新日 作成 変更点 承認 改訂記事
A01 2016.12.09 石田智士、遠藤大河、橋本宗汰郎 初版
A02 2016.12.16 石田智士、遠藤大河、橋本宗汰郎 レビューで指摘された点を修正 承認 第二版

目次

  1. はじめに
  2. モジュール構成
  3. モジュール一覧
  4. モジュール詳細
  5. 機能概要
  6. フローチャート
  7. スレッド構成
  8. テスト項目
    1. 機能試験
    2. 統合試験
  9. コーディングルール

1.はじめに

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

2.モジュール構成

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

fig.1 モジュール構成

3.モジュール一覧

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

全体のモジュール一覧
モジュール名 機能概要 開発要素 開発・改良概要 担当者
pilot MIRS1603の動作全体を制御する 新規作成 現場急行・数字認識、巡回、怪盗機確保の3状態の制御を行う 橋本
device デバイスファイルを Open/Closeする 改良 エンコーダに関する部分を削除する 遠藤
mirsak_* 動作に応じたモジュールを作成する 新規作成 現場急行・数字認識、怪盗機発見、怪盗機確保の3状態に対応したモジュールを作成する 下表参照
comm 数字認識で得たデータをサーバーに送信する 既存 - -
io ON/OFF IOデバイスのデータを読む 既存 - -
number 数字認識を行う 既存 - -
run_ctrl 直進・回転の制御を行う 新規作成 超音波センサとジャイロセンサを用いた走行制御に変更する 橋本、遠藤
direction 正対補正を行う 改良 超音波センサによる走行制御への対応 遠藤
motor モータを動かす 既存 - -
state 機体の状態を管理する 新規作成 serial_ctrlからの値を用いて機体の傾き、道の中心からのずれなどを算出する 橋本、石田
serial_ctrl CPU-Arduino間のシリアル通信を行う 新規作成 CPU-Arudino間のUSBポートを通じたシリアル通信を管理する 遠藤、石田
device_ctrl Arduinoに接続センサ類を管理する 新規作成 Arudinoに接続されるジャイロセンサ、超音波センサ、赤外線センサを制御しserial_ctrlにデータを渡す 石田
gyro ジャイロセンサの信号を処理する 新規作成 ジャイロセンサから取得される角加速度を角度に変換する 石田
uss 超音波センサの信号を処理する 新規作成 超音波センサから取得される計測時間を距離に変換する 石田
infrared 赤外線センサの信号を処理する 新規作成 赤外線センサの反応を監視する 石田
Mirsak_*の一覧
モジュール名 機能 機能概要 改良する点 担当者
mirsak_rush 現場急行・数字認識 直進走行と回転動作を使って、数字ボードがあるところまで走行する シーケンス内容の変更 橋本
mirsak_patrol 巡回 展示室内を周回運動し、怪盗機を探す シーケンス内容の変更 石田
mirsak_chase 怪盗機確保 赤外線センサからの情報を元に怪盗を追跡し、確保する 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する関数を追加する 遠藤

4.モジュール詳細

使用するモジュールの仕様について示す。
参考:MG3S 標準プログラム 関数レファレンス

run_ctrl
関数名 引数 戻り値 機能
void run_ctrl_create() なし なし 走行制御スレッドを生成する
void run_ctrl_cancel() なし なし 走行制御スレッドをキャンセルする
void run_ctrl_stop() なし なし 機体を停止する
int run_ctrl_get_endflag() なし 走行終了のフラグ 走行終了のフラグを取得する
void run_ctrl_set(int mode,float speed) 走行モード、距離[m]または角度[deg] なし 走行モードと壁との距離または回転角度をセットする
serial_ctrl
関数名 引数 戻り値 機能
void serial_ctrl_create() なし なし Arduino管理スレッドを生成する
void serial_ctrl_cancel() なし なし Arduino管理スレッドをキャンセルする
int serial_ctrl_infoget() なし 回転角度、超音波の計測結果、反応のあった赤外線ポート番号 Arduinoデバイスのディスクリプタ番号を取得する
gyro
関数名 引数 戻り値 機能
int gyro_get() なし 角度[deg] 回転角度を計測する
void gyro_clean() なし なし 回転角度を初期化する
uss
関数名 引数 戻り値 機能
int uss_get(int uss_port) センサ番号 計測距離[cm] 指定した超音波センサで距離を計測する
infrared
関数名 引数 戻り値 機能
int infrared_get(int infrared_port) センサ番号 反応の有無 赤外線の反応があった場合1、なかった場合0を返す

6.フローチャート

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

fig.2 フローチャート

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

以下の5つのスレッドが動作する。

  1. pilot : メインスレッド。デバイスをオープンする。run_ctrl、state、serial_ctrlスレッドを生成する。
  2. run_ctrl : 一定周期で直進・回転制御を行う。全体の動作シーケンスの途中で必要になった場合に生成され、その制御を完了するとキャンセルする。
  3. state : 一定周期で機体の傾き、道の中心からのずれなどを算出する。
  4. serial_ctrl : 一定周期でArduinoと通信を行い、ジャイロセンサ、超音波センサ、赤外線センサのデータを取得する。
  5. mirsak_patrol : 巡回動作を行う

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

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



fig.3 スレッド構成

8.テスト項目

8.1.機能試験

今回のプログラムの機能試験の内容を以下に示す。
既存のテストプログラムがあるものは、それを実施する。

機能試験内容一覧
モジュール名 テスト内容 備考
pilot 統合試験の際に正常に動作をするかを確認する
direction 正対補正が正常に行われるか確認する
run_ctrl 走行制御が仕様の通りに行われるか確認する
state Arduinoから送られてくる値が仕様の通りに処理されるかを確認する
serial_ctrl シリアル通信において正常に受信することができるかを確認する
device_ctrl 仕様通りにデバイスからの値を処理することができるかを確認する
uss 超音波センサが正常に測定を行うかを確認する
gyro ジャイロセンサが正常に測定を行うかを確認する
comm server_info_send_test.cを使用してサーバ通信の動作を確認する
infrared 赤外線センサが正常に測定を行うかを確認する

8.2.統合試験

競技会での各状態でのプログラムの統合試験の内容を以下に示す。
また、各モジュールごとの統合試験が完了し次第pilotを使用して競技会全体の動作を確認する。

統合試験内容一覧
モジュール名 テスト内容 備考
mirsak_rush 0.5m幅のフィールドを4.5m直進することができる
90°回転することができる
数字ボードと0.7mの距離を保つことができる
正対補正をすることができる
数字認識をし、サーバに送信することができる
mirsak_patrol 両側の壁との距離を0.75mに保ちながらフィールドを巡回できる
mirsak_chase 怪盗機の方向に回転できる
怪盗機に接触するまで直進できる
巡回ルートに復帰できる

9.コーディングルール


MIRS1603ドキュメント管理台帳