課題3:懐中電灯に向かってブロックを投げるロボット

課題内容

インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。 2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。

懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。

この課題のポイント

モーターは1つ、タイヤは2つ

この課題、モーターの使用は2つまでという制約がついている
一つのモーターで二つのタイヤを動かさなければならないのだ、別にクルクル回る分には一つで十分なのだが...
今回は懐中電灯に向かって進まなくてはならない、これにはどうしても二つのタイヤが必要、これ如何に

光を探せ

今回の主要部、光を探すこと
当然光センサーを使う必要があるだろう、そこで考えられるのは

センサー1つ
センサーを前方に配置し、頭を振って光を探す、センサーの闘値に反応するところがあればそこに向かってブロックを投げる

センサー2つ
センサー二つを前方左右に配置し、左右どちらの闘値が大きいかにより動かすタイヤを変え、懐中電灯に向かって近づき、投げる

やはり、二つ使った方がやれることは多くなる、一つでは出来なくても、二つならば左右の値を比較し、それにより懐中電灯に近づくという動きを実現できる
やはり使える物はすべて使えということで、センサーの数は二つを採用

投げろッッ、ブロックを

まず、当初の案は2つ
1つは、ブロックを左右からタイヤ等ではさみ、左右で回転をかけて飛ばす方法

もう一つはアーム状の物にブロックを載せ、遠心力でそおぃッッと投げる方法

前者は左右の回転力を同じにし、且つ回転を逆にしなければならない等、課題が多そうだったため、より単純に組めるであろう後者を使うことにした

製作過程

車体製作

基本構造

今回の課題の難点、「一つのモーターで二つのタイヤを動かす」これを解決するために使うのがこの
''DIFFERENTIAL-GEAR''

081211_1802~01.jpg

これを用いることで、左右のタイヤにそれぞれ一つの回転時のみ動くように出来るのだ
これを使い、まず土台となる部分を組んでみた

081211_1803~01.jpg

これにより、モーターの回転によってタイヤは右のみ前転、左のみ前転の2つをパターンを得た
左右のタイヤを交互に回転させることで前進させることが出来る

投擲部製作

はっきり言って投げさせるだけなら簡単である、いくらでも組める、しかし、、、
この課題では懐中電灯から50cmの距離から投げる、従って投げたブロックをより近づけるためには(それが必要かは分からないが)より遠くに投げられるようにするのが良いだろう
しかしこれが案外難しい
試しにいくつか作って飛ばしてみたのだが、どれも飛ぶことは飛ぶ、しかしあまり距離が出ない、何が悪いのか?というと、角度である
ブロックがアームから離れるときのベクトルの向きに問題があった、試作品たちはどれも斜め下に向けブロックを投げていたため距離が出なかったのだ

そこで、上向きに投げた方が飛ぶのではないかと考え、試行錯誤を繰り返した結果...
ブロック発射の土台とそれを飛ばすアームを別にすることで方向調節することを思いついた

081218_1638~01.jpg

早速試してみたところ、全然飛ばない
何が悪いのか?まず角度、上の方には飛ぶがそれに力が行き過ぎて前に飛ばす力が足りない
加えて力、純粋にアームがブロックに伝える運動エネルギーが少ない
アーム自身とブロックを一体化させている方が飛ばす時に大きな力を加えられるようだ

力はともかく、今回はブロックの飛ばす角度が問題であったのに、それが裏目に出てしまっては意味が無いので、アームと発射台を分けるのは辞める

よって、続いての試作品はアームブロック一体型
コンセプトは'''力こそが全て''' それがこちら

081218_1705~01.jpg

出たッ、シンプルイズベスト!
モーターの力を無駄無く伝えるためアーム自身はモーターに直結させる
アームの重さで勝手に動かないよう支えをつける

ある人はいったそうです... ブロックの飛距離を決めるのは
''パワー×スピード×遠心力''

光センサー

センサーは前方に二つを平行に設置し、左右のどちらの方がより明るいかを判定し、明るい方へ車体を向けるようにした

090108_1712~01.jpg

完成品

090108_1713~01.jpg

完成品はこちら

プログラム

その1

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光りセンサーに定義
while(true){
	if(SENSOR_1 < 60){ //センサーの値が60未満のとき
	OnFwd(OUT_C); //時計回りに回転する
	}
	if(SENSOR_1 > 60){ //センサーの値が60より大きいとき
	Off(OUT_C); //回転を止める
/* ブロックを投げ*/
	OnFwd(OUT_A);Wait(18);Off(OUT_A);break;
	}
}
}

その2

#define  light 57
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);     //センサ−1
SetSensor(SENSOR_3, SENSOR_LIGHT);      //センサ−3を光センサーに設定
while (true)                //無限ループ
{ if (SENSOR_1> SENSOR_3){          //センサ−1がセンサ−3より明るいとき
{ 
if (SENSOR_1> SENSOR_3){            //センサ−1がセンサ−3より明るいとき
OnRev(OUT_C);                //右車輪を前回転
} else {                    //センサ−3がセンサ−1より明るいとき
OnFwd(OUT_C);                //左車輪を前回転
}
until((SENSOR_1>light)&&(SENSOR_3>light)); //センサーが両方lightより明るいとき
Off(OUT_C);Wait(100);            //1秒間静止
OnFwd(OUT_A);Wait(18);            //アームを0.18秒間回転,ブロックを投げる
Off(OUT_A);Wait(9999);           //アームを停止し、99.99秒静止
}
}

総括

今回の課題は内容的には難しい物でしたが、ヒントとしてディファレンシャルギアを与えられていたことがとても大きかったです
実際に悩まなくてはならない点は思いのほか少なく、そこを集中して考えることが出来ました
モーターの数が2つなので可能な動きが少なかった分、プログラムもシンプルな物を組むことが出来ました

感想

あまり時間を取れず、より良くなるように改良を重ねることが出来なかったのが残念です
単純な動作でありましたが、むしろそれだからより洗練したものが出来たのではないかと思います、今回の残念な気持ちはロボコンに向けたいと思います

コメントをお願いします

  • 2つめの課題のほうのプログラムも作りましょう。また、課題1では50cmのところまでロボットを近づけましょう。 -- FI? 2009-02-02 (月) 19:53:22


添付ファイル: file090108_1712~01.jpg 257件 [詳細] file090108_1713~01.jpg 236件 [詳細] file081218_1638~01.jpg 244件 [詳細] file081218_1705~01.jpg 228件 [詳細] file081211_1803~01.jpg 242件 [詳細] file081211_1802~01.jpg 241件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-02 (月) 19:54:30 (3856d)