2010a 目次
詳しい内容はここを見て下さい
オレンジ、としぞう、タツヤ、マキロンの4名により構成されています。
今回は土台と球を取ってくる(ショベル)の二体のロボを使い、土台により障害を越え、もう一台を反対側に送り、球を回収し帰ってくるといった動きさせようと思いました。
そのさいメッセージも使うことが目標でした。
前面にタッチセンサー、光センサーを装備。シャベルロボを乗せる土台部分、それを支える車体部分により構成されています。
このロボがライントレースをし障害物まで行ったら橋を渡します。
最初はRCXの本体は横に寝かせて使用していましたが、それだとメッセージが送ることが出来ず目標を果たすことが出来ませんでした。
そのためRCXを立てて使用することにしました。そうする事でメッセージを送る事が出来るようになりましたが、また問題が発生してしまいました。
強度の問題です、今までRCXで支えていた部分が無くなってしまったので弱くなってしまったのと、RCXを立てて固定するのが難しく不安定になっていました。
そこで車体部分を伸ばしRCXを下から支え、上の方は土台部分で囲うようにする事で固定しました。これによりそこそこ強度は上がりましたが、十分とはいえませんでした。
もっと車体部分を工夫出来たらよかったと思います。
前面に備え付けられたシャベルにより球をすくい後方のカゴ部分に入れるロボです。
球をすくう際に囲っている枠に引っかかってしまったので、そうならないかつ球をすくいやすいようにシャベルを支えているアーム部分の長さを調節しました。
さらに球が回収しやすいようにシャベルを下した時、地面になるべく平行になるようにアームの角度などを工夫をしました。
#define eye_L SENSOR_1 //SENSOR_1をeye_Lと定義 #define eye_R SENSOR_3 //SENSOR_3をeye_Rと定義 #define touch SENSOR_2 //SENSOR_2をtouchと定義 #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);//前進 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);//後退 #define turn_L(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);//左回転 #define turn_R(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);//右回転 #define planA 10 //土台が障害物に到達したらシャベルを動かすメッセージ #define planB 11 //シャベルが土台に戻ったら土台を動かすメッセージ #define THRESHOLD 40 //閾値
task main() { SetSensor(eye_R, SENSOR_LIGHT);//センサー1に光センサーをセット SetSensor(eye_L, SENSOR_LIGHT);//センサー3に光センサーをセット SetSensor(touch, SENSOR_TOUCH);//センサー2にタッチセンサーをセット ClearMessage(); //メッセージの値を0に初期化 while(true) {go(200); //スタート位置から出る turn_L(90); //左に90回転しラインに乗る start follow_line;//ライントレース開始 if(touch==1) //タッチセンサーが反応したら {stop follow_line; //ライントレースを止める SendMessage(planA); //メッセージplanAを送る } else if(Message()==planB) //メッセージplanBを受けとったら { back(300); //ここからはスタート位置に帰るプログラムです turn_L(90); back(200); turn_R(90); back(200); turn_R(90); back(150);//スタート位置に入る Off(OUT_A+OUT_C);//停止 } } } task follow_line() //ライトレースのプログラムです { SetSensor(eye_R,SENSOR_LIGHT); SetSensor(eye_L,SENSOR_LIGHT); while(true) { if((eye_R>THRESHOLD)&&(eye_L>THRESHOLD)) //両方しろの時前進 { go(5); } else if((eye_L<THRESHOLD)&&(eye_R>THRESHOLD)) // 1が黒線上の時左に回転 { turn_R(5); } else if((eye_L>THRESHOLD)&&(eye_R<THRESHOLD)) //3が黒線上の時右に回転 { turn_L(5); } else if((eye_R<THRESHOLD)&&(eye_L<THRESHOLD)) //両方黒線上一時停止し右に90度回転 { Off(OUT_A+OUT_C); Wait(100); turn_R(90); go(10); } } Off(OUT_A+OUT_C); }
#define touch_F SENSOR_1 //SENSOR_1をtouch_Fと定義 #define touch_B SENSOR_2 ///SENSOR_1をtouch_Bと定義 #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);//前進 #define back(t) OnRev(OUT_A+OUT_C);Wait(t)//後退 #define turn_L(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);//左回転 #define turn_R(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);//右回転 #define planA 10 //土台が障害物に到達したらシャベルを動かすメッセージ #define planB 11 //シャベルが土台に戻ったら土台を動かすメッセージ task main() { SetSensor(touch_F,SENSOR_TOUCH);//センサー1にタッチセンサーをセット SetSensor(touch_B,SENSOR_TOUCH);//センサー2にタッチセンサーをセット ClearMessage(); //メッセージの値を0に初期化 while(true) { until(Message()==planA); //メッセージplanAを受けとったら OnFwd(OUT_A+OUT_C); //タッチセンサーが反応するまで前進 until(touch_F==1); //タッチセンサーが反応したら repeat(3) //球をすくう動作を三回繰り返す { back(20);//少し後退 OnFwd(OUT_B);//シャベル下げ Wait(20); go(20);//少し前進して球をシャベルに入れる OnRev(OUT_B);//シャベル上げ Wait(20); } OnRev(OUT_A+OUT_B+OUT_C);//シャベルを上げながら後退 until(touch_B==1);//touch_Bが反応したら Off(OUT_A+OUT_B+OUT_C);//停止 SendMessage(planB);//メッセージplanBを送る } }
ロボットの難しさを再確認することになりました。パッと作って、さっと動くなんてことが無いことを実感させられて現実の厳しさを知りました。次、ロボットにかかわることがあれば時間をかけていきたいと思います。
とにかく時間がなくて、当日もメンバーに全部任せていました。すみません。
このゼミを終えて、チームで何か一つの目標に向かって作業することの面白さ、大変さを知ることができたと思います。
しかしまあ、かなりきついゼミでした。みんなおつかれ。
今回の反省点はロボコンの前に全員で集まる事をしなかったという事です。もっとみんなで連携出来ていれば、もっと良いものが出来たのかと思うと残念です。
ロボティクスのゼミを終えてロボを思いどうりに動かす事がとても難しということを思い知りました。それによりちゃんと動いている身の回りにある電子機器がいかにすごいのか分かる事が出来ました。今後このゼミで学んだ事を生かしていきたいです。大変なゼミでしたがロボ以外でも学べることも多くまた、楽しかったです。最後に僕に付き合ってくれたチームのみんな有難う。
ごっつっ大変だった。
ロボットは単純に自分の指示通りに動くだろうと少しなめていたが、実際は自分の想像通りに動かすことがとても大変な作業だということを知った。
ロボコンの右側10cmのスペースが謎だった。
コメントをどうぞ