名称 MIRS1502 ソフトウェア開発報告書
番号 MIRS1502-SOFT-0002
版数 最終更新日 作成 承認 改訂記事
A01 2016.02.05 飯田峻也、奥一貴、金指真之介、平田和奏 初版

目次

  1. はじめに
  2. プログラム構成
  3. 開発評価
  4. ソースコードへのリンク
  5. 総括

  1. はじめに

    本ドキュメントはMIRS1502ソフトウェア開発報告書である。

  2. プログラム構成

    ディレクトリ名 構成ファイル 概要
    Arduino_MIRSAK1502 Arduinoを使用するにあたり新規作成
    Arduino_MIRSAK1502.ino Arduinoプログラムの本体
    Serial_ctrl.cpp USART通信を司るプログラム
    Ultrasonic.cpp 超音波センサを動作させるプログラム
    compass.cpp 電子コンパスの信号を受信するプログラム
    defines.h すべてのソースファイルの外部定義を行うプログラム
    infrared.cpp 赤外線受信を割り込みで行うプログラム
    mg3s_std_v2.2.0/mg3s_std_v2.2.0
    Makefile 使用するソースファイルの変更に伴う変更
    mirsak_patrol.c 全体のシーケンスを司るメインのモジュール
    mirsak_patrol2.c 電子コンパスを使う直進制御のために、予備として作ったモジュール
    motor.c オムニホイール用に出力を2個追加
    motor.h オムニホイール用に不感帯のPWM値を追加
    motor_stop.c オムニホイール用に出力を2個追加
    number.h
    omni_ctrl.c 進行方向に対して右側の超音波センサの値を読み取り、右側のモータを制御して直進するモジュール
    omni_ctrl.h
    omni_ctrl_number.c 数字認識をしながら直進制御を行うモジュール
    omni_ctrl_tracking.c 赤外線センサの値を読みながら怪盗がいると思われる方向へタイヤをまわすモジュール
    pilot.c
    serial_ctrl.c Arduinoとの通信を行うプログラム
    serial_ctrl.h Arduinoとの通信に必要なグローバル変数等を定義するプログラム
    server_info.c 認識した数字をサーバに送信する
    server_info.h 認識した数字をサーバに送信する
    test.c
    test.h
    test_ir.c 赤外線の受信の確認のテストモジュール
    test_motor.c オムニホイール用に出力を2個追加
    test_omni_ctrl.c omni_ctrlのテストモジュール
    test_pwm.c オムニホイール用に出力を2個追加
    test_serial_ctrl.c Arduinoとの通信のテストモジュール
    test_server_info.c
    vel_ctrl.h
    mg3s_std_v2.2.0/mg3s_std_v2.2.0/Arduino_serial
    Makefile
    serial_main.c
    ttyUSB0.c
    ttyUSB0.h
    mg3s_std_v2.2.0/mg3s_std_v2.2.0/balloon MIRS1402ソフトウェア開発報告書を参照
    MIRS1402ソフトウェア開発報告書
    mg3s_std_v2.2.0/mg3s_std_v2.2.0/number 既存のものと変更した箇所のみを記述する
    number_detect.c 認識する数字の個数を2個から1個に変更

  3. 開発評価

    ・通信モジュール(serial_ctrl) 飯田

    最終的に予定通りの通信を行うことができた。信号に先頭識別子をつけることにより、各フレームの開始を確認させることができた。
    しかし、最終ビットにチェックサムやCRCなどの冗長性を持たせて誤り検出をしていないので、エラーかどうかチェックする環境が整っていなかったのは最終的に追加したかった。今回はなくても正確に動作してくれたが、汎用性や確実性の面から見るとほしい能力であったといえる。

    ・メインモジュール(mirsak_patrol) 金指

    フローチャートどおりにシーケンスを進めることに成功した。
    オムニホイールの特性と、右手法を使った直進制御により、多少シーケンスが狂っても問題なく動くタフな設計ができた。これによって、壁との衝突にも強く、めったな事がない限りはリタイアの心配がなくなった。
    そして、巡回が始まったら赤外線センサの値を読みながら行動し、赤外線センサの値が規定値に近づいたらその方向に向かうようにした。
    しかし、現場急行時の停止時間や、迅速な巡回ルートへの復帰、赤外線センサの判断基準など、まだまだ細かな調整をする必要があったが、とにかく完成が遅く、調整不足のまま競技会に臨む形となってしまったのが心残りである。

    ・走行モジュール(omni_ctrl) 奥

    オムニホイールを採用したことでロータリーエンコーダの個数が足りず、モータの速度制御が行えない不安があった。しかし、test_motorモジュールで確認したところ、2mほどの距離であれば直進走行が行えた。そこで、進行方向に対して右側を向いた超音波センサで壁との距離を取得し、その距離を一定に保つように直進制御した。実際には進行方向に対して右側のモータしか制御していなかったが、現場急行で必要となる5mの直進制御を問題なく行えた。
    斜め移動を実現したかったが、モータの速度制御をしていない状況で4個のモータを指定した出力比にすることは難しく、オムニホイールの各々の形状や取り付け角度の精度が悪かったため、予定していた全方位移動は実現できなかった。

    ・認識モジュール(number) 平田

    数字認識はプレ競技会で使用したプログラムを改良した。
    止まった状態では数字を認識することができたが、走行しながらでは一度も数字を認識することができなかった。理由として考えられるのは、競技会当日までMIRSの機体にカメラが取り付けられていなく実際に動かして動作を確認するということが当日まで無かったことが主であると考えられる。
    風船の認識は、昨年度のプログラムを確認したところ、改良することなく使用することが可能であると判断した。だが、統合が間に合わず、競技会では使用しなかった。

  4. ソースコードへのリンク

    MIRS1502ソースコード ダウンロード

  5. 総括

    競技会では、現場急行を行い、巡回に入ったらしっかりと赤外線センサの値を読みながら行動することで怪盗を捕まえることができた。他班と比べ、赤外線センサを改造したことにより精度がかなりよかったことと、回転の動作がないため確実に怪盗のほうへと向かっていけることが大きかったと考えられる。そのため、警備ロボットとしての動作はできた。しかし、数字認識は2回とも失敗してしまった。原因としては、リトライした際に停止したマスからのスタートをしたため、数字認識を行うシーケンスではなかったからだと考えられる。
    ソフトウェア開発では、gitというバージョン管理システムを使用し開発を行った。衝突したりするなどの問題が発生したが、プログラムを分担して記述することが容易となった等のメリットの方が大きかった。