- 追加された行はこの色です。
- 削除された行はこの色です。
*自己紹介 [#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回行動分(行動合計時間)のプログラムになってしまいました。..
ほんとであればもっと長い時間行動できて、迷子をリアルに表したプログラムを作りたかったです。
**ロボコンプログラム(運び屋ロボット) [#s2fc19b2]
task main()
{
OnFwd(OUT_A+OUT_C); //前進
Wait(320); //3,2秒間行動
OnFwd(OUT_A);OnRev(OUT_C); //左旋回
Wait(175); //90度左回転
OnFwd(OUT_A+OUT_C); //前進
Wait(320); //3,2秒行動
OnFwd(OUT_A);OnRev(OUT_C); //左旋回
Wait(168); //90度左回転
OnFwd(OUT_A+OUT_C); //前進
Wait(190); //1,9秒行動 缶到着
Off(OUT_A+OUT_C); //モーター停止
Wait(50); //0,5秒待機
OnFwd(OUT_B); //アーム下げる
Wait(110); //缶キャッチ
Off(OUT_B); //アーム下げたまま待機
OnRev(OUT_A+OUT_C); //後退
Wait(210); //2,1秒行動(ここから缶を考慮して時間を行 きと変えている)
Off(OUT_A+OUT_C); //モーター停止
OnFwd(OUT_A);
OnRev(OUT_C); //右旋回
Wait(165); //90度右回転
OnFwd(OUT_A+OUT_C); //前進
Wait(345); //3,45秒行動
OnFwd(OUT_C);
OnRev(OUT_A); //65度左旋回(缶にぶつからずショート カット)
Wait(165); //65度左回転
OnFwd(OUT_A+OUT_C); //前進
Wait(200); //2秒行動
Off(OUT_A+OUT_C); //モーター停止
OnRev(OUT_B); //アーム上げる
Wait(200); //缶を手放す
Off(OUT_B); //モーター停止
OnRev(OUT_A+OUT_C); //後退
Wait(50); //缶の後ろに回る
OnFwd(OUT_B); //アーム下げる
Wait(200); //缶を押すために下げる
Off(OUT_B); //モーター停止
OnFwd(OUT_A+OUT_C); //前進
Wait(300 ); //3秒間かんを押し、2機目に缶を渡す
Off(OUT_A+OUT_C); //一時停止(缶を完全に渡すため)
OnRev(OUT_A+OUT_C); //後退(2機目にぶつかるから)
Wait(200); //2秒後退
Off(OUT_A+OUT_C); //モーター停止
OnRev(OUT_B); //次のテストに備えアームを上げる
Wait(200); //2秒間上げる
Off(OUT_B); } //モーター停止
ロボコンへ。
**反省点 [#o4a7148c]
--このプログラムはライントレースを使用しておらず、すべて緻密なタイム計算をしています。かなり試したのですが、やはり多少誤差がでてしまいます。ライントレースを試したかったのですが間に合わず、急遽こっちを使いました。
--缶の受け渡しが完璧なら得点できたのですが、タッチセンサーがうまく作動しなかったのど最後の最後でツメが甘かったです。タッチをもっと敏感に触れる位置」に付けるべきでした。
**工夫点 [#g308bc85]
--缶をキャッチしたあとを考慮して、かなり緻密なタイム設定をしました。
--缶をとったあと、障害物をたおさず、そしてショートカットをするため、65度に回転を加えました。これは完璧でした。