2008a/A10/課題2右

目次

メンバー紹介

ロボ担当:吉村

ホームページ&プログラム担当:辻・水上

課題2:ライントレースロボット作成

黒い線に沿って動くロボットを作成

条件

ライントレースロボットの作成をするにあたって4つの条件が課せられている

①速さと正確さを追求すること

②交差点で優先側を走っていない場合には、一時停止すること

③前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと

④コースを3周したら自動的に止まること

(2008年度前期授業計画の課題2より引用)

ロボット紹介

ロボットの全体  

全体

    車輪  

軸車輪

    光センサー  

光センサー

パーツについて

駆動系

とりあえずの指針として速さを追求して見たので最初は一番速くなるはずのギア比にし、タイヤも直径が最も大きい種類のにしてみましたが見事に脱線、脱線、脱線の連続。しかも速すぎるととまるときに衝撃で線からずれてこれまた脱線。 なので速さはタイヤの大きさで取り繕うことにし、バランスを考えた結果ギア構造は中大中の大きさのギア三つつなげることでそれなりの安定度に仕上げました。

キャスター

コースの関係で急カーブに近いカーブであり、4輪では車体の安定性が保証されるのはいいのですが曲がれる角度に限界があり、今回の課題目標に到達するにあたって4輪ではこれに不向きであると判断し3輪にしてみました。 3輪にすることで方向転換における支点のばらつきを1箇所にまとめ小回りできる機体に仕上げました。

タッチセンサ

タッチセンサは使いどころがわかりづらく、必要になる状況があまりイメージできず、衝撃がどちらからきてどこにタッチセンサを置くことで正確にセンサを反応させられるか確証がもてなかったので、センサそのものに衝撃を伝えるのではなく、センサに衝撃を与えそれを本体を通してセンサに認識させることにしました。 これはセンサをバンパーのようなものに取り付けることでセンサはバンパーと一緒に衝撃を受けます。 この衝撃を通してバンパーは本体のほうに動くのでセンサはこのときに本体と接触することで本体が衝撃を受けたことをセンサが認識するシステムです。 これによりセンサの感度のよさもさることながら、センサが衝撃を認識するのに必要な物体が本体、つまりセンサと接触できるであろう物体の中で最大の物体を利用できることはセンサの認識の確実性が間違いなく向上してることにつながるわけです。

光センサ

最初は普通に前方に取り付けてみましたが前のほうにセンサがあるということは車体が少し角度を変えるだけでセンサの位置が急激に変移してしまうということになり、当初の車体の移動速度も相成ってセンサが急カーブの対応に追いつけていませんでした。 これによりセンサはできる限り車体の方向転換の支点に近づけたいと思い車体の本体の中心の裏側に取り付けてみました。これによって幾何学的には問題が解消され、曲がるときも安定してラインの上にセンサを置ける気体にできました。 しかしいざ動かしてみるとセンサの位置があまりに低く、また車体の裏側なのであまりに暗すぎてセンサが明暗の暗しか認識できない状況となってしまい、しかも車体の骨組みの性質上そこに光センサをつけるのは部品の性質上不可能と判断し、結局のところ今の形で落ち着いたというわけです。

コース紹介

コース

 NTTのロゴからヒントを得てこのようなコースにしました(2つくっつけた形)

コースの条件

①一旦停止するところを2つ以上

②コースの黒い線は25mmぐらい

プログラム

