MIRS1501 管理台帳へ戻る

名称 MIRS1501 ソフトウェア開発報告書
番号 MIRS1501-SOFT-0002
版数 最終更新日 作成 変更点 承認 改訂記事
A01 2015.2.8 河合将和・高橋元太・中村勇吾 初版
A02 2015.2.25 河合将和・高橋元太・中村勇吾 レビューで指摘された点を変更 牛丸 第2版

目次


  1. はじめに


    本ドキュメントはMIRS1501のソフトウェア開発が完了したことを記すドキュメントである。


  2. 使用した競技会プログラム


    MIRS1501が作成したプログラムの構成概要を以下の表にまとめる。
    使用した競技会プログラム
    ディレクトリ名 構成ファイル 概要
    ルート
    Makefile プログラムをコンパイルするためのファイル./pirotで全体のプログラムを実行する。
    device.c 標準ソフトウェアにarduinoを追加した。
    direction.c 標準ソフトウェアに準拠した。
    distance.c 標準ソフトウェアに準拠した。
    encoder.c 標準ソフトウェアに準拠した。
    infrared.c arduinoとの通信をする。
    io.c 標準ソフトウェアに準拠した。
    mirsak_chase.c 怪盗追跡、確保のためのモジュール
    mirsak_demo.c 現場急行のためのモジュール
    mirsak_patrol.c 巡回のためのモジュール
    motor.c 標準ソフトウェアに準拠した。
    motor_stop.c 標準ソフトウェアに準拠した。
    pilot.c 標準ソフトウェアにarduinoのデバイスopen,close、スレッド、mirsac_*.cの追加を行ったもの。
    run_ctrl.c 標準ソフトウェアにYUGOカーブを追加、パラメータを調整した。
    server_info.c 標準ソフトウェアに準拠した。
    test.c 単体機能を複数用いたテストを行う場合に用いるmain関数が記してある。
    test_dir_num.c 標準ソフトウェアに準拠した。
    test_direction.c 標準ソフトウェアに準拠した。
    tes_distance.c 標準ソフトウェアに準拠した。
    test_encoder.c 標準ソフトウェアに準拠した。
    test_io.c 標準ソフトウェアに準拠した。
    tes_motor.c 標準ソフトウェアに準拠した。
    tes_number.c 標準ソフトウェアに準拠した。
    test_pwm.c 標準ソフトウェアに準拠した。
    test_pwm_vel.c 標準ソフトウェアに準拠した。
    test_run_ctrl.c 標準ソフトウェアに準拠した。
    test_uss.c 標準ソフトウェアに準拠した。
    uss.c 標準ソフトウェアに準拠した。
    uss_serial.c 標準ソフトウェアに準拠した。
    vel_ctrl.c 標準ソフトウェアに準拠した。
    device.h 標準ソフトウェアに準拠した。
    direction.h 標準ソフトウェアに準拠した。
    distance.h 標準ソフトウェアに準拠した。
    encoder.h 標準ソフトウェアに準拠した。
    hardware.h 標準ソフトウェアに準拠した。
    infrared.h 赤外線を使用する際のextern宣言
    io.h 標準ソフトウェアに準拠した。
    mirsak.h 標準ソフトウェアに準拠した。
    motor.h 標準ソフトウェアに準拠した。
    number.h 標準ソフトウェアに準拠した。
    patrol_sequence.h 標準ソフトウェアに準拠した。
    run_ctrl.h 標準ソフトウェアに準拠した。
    server_info.h 標準ソフトウェアに準拠した。
    test.h 標準ソフトウェアに準拠した。
    uss.h 標準ソフトウェアに準拠した。
    vel_ctrl.h 標準ソフトウェアに準拠した。
    Makefile プログラムをコンパイルするためのファイル。
    motor_stop 標準ソフトウェアに準拠した。
    pilot 標準ソフトウェアに準拠した。
    test 標準ソフトウェアに準拠した。
    img
    *.jpg 数字認識のプログラムでキャプチャした画像の保存場所
    number
    binarization.c 標準ソフトウェアに準拠した。
    define.h 標準ソフトウェアに準拠した。
    extern.h 標準ソフトウェアに準拠した。
    get_img.c 標準ソフトウェアに準拠した。
    labelling.c 標準ソフトウェアに準拠した。
    number_detect.c 標準ソフトウェアに準拠した。
    number_search.c 標準ソフトウェアに準拠した。
    number_test.c 標準ソフトウェアに準拠した。
    triming.c 標準ソフトウェアに準拠した。
    Makefile 数字認識の単体試験を行うためのMakefile。
    back
    *.back バックアップデータ。
  3. 製作内容・完成度の評価


    1. 現場急行プログラム(高橋)


      内容 : スタート地点から数字ボード前までをYUGOカーブを用いて走行する。

      テスト結果 : 最適なパラメータなら安定して現場急行ができることを確認した。

      問題点:毎回最適なパラメータに調整しないとバッテリーの残量に応じてYUGOカーブの曲がる量が変わってしまうため、不安定要素が残ってしまった。

    2. 巡回プログラム(河合)


      内容 :直進して90度回転を行うシーケンスを組み、それをループさせることで巡回を行う。
      また、ループに赤外線の値を読み込んだ時、ループを抜けプログラムを終了させる。

      テスト結果 : 
      しっかりとフィールドを一周することができた。
      また、赤外線のデータを取得したら、モーターを停止させループを抜けることも確認できた

      出来た点:単体テストでは、しっかり一周することができたこと。
      問題点:統合試験をしたときにうまく回転をしなかった時があった。競技会までこれの原因がわからなかった。競技会が終わった後考えた結果、現場急行を行う際にYUGOカーブを使用していてそのとき、run_ctrlのほうで、減速をさせないようにしていた。これが巡回の際の曲がらない原因になったと考える。

    3. 怪盗機確保プログラム(河合・中村)


      内容 :確保プログラムでは、シーケンスを使わず直接mirsac_chaseの方で、取得した赤外線のデータを元に直進、回転を行い怪盗機を確保する。

      テスト結果 :
      7個ある赤外線センサのすべてがしっかりとデータを取得し、赤外線ボールのある方へ直進や回転を行い追跡することが出来た。


      出来た点:しっかりと赤外線を反応し追跡を行うことが出来た。

      問題点 : 一つ一つの動作が遅かったため、競技会で怪盗機を確保するのには至らなかった。 デバックする時間が足りず、実際に怪盗機を動かした状態でテストできなかったのがいけなかったと考える。

    4. 数字認識プログラム(高橋)


      内容 : 数字ボードに表示されている数字を認識する。本番では、走りながら数字認識するほうを使用した。

      【停止して数字認識】

      テスト結果 : 数字認識できることを確認した。

      数字ボードにたどり着くことができれば、ほぼ確実に数字認識できた。


      【走りながら数字認識】

      テスト結果 : 走りながら数字認識できることを確認した。

      画像内に数字が写っていれば、確実に数字認識できるようにすることができた。



    5. CPU-Arduino間のシリアル通信プログラム(中村・高橋)


      内容 : MIRS側から通信開始を示す信号を送りAduinoからMIRSへ最も強い反応があったポートと電圧の大きさを0〜1023の間で送信する。
      製作の経過:C言語応用で習ったように低水準入出力のopen、read、write、closeを使って通信しようと試みたが、うまくいかない。Arduino側にはシリアル通信の電圧の状態がわかるTX端子とRX端子があるので、オシロスコープで通信内容を理解するところからはじめた。 Web等で調べていくうちに通信前に1秒ほど時間を空けると通信できるという記事を見つけ、一応の通信が成功した。しかし、毎回うまくいくとは限らず、ArduinoIDEをインストールし、デバイスドライバをインストールした。
      テスト結果 : Arduinoで送信するデータを決定しておき、MIRSが受け取った内容と一致するか確認できた。
      評価 :
      • 出来たこと
      • 実際にCPUとArduino間で通信ができ、本番でも活用することができた。
      • 出来なかったこと
      • 電源を投入した直後はArduinoに対する送信は出来ても受信が出来ないというバグを直すことが出来なかった。応急処置として電源を投入する度にArduinoIDEのシリアルモニタを起動し、通信できることを確認した。原因はバッファにデータが異常に溜ってしまうことが原因らしいが、詳しいことはまだわかっていない。
    6. 赤外線認識プログラム(中村)


      内容 : 赤外線ボールをMIRSに近づけ、適したポート番号と電圧レベルを表示する
      テスト結果 : 赤外線センサの可変抵抗を調整することによって正しい結果が出るようになったが、赤外線センサの高さとボールの高さがずれていた場合、うまく反応しないことがあった。
      評価 :
      • 出来たこと
      • きちんと最も赤外線ボールに近い赤外線センサの番号とその強さが送られてきた。赤外線ボールを赤外線センサとほぼ同じ高さにおいた場合、展示室の対角線上(約5.5m)に配置しても有意な反応が得られた。
      • 出来なかったこと
      • CPU-Arduino間のシリアル通信プログラムで通信がスムーズに行かなかったので、結果、赤外線の認識もスムーズに行かなかった。
    7. 怪盗機赤色認識プログラム(中村)


      内容 :
      画像をuvccaptureで撮影し、それを読み込むことで画像認識する。方法としては入力画像をRGB色空間からHSV色空間へ変換し、各要素に分割する。風船の赤に近い色相と彩度をの範囲を抽出し、AND処理をする。 それからOpening/Closing処理をし、画像を滑らかに加工する。
      テスト結果 :
      以下に10通りのパターンを表示する。これらの画像を撮影するために以下に示すカメラとソフトウェアを使用した。画像の中の黒い点が認識した赤い領域の重心点である。
      ・使用カメラ…Logicool HD WEBCAM C270(720p)

      *下の画像の使用撮影ソフト…Windows付属アプリ"カメラ"、CyberLink YouCam BE
      すべての画像を保存する : 画像をダウンロード
      • 出来たこと
      • 精度よく、風船の赤色を認識するプログラムを作成できた。
      • 出来なかったこと
      • 時間がなく、MIRS本体に実装できなかった。よってまだ致命的なバグが残されている可能性がある。
      • 追記(2016/12/15)
      • 肝心のプログラムを公開していなかったことに最近気が付きました。コメントを付け直して公開します。
        プログラムをダウンロード
  4. 【全体の完成度の評価】
    各モジュールの単体での動作は比較的よかったが、統合後に調整すべき箇所を見落としていたため、競技会では「全クリ」を達成することができませんでした。
    ArduinoとCPU間のシリアル通信問題に時間をとられ、YUGOカーブの不安定要素に最後まで悩まされ、もっと時間を有効に活用できていれば、理想の動きをさせることができたかもしれません。
    しかし、1班独自の動作を競技会で見せることができたので、その点はよかったと思います。

    MIRS1501が作成した競技会プログラムを以下にて配布する。

    是非、参考にしていただけると光栄です。



  5. 総括


    MIRS1501のソフトウェア開発では分担して作業を行い、効率的に開発を行うことが出来た。
    また、ボードやケーブルの不具合やarduino-CPU間の通信が思うようにいかず、たくさんの時間を費やしてしまった。そして、デバックに十分な時間が取れなかったのが原因になってしまったと思う。
    しかしソフトウェア開発では、班員みんなが実現したいといっていた内容を実現でき、追跡も出来たのでよかったと思う。

MIRS1501ドキュメント管理台帳