*自己紹介 [#d35fc729] 名前 tako(ru-) 本編とは別に自分でプログラム作ってみました。 *初めてのプログラム [#pb3056a4] **三角形を描く [#oa4e6440] task main() { OnFwd(OUT_A+OUT_C); Wait(200); OnFwd(OUT_A); Wait(175); OnRev(OUT_C); Wait(175); OnFwd(OUT_A+OUT_C); Wait(200); OnFwd(OUT_A); Wait(175); OnRev(OUT_C); Wait(175); OnFwd(OUT_A+OUT_C); Wait(200); OnFwd(OUT_A); Wait(175); OnRev(OUT_C); Wait(175); Off(OUT_A+OUT_C); } *苦労した点 [#h619fa77] 線をつなげる所のタイム設定に苦労した。 *工夫した点 [#s5b564a5] バランスを重視してタイヤではなくキャタピラにしてみました。 *反省点 [#ade566f9] 初めてのプログラミングでもあったが、それにしてもプログラムを作るのに時間がかかりすぎた。もっと慣れなければこの先きついと思うので少しでも多くプログラミングしなければならない。 それとロボットが床を変えると微妙に回転角度がずれることがある。やはり摩擦が大きいキャタピラにしたためでしょうか。次はホイールでも実験しておきます。 **木を描く [#nc6d1cd9] task main () { OnFwd(OUT_B); Wait(25); OnFwd(OUT_A+OUT_C); Wait(60); OnRev(OUT_B); Wait(25); OnRev(OUT_A+OUT_C); Wait(30); OnFwd(OUT_A); Wait(70); OnRev(OUT_C); Wait(70); OnFwd(OUT_B); Wait(25); OnFwd(OUT_A+OUT_C); Wait(20); OnRev(OUT_B); Wait(25); OnRev(OUT_A+OUT_C); Wait(20); OnFwd(OUT_B); Wait(25); OnRev(OUT_A+OUT_C); Wait(70); OnRev(OUT_B); Wait(25); OnFwd(OUT_A+OUT_C); Wait(70); OnFwd(OUT_A); Wait(160); Wait(160); OnFwd(OUT_B); Wait(25); OnFwd(OUT_A+OUT_C); Wait(60); OnRev(OUT_B); Wait(25); OnRev(OUT_A+OUT_C); Wait(60); OnFwd(OUT_A); Wait(75); OnRev(OUT_C); Wait(75); OnFwd(OUT_B); Wait(25); OnFwd(OUT_A+OUT_C); Wait(60); OnRev(OUT_B); Wait(25); Off(OUT_A+OUT_B+OUT_C); } *工夫した点 [#mb9d1d35] 動くたびにペンがずれたり、外れたりするので、ペンをロボット内部に装着し、ずれを最小限に抑えたこと。 *失敗点 [#wc61a49c] 木の線をつなげる所にまだ改善の余地あり。と言うかプログラムは あってるはずなんですが、うまく動いてくれません。やはりロボットの重さや左右のキャタピラのバランスに関係があるかもしれません。今回ペンを内部につけたため、バランスの関係上ホイールを装着できませんでした。すみません。 *反省点 [#na399ab2] 車体の重さやキャタピラの左右のバランスの誤差を考慮したつもりだったがまだ甘かった。次回は完璧とまではいかないかもしれないが、それに近いものを目指します。 ** ロボット画像 #ref(2006a/B7/ru-/060519_1529~01.jpg,100%) ちなみに腕についてる鉛筆は全く動きません。ただの飾りなので気にしないで下さい。本当の筆はロボット内部に仕込んであります。 **タッチセンサープログラム編(90度曲がる) task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); while(true) { OnFwd(OUT_A+OUT_C); until (SENSOR_1==1); OnRev(OUT_A+OUT_C); Wait(70); Off(OUT_A+OUT_C); OnFwd(OUT_A); Wait(70); OnRev(OUT_C); Wait(70); Off(OUT_A+OUT_C); } } *苦労した点 [#t68613de] プログラム自体は単純なものなのでさほど苦労はありませんでした。だんだんプログラム作りがなれて、早くなりました。この調子でがんばりたいです。 *反省点 [#z98cc078] 前回のロボットを解体するときに時間がなかったので、かなりおおざっぱに片付けたため、今のロボットを作る際、とても時間を要しました。(パーツが見つからなくて...)解体するときは気をつけます。今回がホイールにしてみました。やはりキャタピラよりは誤差が小さかったです。ですがシングルバンパーでは、感知範囲がダブルと比べて小さいので、手間をかけてでもダブルをつけるべきでした。 **タッチセンサー&ライントレース(Uターンプログラム) [#n42589cb] #define turn_RIGH OnFwd(OUT_A);OnRev(OUT_C);Wait(200);Off(OUT_A+OUT_C); task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while (true) { OnFwd(OUT_A+OUT_C); if (SENSOR_1 < 40) { OnFwd(OUT_A); OnRev(OUT_C); until (SENSOR_1>40);} if(SENSOR_3<40) { OnRev(OUT_C); OnFwd(OUT_A); until(SENSOR_3>40); } if(SENSOR_2==1) { OnRev(OUT_A+OUT_C); Wait(80); turn_RIGHT } } } **苦労点 ロボットは手間ひまかけて、そして試行錯誤のすえ、どの角度からのぶつかりにも対応できるものを完成させました。 ** 反省点 たまにカーブあたりでぶつかると後ろに下がっても線を追えないときがあります。プログラムを作る際、後ろに下がったあとに頭を振って、線を見つけるプログラムを追加しとけばよかったです。 **光を追うプログラム #define KURUKURU OnFwd(OUT_A);OnRev(OUT_C);Wait(610); #define GOAHEAD OnFwd(OUT_A+OUT_C); #define KOKODOKO OnFwd(OUT_A);OnRev(OUT_C); Wait(610);OnFwd(OUT_C);OnRev(OUT_A);Wait(610);Off(OUT_A+OUT_C); #define MAIGO OnFwd(OUT_A+OUT_C);Wait(200);OnFwd(OUT_A);OnRev(OUT_C);Wait(305); task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); int lightmax = 0, timemax=0; ClearTimer(0); while(FastTimer(0) < 4650) { if(SENSOR_1 >=lightmax) { GOAHEAD; } else { KOKODOKO; MAIGO; KURUKURU; } } } **工夫点 [#fc8d7974] まず始めにイメージしたのは、光を見失った時、まるで迷子のようにあたふたするプログラムが作りたかった。.. そして完成したプログラムがこれです。 まず初め、ロボは回転しだします。そして1回転後に前方に向かって進行します。そして振り返りあたふた回転します。 その姿はまるで、はじ●めての●つかいで迷子になった子供の姿を連想させます。 **反省点 [#re8ae682] 本当にプログラムが関数やらマックスやら使って複雑化してきた。プログラムっをつくるのにも時間を要したが、プログラムを考えるにも時間がかかった。 限られた時間の中でロボコンは行われるので、レベルアップしなければならない。...以上今回の愚痴です。 さて、プログラムについての反省点ですが、確かにこの迷子プログラムはほんとに迷子の様に見えます。しかしこの場合、時間内に光を見つけなければいけないので、2回行動分(行動合計時間)のプログラムになってしまいました。.. ほんとであればもっと長い時間行動できて、迷子をリアルに表したプログラムを作りたかったです。