MIRS1404 管理台帳へ戻る

名称 MIRS1404 MIRS1404 ソフトウェア詳細設計書
番号 MIRS1404-SOFT-0001
版数 最終更新日 作成 変更点 承認 改訂記事
A01 2014.12.1 石井 建至 ・ 加藤 慶悟 初版
A02 2014.12.10 石井 建至 ・ 加藤 慶悟 各フローチャートの変更
関数レファレンスの変更
大林先生 第2版

目次


  1. はじめに


    本ドキュメントは、MIRS1404ソフトウェアの詳細設計について記したドキュメントである。
  2. 動作シナリオ


    以下に動作シナリオを示す。
    1. 発進
      MIRSにリプを送るか、スタートボタン(タッチセンサ)を押すと発進することを考えている。

    2. 宝の巡回
      30秒以内に一つ目の小部屋に入り宝を確認する。1分以内に二つ目の宝を確認する。
      この際、小部屋へ侵入したかどうかは、左右の超音波センサの測定距離により判別する。

    3. 怪盗侵入
      宝の巡回を終了、または怪盗侵入の情報を受け取ったら、フィールドの中央まで移動し、怪盗確保に専念する。

    4. 怪盗認識
      中央で回転しながら、360度を警戒する。
      風船の色により怪盗の確認を行う。
      発見したら怪盗に突進する。

    5. 射出機構
      怪盗に5[cm]程度まで近づいたと判断したら、針を射出する。

  3. フローチャート


    以下に主要なプログラムのフローチャートを示す。
    1. main関数


       競技がスタートしたら目標1分以内に宝を2個以上確認を目標とし、怪盗確保に専念する。
      もし、宝を確認中に約1分経過したら強制的に怪盗確保のモードに移るようにする。
      その際、時間はタイマー計測のモジュールにより競技時間5分を計測し続け、時間経過により行動を変化させていく。

      説明文を記入


    2. 怪盗機画像処理


       このプログラムは怪盗発見をするための関数であり、数字認識のプログラムはサンプルプログラムをそのまま流用する。
      怪盗機は赤い風船であるから撮った写真の中から赤色を抽出かつ円形を検出する。
      対象とする画像(風船)と背景画像を切り離すという処理を簡単に行うために画像の2値化処理もさせる。
      検出した円の半径の情報から怪盗との距離を算出する。
      怪盗は当然のことながら動いているので撮影する写真数を2枚にし、円の重心位置のズレにより怪盗が動く方向を推定する。

      怪盗確認の画像処理


    3. 射出機構の動作


       PWM制御によりモータの出力を定め、モータを動かす時間で機構をどのくらい出すかを定める。
      この関数はArduinoを用いて動作させるため、Arduino言語を用いてプログラムを記述する。
      射出機構は画像処理と並列に動作しており、怪盗との距離が近くなったら機構を出す。機構を出している状態で再度画像処理を行い、怪盗がいない場合は機構をしまうようにする。

      MIRS側で射出機構
      MIRS側での射出機構





      MIRS側で射出機構
      射出機構(発射)関数(Arduino)





      MIRS側で射出機構
      射出機構(収納)関数(Arduino)



    4. 目的地までの走行を行う関数


      今回の競技において巡回はシーケンス制御にて行い、そのルートを下図に示す。

      目的地までの走行を行う関数

      概要としては中央左端にあるスタート地点に気体を3番の小部屋の方向を向くように配置し、上図の青い数字(以下シーケンス番号と表記する。)の矢印を1から順番に進んでいく。
      尚、シーケンス番号1番及び6番の手前でランドマークの検出を行い、その結果をエラーチェックに用いる。またシーケンス番号3番及び7番の手前で宝のダイレクションボードの数字認識を行う。


  4. 関数レファレンス



    競技会攻略にむけたプログラムの関数レファレンスを以下に示す。

    1. 目的地までの走行を行う関数


      straight_block
      関数名 straight_block
      定義ファイル名 run_sequence.c
      書式 straight_block(double)
      機能 引数で渡された値[cm]だけ走行を行う。
      引数 double型にて定義する。
      戻り値 void型のため特に戻り値は返さない。
      rotate_block
      関数名 rotate_block()
      定義ファイル名 run_sequence.c
      書式 rotate_block(double)
      機能 引数で渡された値[deg]だけ時計回りの回転を行う。
      引数 double型にて定義する。
      戻り値 void型のため特に戻り値は返さない。
    2. Twitter機能


      tweet_t
      関数名 tweet_t()
      定義ファイル名 twitter.c
      書式 tweet_t(int num)
      機能 文字列をtwitterサーバーのJSONにpostする。
      引数 int型の変数numを用いる。この引数の値によって、ツイートする内容の書かれたソースファイルを選定する。
      戻り値 int型にて正常終了の場合に0,異常終了の場合に-1を呼び出し元の関数に返す。
      tweet_f
      関数名 tweet_f()
      定義ファイル名 twitter.c
      書式 tweet_t(int num)
      機能 文字列を及び画像をtwitterサーバーのJSONにpostする。
      引数 int型の変数numを用いる。この引数の値によって、ツイートする内容及びアップロードする画像を示したソースファイルを選定する。
      戻り値 int型にて正常終了の場合に0,異常終了の場合に-1を呼び出し元の関数に返す。
    3. 風船の画像処理


      baloon_direct
      関数名 baloon_direct()
      定義ファイル名 baloon_direct.c
      書式 baloon_direct()
      機能 怪盗機についている風船の赤色を判別することで怪盗がいるかどうかを判断する。また、怪盗までの距離の算出
      引数 引数なし
      戻り値 int型を用いる。画像処理成功のとき"1"、画像処理失敗のとき"-1"を返す。
      baloon_way
      関数名 baloon_way()
      定義ファイル名 baloon_way.c
      書式 baloon_way()
      機能 怪盗機の移動方向の推定
      引数 引数なし
      戻り値 int型を用いるが返り値はなし。
      baloon_get
      関数名 baloon_get()
      定義ファイル名 baloon_get.c
      書式 baloon_get()
      機能 処理した画像を取得する。
      引数 引数なし。
      戻り値 void型を使い、引数はとらない。
    4. 射出機構



      Arduinoで作る関数の一つである。
      スレッド処理にはしない。

      pair_eyes_go
      関数名 pair_eyes_go()
      定義ファイル名 Arduinoのsource
      書式 arduino(int pair_go,int pair_back,int sound,int led)
      機能 射出機構を発射する。
      引数 int型の変数pair_goを用いる。pair_goに"1"が入ったらpair_eyes_go()を実行させる。
      戻り値 void型を使い、引数はとらない。
      pair_eyes_back
      関数名 pair_eyes_back()
      定義ファイル名 Arduinoのsource
      書式 arduino(int pair_go,int pair_back,int sound,int led)
      機能 射出機構を収納する。
      引数 int型の変数pair_backを用いる。pair_backに"1"が入ったらpair_eyes_back()を実行させる。
      戻り値 void型を使い、引数はとらない。
    5. 音声



      Arduinoで作る関数の一つである。

      sound
      関数名 sound()
      定義ファイル名 Arduinoのsource
      書式 arduino(int pair_go,int pair_back,int sound,int led)
      機能 MIRSがアクションしたことをお知らせする。
      引数 int型の変数soundを用いる。soundに"1"が入ったらsound()を実行させる。
      戻り値 void型を使い、引数はとらない。
    6. LED装飾



      Arduinoで作る関数の一つである。

      led_pikapika
      関数名 led_pikapika()
      定義ファイル名 Arduinoのsource
      書式 arduino(int pair_go,int pair_back,int sound,int led)
      機能 MIRSが実況中継する。
      引数 int型の変数ledを用いる。ledに"1"が入ったらled_pikapika()を実行させる。
      戻り値 void型を使い、引数はとらない。
  5. グローバル変数一覧


    表2 グローバル変数一覧
    型名 変数名 変数概要 宣言ファイル名
  6. ソフトウェアライセンス


    MIRS1404が作成したソースコードをMIT_Licenseの下、archive_data_format(.zip)にて頒布する。(予定) MIRSAK1404.zip





MIRS1404ドキュメント管理台帳