#define THRESHOLD 40              //これは40を基準にする設定。40よりも大きい数字の場合、白と識別し40よりも小さい数字の場合、黒と識別する
task main()
{SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー1をタッチセンサーとする
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする
while(true){             
while(SENSOR_2==0) //センサー2(タッチセンサー)が発動していないときの動作
{
if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) //光センサー1・3が40より大きい数字(白)のとき
{SetPower(OUT_A,1); //ギアレベルを1に
   SetPower(OUT_C,1);
   OnFwd(OUT_A+OUT_C); //前進
}
if(SENSOR_3<THRESHOLD) //光センサー3が40より少ない数字(黒)のとき
 {SetPower(OUT_A,1); //ギアレベルを1に
 SetPower(OUT_C,1);
 OnFwd(OUT_A);
 OnRev(OUT_C); //左タイヤが前進、右タイヤは後進して軌道修正
 }
if(SENSOR_1<THRESHOLD) //光センサー1が40より少ない数字(黒)のとき
{SetPower(OUT_C,1); //ギアレベルを1に
SetPower(OUT_C,1);
OnFwd(OUT_C);
 OnRev(OUT_A); //右タイヤが前進、左タイヤは後進して軌道修正
}
if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) //光センサー1・3が40より小さい数字(黒)のとき
{Off(OUT_A+OUT_C); //停止
Wait(50); //停止時間
OnFwd(OUT_A+OUT_C); //前進(これは交差する線を認識しないようにするため)
Wait(70); //進む時間
}
}
while(SENSOR_2==1) //センサー2(タッチセンサー)が発動しているとき
{ 
Rev(OUT_A+OUT_C); //少し後退
Wait(30); //後退時間
Off(OUT_A+OUT_C); //停止
Wait(100); } //停止時間
}
}

光センサー

光センサーのあて方(進め方)

光センサー

左側にある光センサーと右側にある光センサーで、黒い線の上ではなく、その両サイドの白い部分に沿って進むませ、黒い部分に光センサーが反応した場合、軌道修正を行うようにしました。

こうすることでコースの脱線をほぼなくすことができた

また

光センサーのあて方(止め方)

光センサー

左側にある光センサーと右側にある光センサーの両方が黒黒になったとき止まるようにしてある

つまり

{ 左 右 →行動 }と定義すると

白 白 →前進

黒 白 →右のタイヤを前進させ、左のタイヤを後進させてコースに戻す

白 黒 →左のタイヤを前進させ、右のタイヤを後進させてコースに戻す

黒 黒 →停止

となるようにプログラムを組んだ

工夫したところ

・求められていることが速さと正確さなのでなるべく速く走れる、かつカーブをきれいに回らせるために軸車輪を付けてみた

苦労したところ

・黒と白の認識(コース外れたのに戻ろうとしてくれない)

・カーブをきれいに曲がることができないのと、たまにカーブを外れてしまうのをどうすればいいのか

・回転キャスター。説明書にある作り方に必要なパーツで本体とキャスターを繋げるパーツがすでになくなっておりこれの開発に四苦八苦。さらに開発した構造だとシャフトの長さが短すぎると車体が前のめりになりシャフトを止めていたパーツが自重で外れてしまい、逆に長すぎるとシャフトがキャスターについてる車輪の円の外にはみ出してしまい床を突いてしまう。これらの問題を解消しながら最善の長さを持ったシャフトを見つけるのには骨が折れました。

・光センサーの付ける位置と付け方

解決策

認識

黒の線を太くすることで解決

光センサー

車体の真ん中に近い位置に光センサーを付けることで小回りを効かせ、かつコースから飛び出すのを防いだ

未解決

・カーブを脱線なく曲がることができない

・停止線で止まってくれない(コースが悪いのもある)

・3周回ったら止めるというのができなかった

感想(課題2を終えて)

・ちゃんと考えてコースを書いたつもりなのにカーブを曲がれない、止まってくれないなどの問題が発生し、何回プログラムで変えてもこの問題は解決できなかった。 by 辻

・プログラムの作成が複雑でプログラミングが大変だった。ラインを考えるのは楽しかった。 BY水上

・車体の骨組みそのものがパターン化していてバリエーションに乏しく飾り付けでごまかすことでしかロボの差別化ができなかったのが悔しかった。できればもっと柔軟性のある骨組みの開発ができる授業を一つ増やしてほしい。BY 吉村

この作品に関してのコメント

コメントよろしくお願いします


訪問者 本日1 昨日0 合計1321


添付ファイル: file2.jpg 205件 [詳細] file1.jpg 205件 [詳細] filed.jpg 201件 [詳細] filec.jpg 226件 [詳細] fileb.jpg 226件 [詳細] filea.jpg 213件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-25 (水) 23:23:41 (4077d)