名称 | MIRS1601 ソフトウェア開発完了報告書 |
---|---|
番号 | MIRS1601-SOFT-0002a |
最終更新日:2017.2.8
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2017.2.8 | 久保寺 智哉 | 初版 |
本ドキュメントは、MIRS1601のソフトウェア開発が完了したことを記すドキュメントである。
MIRS1601が作成したプログラムファイルの一覧を以下に記す。
ファイル名 | 概要 |
---|---|
cpu.ino | cpuとの通信を行うプログラム |
distance.ino | 標準ソフトウェアをオムニホイールに対応する形で改良したプログラム |
encorder.ino | 標準ソフトウェアをオムニホイールに対応する形で改良したプログラム |
mirs1601_main.ino | 全体の動きを統括 |
motor.ino | 標準ソフトウェアをオムニホイールに対応する形で改良したプログラム |
omuni_ctrl.ino | オムニホイールで走行する為のプログラム |
sequence.ino | 現場急行を行うプログラム |
test.ino | モジュールのテストを行うプログラム |
define.h | ピン配置・include・パラメーターの設定を行う |
ディレクトリ名 | 構成ファイル | 概要 |
---|---|---|
ルート | ||
Makefile | プログラムコンパイル用ファイル pilot、test、mirs_stopの生成をする | |
comm.c | 標準ソフトウェアに準拠 | |
cv_ColorExtraction.c | 2015年度スタッフドキュメント、MIRS2015赤色風船認識プログラムを使用 | |
get_image_target.c | ||
image_circle.c | ||
test_iamge_circle.c | ||
image_circle.h | ||
mirs_stop.c | Arduino Dueへプログラム停止命令を送信するプログラム | |
pilot.c | CPU側の動作の記述 | |
serial_cpu.c | CPU-Arduino間の通信制御プログラム | |
test.c | 不要となったテストモジュールを消し、新たにtest_image_circleを追加 | |
test_comm.c | 標準ソフトウェアに準拠 | |
test_number.c | 標準ソフトウェアに準拠 | |
comm.h | 標準ソフトウェアに準拠 | |
hardware.h | デモ競技会プログラムから修正なし | |
number.h | number_detect関数の変更に伴う外部定義の変更 | |
serial_cpu.h | serial_cpuモジュールに必要な定数と外部定義を記述 | |
img | ||
*.jpg | 数字認識のプログラムでキャプチャした画像の保存場所 | |
number | ||
binarization.c | 標準ソフトウェアに準拠 | |
define.h | 標準ソフトウェアに準拠 | |
extern.h | 標準ソフトウェアに準拠 | |
get_img.c | 標準ソフトウェアに準拠 | |
labelling.c | 標準ソフトウェアに準拠 | |
number_detect.c | number_detect関数の引数を増やし、カメラ番号の選択をできるようにした | |
number_search.c | 標準ソフトウェアに準拠 | |
number_test.c | 標準ソフトウェアに準拠 | |
triming.c | 標準ソフトウェアに準拠 | |
Makefile | 数字認識の単体試験を行うためのMakefile |
以下に示すモジュールのうち、項目5がCPU側で、それ以外はArduino側に実装したモジュールである。
内容:超音波センサを用いて目標とする壁までの距離を測定し、エンコーダを用いて走行距離を測定、それぞれの差から調整してオムニホイールにて直進走行を行う。実際の競技では、最初の直進走行から数字認識の前までの走行に使用した。
テスト結果:左右の壁の距離を測り、ぶつかることなく目標とした正面の壁まで直進できた。
問題点:走行中に機体の向きが変わってしまい、壁際まで進んだ後、左右へ進むときに壁にぶつかってしまった。
内容:エンコーダを用いて走行距離を計測し、オムニホイールにて直進走行を行う。実際の競技では、数字認識後に展示室に入る時の走行に使用した。
テスト結果:指定した距離だけ走行することができ、過不足なく目標位置まで走行できた。
問題点:こちらもゲイン調整が不十分であったため走行中に機体の向きが変わってしまい、次の走行への影響が出た。
内容:Arduinoのライブラリとして実装し、Arduinoに接続された超音波センサで壁までの距離を測る。
テスト結果:5~150[cm]の間で、誤差5%以内に収まっていたことを確認した。
問題点:特になし。
内容:Arduino-CPU間のデータ送受信用のモジュールで、Arduino側で用意されているSerial関数系によって通信を制御する。
テスト結果:通信できることを送信、受信ともに確認した。
問題点:特になし。
内容:Arduino-CPU間のデータ送受信用のモジュールで、termiosによって通信を制御する。
テスト結果:通信できることを送信、受信ともに確認した。
問題点:特にないが、USBポートを1つに決めずにテストを行った時に、CPU側でデバイスファイルを毎回選択する羽目になった。
内容:スタートから数字ボードまで走行し、数字認識後、フィールドに入る。
テスト結果:壁からの距離を一定にするように走行した。
問題点:Arduinoで制御する関係上、1ループの秒数が正確に測定できず、プログラム内で機体の速度を割り出すことができなかった。そのため、左右のホイールの走行距離から機体の直進制御をするようにしたが、機体が重く、低いPWMではホイールがうまく回転しない等の問題によって、うまくゲイン調整がしきれなかった。
MIRS1601が作成したプログラムのリンクを以下に示す。
なお、Arduino Dueに実装したプログラムは、ファイルへのリンクではなくGitHubへのリンクである。
CPUボード側プログラム(mirs1601_programs.tar.gz)
Arduino側プログラム(GitHubへのリンク)
プログラム自体は早い時期から出来つつあったが、機体完成、回路完成が共に大きく遅れたため、十分なテストが行えなかった。また、機体速度が正確に出ないという問題に気づくのもかなり遅い時期で、競技会まで時間があまりない中、大幅な変更をすることを余儀なくされた。
全体として、不十分な箇所が多く、もう少し確実にバグ等をつぶしていければよかったと思う。