#contents 光に向けてモノを投げるロボット *ロボット [#fe1830e1] モーターを2つ、光センサー2つを使用。 懐中電灯の光を探し、光を追跡したり、光に向かってモノを投げるロボットを作成した。 &ref(2007a/A2/課題3右/200707041940000.jpg,40%,ロボ1); &ref(2007a/A2/課題3右/NEC_0018.JPG,40%,ロボ2); &ref(2007a/A2/課題3右/NEC_0023.jpg,40%,ロボ3); **ベース [#k7bc9975] 今回はモーター2つという制限があったので、動力部には1つしかモーターを使えなかった。 ヒント(http://yakushi.shinshu-u.ac.jp/robotics-photo/2005/2005-12-08/)を参考にし、モーター1つでも駆動できるベースを作成した。 &ref(2007a/A2/課題3右/NEC_0008.JPG,40%,ベースの画像1); &ref(2007a/A2/課題3右/NEC_0009.JPG,40%,ベースの画像2); ***工夫点 [#k3c6dcc9] ●ヒント通りに組むと、空回りする場合があったので、空回りの原因であった小さいギアを極力減らし、組み直した。 &ref(2007a/A2/課題3右/NEC_0006.JPG,40%,ギア); &ref(2007a/A2/課題3右/NEC_0007.JPG,40%,ギア2); ●逆回転を防ぐストッパーの位置にも気を使い、確実に逆回転を防ぐようにした。 &ref(2007a/A2/課題3右/NEC_0004.JPG,40%,ストッパー1); &ref(2007a/A2/課題3右/NEC_0005.JPG,40%,ストッパー2); ●前輪部分には摩擦が少ないローラーを使用した。これにより机上でスムーズに移動できるようになった。 &ref(2007a/A2/課題3右/200707041837000.jpg,40%,前輪); ***苦労した点 [#n8732623] ●モーター1つという新しい試みであったが、まずヒントページのギアの仕組みを理解するのに苦労した。 ●左右の車輪を駆動させるギア数が同じだとうまく動かないということに最初気づかず、原因解明に苦労した。 ●初め前輪に一輪車を使用したがバランスが悪く、結局うまくいかなかった。改善策として前に記したようにローラーを使用することにした。 &ref(2007a/A2/課題3右/200707041836000.jpg,40%,前輪ビフォア); ***改善点 [#xe0ce1f2] ●ローラーの前輪は机の上などの摩擦係数が少ないところではうまく動くが、カーペットの上などでは思うように動けない。汎用性の点で、このことが今後の改善点として挙げられる。 ***感想 [#g5494168] ●やはりモーター1つという制限が厳しかった。ギアを小さくすると遅くなるし空回りもしやすくなる。しかし大きいギアだけだと組み合わせや配置に苦労する。このバランスが難しかった。 **センサー [#i8be2a54] 担当:いっせー 今回は光センサーを2つ使用した。 光を効率よくさがすために斜め左右に、そして斜め上を向くようにセンサー2つを配置した。 虫の触覚をイメージした。 &ref(2007a/A2/課題3右/NEC_0015.JPG,40%,センサー); ***工夫点 [#n6875229] ●今回意識したことは『向き、高さの調整が可能なこと』である。 ●向き、高さの調節を手軽に可能にするという発想は、前回のラインレースロボットのセンサー配置の失敗から来たものである。 ●具体的には、調節はパーツを繋ぐ穴の位置を変えることで行う。高さは3段階(実用的には2段階)、向きは2段階変更できるようになっている。 &ref(2007a/A2/課題3右/NEC_0014.JPG,40%,センサー); ●また、今回時間の都合上タッチセンサーまで手が回らなかったことから、急遽光センサーのユニットに衝撃吸収の機能を付け足して、簡易フロントバンパーとも呼べなくもない構造になっている。 ***苦労した点 [#xb5b9dfc] ●可動と固定を両立することに苦労した。(この点に関しては結局完全には達成できなかった) ●固定に関して、ブロックの穴の数がジョイント部とあわせることが地味に大変だった。 ***改善点 [#vfc8d31b] ●可動を実現するために、故意にいくつかの点が完全に固定されてない状態になっている。調節可能という理念は達成できたが、代わりにパーツの位置のズレから生ずる誤差が大きくなってしまった。 ●時間があったらタッチセンサーも取り付けたかった。 ***感想 [#c1ebe8d0] ●コンセプトである『調節可能』を今回は『センサーユニット自体が可動』という形で表現してみた。発想としては悪くなかったのだが、ロボットにとって誤差が大きくなるということはプログラムを組む上で痛手となってしまった。次回はもっと違うアプローチをする必要があると感じた。 ●もしセンサーが4つ使用できたらやってみたいアイディアがあった。残念。 **投げる装置 [#l7331f73] 担当:みずまる &ref(2007a/A2/課題3右/NEC_0013.JPG,40%,アーム); ●モーターを規定通り一個使ってホイールを投げる装置を作成した。少しでも遠くに投げられるように装置をベースの上に装着した。 ***工夫点 [#rbebb2db] &ref(2007a/A2/課題3右/NEC_0010.JPG,40%,ギア); ●モーターに直づけのアームでは面白くないし、また、発想に乏しいと思い、ギアを3つ使ってできるだけ腕の長いものでバランスが崩れないものを作った。 &ref(2007a/A2/課題3右/NEC_0012.JPG,40%,手の部分); &ref(2007a/A2/課題3右/NEC_0011.JPG,40%,手の部分2); ●ホイールを落とさないように最低限の補強を加えた。 ***苦労した点 [#pa7413be] ●一番最初はモーターについているギアが小さかったため投げる速度が遅く、とても投げているとは言えなかったが、一回り大きいものを使うことである程度のスピードを得ることができた。 &ref(2007a/A2/課題3右/NEC_0022.JPG,40%,失敗ギア); ●一番大きいギアを使うとモーターに力がなくギアを回すことができなかったためアームを動かすことができなかった。 &ref(2007a/A2/課題3右/NEC_0020.JPG,40%,失敗アーム); ●最初に作った手の部分は、カッコよさを重視したため重くなってしまい投げる時にスピードがでなかった ***改善点 [#c5350453] ●やはり、まだ投げる速度が遅く、理想的な斜方投射にならず水平投射に近いものなってしまうため、更なる軽量化とギアの組み合わせの改良が必要となる。 ***感想 [#m358208c] ●物を投げるという作業は思った以上に力を必要とし、思った通りには動いてくれないので、少しでも理想に近づくためにより綿密な計画を立てないといけないと思った。 ●もっと正確で飛距離をだせるアームを思いつけなかったので残念だった。 *プログラム [#uce57730] **課題3の1 [#xc67549c] 担当:いっせー 『全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。』という課題にそったプログラムを作成した。 ***実際のプログラム [#gb214d20] #define THRESHOLD 65 //光の強さの境界を65に設定 #define RUN_TIME50 //今回は使用しない sub straight() //前進するためのプログラム。今回は使用しない { OnFwd(OUT_A); Wait(23); Off(OUT_A); OnRev(OUT_A); Wait(12); Off(OUT_A); } sub throw() //モノを投げるためのプログラム { Off(OUT_A); OnRev(OUT_C); Wait(20); Off(OUT_C); } task main () //課題1をこなすためのプログラム { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに設定 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに設定 while((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //両方のセンサーが反応なしの時 OnRev(OUT_A); //旋回 } while(SENSOR_1>=THRESHOLD) { //センサー1が反応したとき Off(OUT_A); OnFwd(OUT_A); Wait(20); //向きを調節。少し右を向く throw(); //投げる } while(SENSOR_3>=THRESHOLD){ //センサー3が反応した時 Off(OUT_A); OnRev(OUT_A); Wait(10); //向きを調節。少し左を向く throw(); //投げる } while((SENSOR_1>=THRESHOLD)&&(SENSOR_3>=THRESHOLD)) { //両方のセンサーが反応したとき Off(OUT_A); throw(); //投げる } } ***工夫点 [#eaf640f9] ●今後の作課題を楽にするためサブルーチンを積極的に活用した。 ***苦労した点 [#n3780b2d] ●この段階では特になし。 ***改善点 [#p4e59e23] ●光が当たっても、反応しない時がある。旋回速度が早すぎるのだろうか? ●他の班をみていると関数や変数(?)を使用しているところがある。研究して利用してみたい。 ***感想 [#e7a67eee] ●とりあえず課題はこなせた。時間があったらさらに高度なプログラムに挑戦したい。 **課題3の2 [#g4db3899] 担当:みずまる 動く光に反応しその光に向かって進むプログラムを作成した。課題通りである。 ***実際のプログラム [#g820f0af] #define THRESHOLD 53 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if ((SENSOR_1 > THRESHOLD ) && (SENSOR_3 > THRESHOLD )) { OnFwd(OUT_A); Wait(23); OnRev(OUT_A); Wait(12); } //光が目の前にある時直進する if ((SENSOR_1 < THRESHOLD ) && (SENSOR_3 > THRESHOLD )) { OnRev(OUT_A); } //光が左側にある時左に曲がる if ((SENSOR_1 > THRESHOLD ) && (SENSOR_3 < THRESHOLD )) { OnFwd(OUT_A); } //光が右側にある時右に曲がる if ((SENSOR_1 < THRESHOLD ) && (SENSOR_3 < THRESHOLD )) { OnRev(OUT_A); } //光が見当たらないとき左に半回転する } } ***工夫点 [#wcfb8fb1] ●センサーの反応によるすべてのパターンを入力し、どのような状況にも対処できるようにプログラミングした。 ***苦労した点 [#l5c3178f] ●光センサーがどのくらいの光で反応するかを数値をすこしづつ変えて実験的に決めたため、とても時間がかかってしまった。 ***改善点 [#g7c38fd4] ●場所によって光センサーの反応がかわってしまう。 ●少し動きが速すぎるような気がする。 ●if文を多用したためプログラムがうまくまとまらなかった。 ***感想 [#y6616d59] ●急ぎで作らなくてはならなかったため優れたプログラミングをすることができず特徴のあまりないプログラムになってしまい残念だった。 ●前回はプログラム担当ではなかったためプログラムに対する理解が遅れていたので思いのほか時間がかかってしまった。 **課題3の3 [#lf0d53db] 担当:いっせー 『懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。』という課題をこなすためのプログラム。 課題3の3では、光センサーを内側に向ける。簡単にセンサーの向きの調節可能にした利点を生かした。 &ref(2007a/A2/課題3右/200707051908000.jpg,40%,センサー向き変更後); ***実際のプログラム [#z1b5818a] #define THRESHOLD 65 //光の強さの境界を65に設定 #define RUN_TIME 500 //タイマー用の設定 sub straight() //前進用のプログラム { OnFwd(OUT_A); Wait(23); Off(OUT_A); OnRev(OUT_A); Wait(12); Off(OUT_A); //くねくねと進んでいく感じ } sub throw() //モノを投げるプログラム { Off(OUT_A); OnRev(OUT_C); Wait(15); Off(OUT_C); } task main() //課題3をこなすためのプログラム { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに設定 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに設定 while((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //両方のセンサーが反応していないとき OnFwd(OUT_A);} //旋回し光を探す while(SENSOR_1>=THRESHOLD){ //センサー1が反応したとき OnRev(OUT_A);} //光に向かって進む while(SENSOR_3>=THRESHOLD){ //センサー3が反応したとき OnRev(OUT_A);} //光に向かって進む while((SENSOR_1<THRESHOLD)&&(SENSOR_3<=THRESHOLD));{ //両方のセンサーが反応したとき ClearTimer(0); //タイマーカウント開始 straight(); //直進 until(FastTimer(0)>RUN_TIME){ //タイマーが5秒以上になったとき throw();}} //投げる } センサーの向きが1.2とは変わっているので、左右のセンサーへの対応が1.2とは逆になっている。 ***工夫点 [#mcc115cb] ●untilとタイマーという、既に持っている知識でを組み合わせたプログラムを組んだ。 ●シンプルにおさまった。修正も簡単。 ●センサーの向きを課題をこなしやすい向きに変えた。 ***苦労した点 [#wd1d0b70] ●特になし。既存の知識のみを利用したので簡単に組めた。 ***改善点 [#q57fe897] ●他の班の利用していた関数や変数もい使ったプログラムも組んでみたい。 ●センサーの向きを変えずに課題をこなすプログラムも時間があったら組んでみたい。 ***感想 [#y44d9f45] ●センサーを向きを調節可能にしたことを生かしてみた。そうしたことで、プログラムをかなり簡略化することができた。この点に関しては予想通りにいってよかった。 ●おなかが空いて早く帰りたい一心で組んだプログラムにしてはうまくできたと思う(笑) ***課題3の3改 [#z0ecaf38] (後日)くやしかったから変数使ってみた #define THRESHOLD 65 //光の強さの境界を設定 sub straight() //直進用のプログラム { OnFwd(OUT_A); Wait(23); Off(OUT_A); OnRev(OUT_A); Wait(12); Off(OUT_A); } sub throw() //モノを投げるプログラム { Off(OUT_A); OnRev(OUT_C); Wait(15); Off(OUT_C); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに設定 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに設定 int x; //変数の設定 int x_min=1,x_max=10; //変数Xの設定 while((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //両方のセンサーが反応していないとき OnFwd(OUT_A);} //旋回して光を探す while(SENSOR_1>=THRESHOLD){ //センサー1(右)が反応したとき OnRev(OUT_A);} //光に向かって進む while(SENSOR_3>=THRESHOLD){ //センサー3(左)が反応したとき OnRev(OUT_A);} //光に向かって進む while((SENSOR_1<THRESHOLD)&&(SENSOR_3<=THRESHOLD));{ //両方のセンサーが反応したとき for (x=x_min; x<=x_max; x++){ //変数の設定。値が1から10のとき straight();} //直進する throw();} //モノを投げる } タイマーを使っていたところを変数に置き換えただけなので、基本的にあまり変わらないが… *全体を通しての感想 [#lb5287f6] ●一週間という短期間の中でプログラムを3つ作らなくてはならなかったので予定を合わせて他の日に会わざるをえず、とても忙しい中での作業だった。(みずまる) ●ロボットが出来上がらないとプログラムが組めないということであせってしまい逆にロボットの製作に時間がかかってしまった。(みずまる) ●プログラムの製作は急ぎながらも正確におこわなければならなかったがとても良い経験になったと思う。(みずまる) ●センサーにはかなりこだわったし、時間もかけた。課題3の3でその工夫が生かせたのが最高にうれしかった。(いっせー) ●今回はプログラムよりもロボットに力を入れた。努力のかいあって良いものができて良かった。(いっせー) *コメントをどうぞ [#c078e5f3] -光センサーの工夫はなかなかのものではないでしょうか! 今後の更新に期待しています。 -- [[まいける(TA)]] &new{2007-07-05 (木) 00:30:38}; -途中までではあるが、なかなか見やすく作れていると思います。 -- [[ヒロヤ]] &new{2007-07-05 (木) 09:12:26}; #comment