課題2 黒い線に沿って動くロボット( Ozawa男 & 相方 ) †ロボコン †課題内容 †各チームで作成したコースに沿って動くロボットを作成せよ。ただし、 速さと正確さを追求すること 困難なこと †注意:コースラインの幅は20〜25mmくらいとしてますが,あまり太くしない限り制限はしていません.ちなみに過去のロボコンコースレイアウトは25mm幅で制作してきました コース説明 †A6の作ったコースはこちら 正直あまり深く考えずに作ってみたが、後に難点を発見 この急カーブ後の交差点である この課題のミソ †この課題での難点はこの三点であると思われる ロボについて †本体構造 †設計土台 † まず始めに決めなければならなかったのは土台となる本体、どのようにして車体を動かすのか? 2、三輪 利点:何といっても小回りが利く 欠点:四輪に比べ安定性に欠ける(これは作り手次第だが、、、) 3、キャタピラ 利点:高い安定性と小回りの良さ 欠点:スピードの無さ、もう一台との連携に問題 が考えられた、この中で我々が選択したのは2の三輪、キャタピラも捨てがたかったがこの課題の”速さと正確さ”という点を考慮すると、三輪の方がベターであると考えたためである 製作開始 †二輪をモーターにつなぎ、残りの一つを自由度の高い動きが出来るようにしようと思う まずはマニュアルを見て試しに作ってみた ふむ、確かに自由に動く、動くが、、、全く意味をなしていない!!車体を支えてないどころか重りにしかなっていなかった、これでは二輪だろう そこで前回の失敗から”三輪で動く”ということをふまえて改良型を製作してみた なんだか無駄に細々して脆そうな・・・いや、やめよう 見事大破 カーブでかかる圧力に耐えきれずに壊れてしまった 更なる改良を加えたのが 前回の問題点”耐久性”を改善したものである これが片輪なのは、一つのほうが旋回時に力が集中した方が曲がりやすいのではないかとのからだったが、しばらく走らせていくうちに、微妙に曲がって走っていることが判明したため、両輪へと変更した
重心が中心からずれてしまったためではないかと思う 光センサーとタッチセンサー †二つのセンサーは組み合わせて作成し、車体前面に配置できるようにした タッチセンサーはバンパー部分に前面から力が加わると反応するようになっている 光センサーは二つ取り付けて線を挟んで走るようにした、これによりセンサーの反応のパターンを4つにし、モーターの回転のバリエーションを出した 完成品 †そして完成品がこちら 以前の物は車体の前後の重量のバランスが悪かったため、後輪を後ろに動かし補強、加えて重量のあるRCXを後方に動かした ちなみに、タイヤとモーター部分のギア比を変えることで速度の調節も手軽に出来るようにしてある しかし、速度を上げるとあまりのスピードのためか光センサーが上手く反応出来なくなったため、安定性を考慮して遅めのスピードにしてある プログラムについて †今回作成したプログラムはこちらです 定義は次のものを使用 #define infrared 42 // 赤外線センサーの明るさ調整 #define crossing 3*4 // 交差点を通る回数(2周させるため) #define start_position 100 // タイマー(正確に2周させるため) メインルーチン task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); // 赤外線センサーセット SetSensor(SENSOR_3,SENSOR_LIGHT); // 赤外線センサーセット SetSensor(SENSOR_2,SENSOR_TOUCH); // タッチセンサーセット int n; // 関数を定義(交差点を数える) n=0; while (n<crossing) //2周するまで繰り返す { if(SENSOR_2==0) //タッチセンサーが反応してないで、 { if (SENSOR_1 >infrared) //センサー1が明るいと判断して、 { if (SENSOR_3 >infrared) //センサー3も明るいと判断したら、 { { OnFwd(OUT_A+OUT_C); //まっすぐ進む。 } } else //センサー1が明るくセンサー3が暗かったら、 { Off(OUT_C); //右にカーブ。 OnFwd(OUT_A); } } else //センサー1が暗く、 { if(SENSOR_3>infrared) //センサー3が明るかったら、 { OnFwd(OUT_C); //左にカーブ。 Off(OUT_A); } else //センサー1もセンサー3も暗かったら、 { PlaySound(SOUND_CLICK); //音を鳴らす。 Off(OUT_A+OUT_B); //一時停止。 Wait(30); OnFwd(OUT_A+OUT_C); //交差点を渡る。 until (SENSOR_1>infrared||SENSOR_3>infrared); n=n+1; //交差点を渡ったと判断。 } } } else //タッチセンサーが反応したら、 { PlaySound(SOUND_DOUBLE_BEEP); //音で知らせて、 OnRev(OUT_A+OUT_C);Wait(100); //バック。 Off(OUT_A+OUT_C);Wait(200); } } ClearTimer(0); while (Timer(0) <= start_position) //スタート位置とゴール位置を正確にするためのタイマー。 { if(SENSOR_2==0) //交差点を設定回数渡り終えてからのライントレースのプログラム(上のものと一緒) { if (SENSOR_1 >infrared) { if (SENSOR_3 >infrared) { { OnFwd(OUT_A+OUT_C); } } else { Off(OUT_C); OnFwd(OUT_A); } } else { if(SENSOR_3>infrared) { OnFwd(OUT_C); Off(OUT_A); } } } else { PlaySound(SOUND_DOUBLE_BEEP); OnRev(OUT_A+OUT_C);Wait(100); Off(OUT_A+OUT_C);Wait(200); } } Float(OUT_A+OUT_C); //2周走行したら止まる。 } 総括 †前回のプログラムは結果的に似顔絵が描ければ良く、その過程の動きは問われなかったため自由度が高かったが、今回は線に沿って動かなければならないため難易度が高く、よりプログラムを煮詰めていかなければならなかった 今回は車体の安定性と旋回性能を重視したため”速さ”にまで手が回らなかったことが悔やまれる 感想 †今回は前回の反省を踏まえ、早くから製作を始めたのが良かったと思います。時間に追われることなく余裕をもって臨めたため、ロボットの製作にもこだわることができました。 コメントをお願いします †
きちんと2周させるための工夫やタイヤの数の選択などいろいろと工夫していて良いです。 FI |