目次
1. 本ドキュメントについて2. プログラム説明
3. 関数 4. 問題点
1. 本ドキュメントについて
- 本ドキュメントでは、通路走行プログラム(labylinth.c)とその主な部分である以下の4種類の走行プログラムについて説明する。
- @競技開始時&障害物通過後から、DBまでの走行。
- ADBでの数字認識後から、ロータリまでの走行。
- BDBでの数字認識後から、小部屋までの走行。
- CDBでの数字認識後から、次のDBまでの走行。
2.プログラム説明
<プログラム@>
- 通路を走行しながらDBを探す。
<プログラムA>
- DBでの数字認識後、ロータリへ向かう場合のプログラム。ロータリに完全に入るまで走行する。
ロータリに入ったことを判断するために、正面のTSと左右のUSSを使う。
ロータリの中心には柱が立っている。まずこの柱にぶつかり、その後左右のUSSによって
左右両方に壁がないことを確認できたら、ロータリに完全に入ったと判断する。
<プログラムB>
- DBでの数字認識後、小部屋へ向かう場合のプログラム。ロータリに完全に入るまで走行する。
小部屋に完全に入ったことを判断するために、MIRSに搭載した3つのUSSを使用して判断する。
小部屋の入り口の位置は小部屋の中央または右・左側の3通りある。これらすべての状況に対
応するために、まず左右のUSSでMIRSの左右どちらか、または両方に壁がないことを確認しさら
に正面にも壁がなければ、小部屋に完全に入ったと判断する。
<プログラムC>
- DBでの数字認識後、もう1度DBへ向かう場合のプログラム。
DBからDBへ向かう場合は、プログラム@と同じプログラムで走行する。
3. 関数
- このプログラムで使用した関数について説明する。
関数名 | 引数 | 説明 |
labyrinth(int) | これから向かう場所を数字で指定する。 1:ロータリ 2:小部屋 |
|
check(int) | 現在向かっている場所の情報を数字で伝える。 |
|
curve(int) | 曲がる方向を数字で指定する。 2:右 |
|
db_error(void) | なし |
|
finish_mode(void) | なし |
|
4. 問題点
- 通路走行プログラムを開発するうえで次のような点が問題になった。
- 初め、このプログラムをメインプログラムとしていたが、このプログラムから別の走行プログラムへの切り替わりがうまくできなかった。
- 通路からロータリに入る際、ロータリ中央の柱に正確にぶつかる成功率が低かった。
- メインプログラムを別に用意することで解決した。
- 左右の超音波を使うことで、柱にぶつからなくてもロータリに入ったと判断できるようになった。
解決策
通路走行プログラムlabyrinth.c