2008b/MemberOnly/進行状況A

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

◇ 目次 ◇

課題内容

白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。

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

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

完成ロボットの紹介

'' ・初期段階''
●投てき構造

初期.jpg

初めはそのままモータの回転力を用いてホイールを投げる方法を考えました。
しかしこれではモータのトルクでは不十分なため、放物運動で飛距離が短く満足のいくものではありませんでした。
そこで、もっと飛距離が出て加えて他のチームと違う方式を考えた場合、ゴムを使用することを思いつきました。
これはパチンコやゴム鉄砲からヒントを得ました。

光センサーは前方に2つ付けることで光方向を読み取る精度を上げることを考えました。
さらに力強さや安定性から車輪はタンクを用いて以下に仕上がりました。

tank1.jpg

しかしタンクは旋回時の車体のぶれが大きいためやはり車輪駆動方式にする事に。
以上を踏まえ最終的なロボットは以下のようになりました。

全体像

cover.jpg

中央のモーターがFF車のエンジンが剥き出しのような印象を与えるロボットに仕上がっています。

wheelB.jpg

モータは一つなので負荷を押さえると共に、回転軸を一方の車輪に固定するため、3輪駆動方式にしました。
また車体の水平を保つのに加え、負荷を押さえるために後輪のゴムは外しました。

L-S.jpg

光センサーは懐中電灯をLEDライトにしたら光の指向性が高くなり
上手に左右の光センサーで捉えられなかったため、中央に一つ付けました。

bullet.jpg

今回投げるホイールは左のタイヤのゴムを剥いだ右側のものです。

●打ち出し構造

shoot.jpg

初め、図のようにホイールを輪ゴムに引っかけて、横から棒でホイールを固定します。
動作時は,離アが右に回転することでホイールを引っかけていた棒が引き出されます。

form.jpg

ディファレンシャル・ギアとは?

今回のポイントは一つのモーターでマシンを駆動させるディファレンシャル・ギアです。

handle.jpg

このギアの組み方なら片方のギアを固定しても、もう片方のギアを回すことが出来ます。

gear.jpg

・前進: 上の図で ↓◆↓の3つのギアを内包する灰色のギアが回ることで内側の,離アも軸の周りを回ります。
従って噛み合っている△鉢のギアも回転することで動力を左右の車輪に伝え、前進します。

pole.jpg

(支え棒)

・右旋回: まず支え棒によりのギアが回らないようになります。
しかし、,離アがのギアの周りを回転しながら回ります。
従って△離アは,離アに噛み合わさっているため、△離アも回転することで片方の車輪だけが回ります。

工夫点

メカニカルな打ち出し構造ではないが、パチンコのようなゴムの打ち出しはモーターの回転力を使うより非常に良く飛びます。
今回作製したマシンは5メートル以上飛びました。
ゴムの強度の調整により飛距離も調整可能になりました。
またをホイールが放物軌道を描きにくくなっています。

ロボットのプログラム

●プログラム(課題1と2を兼用可能)

 プログラム名: LIGHT TRACE SHOOTER

task main()
{
SetSensor (SENSOR_1, SENSOR_LIGHT); センサーポート1に光りセンサーを設定
SetSensor (SENSOR_3, SENSOR_LIGHT);    センサーポート2に光りセンサーを設定
while (true)       以下を永遠に実行し続ける
{
OnRev (OUT_A);      右に回る
if(SENSOR_1 > 41 )    ・光センサーの値が41以上の場合、以下を実行 
{
OnFwd(OUT_A);       一定時間前進
Wait(15);
}
if (SENSOR_1 >= 52 )   ・光センサーの値が52以上の場合、以下を実行
{ 
OnFwd(OUT_B);      モーターをまわして物体を投げる
   Wait(100); 
   Float(OUT_B);       モーターの停止
   break;        while文内のプログラムから抜け出す
   }
 }
Off(OUT_A);
}

基本アルゴリズム
・適正光量が得られない場合は回転動作により光源を常に探し続ける。
・条件にあった場合だけ前進動作や投てき動作を行うようにする。

工夫点

課題1,2共に光源方向に進む条件、50兌蠢阿妊曠ぁ璽襪鯏蠅欧訃魴錣同じであるため、
プログラム1で光源方向が定まらない限り光源を探し続けるようにするとどちらの課題も一つでこなせるようになりました。
プログラムの将来性を考えた場合、閾値は初めに変数で定義していた方がよいかもしれないが、
それでも全体的にかなりシンプルなプログラムになっている。

作製後記

懐中電灯にホイールを当てることは出来ませんでしたが、課題はだいたい達成できたと思います。
しかし光センサーを2個用いることが出来ればもっと左右方向の精度が上がったかもしれません。
プログラム動作前に周囲の光量など環境設定が必要となることや、マシンが永遠に動き続けるなどはプログラムの改善を考えたい。

改善後
プログラムにbreakコマンドを入れることで投てき後にマシンが止まるように出来ました。

◆よろしければコメントをどうぞ◆

  • whileから抜け出すにはbreakを使うとよいと思います。
    ロボットの説明やプログラムのシンプルさはとてもよいです。デファレンシャル・ギアを使うと、正回転だけでは直進できないはずです。また、課題2では光源が左右に曲がったりすることもあり、直線運動ではありません。
    • FI? 2009-02-02 (月) 20:11:39

このデファレンシャル・ギアが正回転で右に曲がり、逆回転で左に曲がる様式で組まれていると勘違いしていました。すみません。
ディファレンシャル・ギアの説明はとても良いです。
課題1と課題2の両方できる汎用性が高いプログラムを組んだのはすばらしいです。
ただ、ある程度強い光の方向に進むプログラムより、相対的に最も強い光の方向に進んだほうが正確な光源のある方向を見つけられます。
また、課題2では光源が直進運動だけでなく、左右に曲がる場合に対応できないのが惜しいです。
プログラムを頑張ればもっと良い評価になります。 FI



添付ファイル: fileshoot.jpg 387件 [詳細] filetank1.jpg 393件 [詳細] file初期.jpg 488件 [詳細] filewheelB.jpg 375件 [詳細] fileL-S.jpg 385件 [詳細] filehandle.jpg 499件 [詳細] filepole.jpg 365件 [詳細] filegear.jpg 434件 [詳細] fileform.jpg 391件 [詳細] filebullet.jpg 348件 [詳細] filetank2.jpg 171件 [詳細] filetank.jpg 176件 [詳細] filecover.jpg 364件 [詳細]

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