目次 #contents *課題3について [#i21b2f12] 詳しくは[[課題3>2017a/Mission3]]を参照。 *ロボットの紹介 [#p6230fd1] &ref(2017a/Member/kosih/Mission3/S_6506362960034.jpg,50%,robot); ロボットの全体像です。 ~&ref(2017a/Member/kosih/Mission3/maru.jpg,50%,robot); ~赤丸で囲った歯車は、一定以上の力を加えると空回りするものを使っています。また、この挟む動作では1つのモーターで両のはさみが連動するような工夫もなされています。 ~&ref(2017a/Member/kosih/Mission3/S_6511413658516.jpg,50%,robot); ~こちらは光センサーの位置を示しています。周りの囲いは先ほど紹介したはさみを支えるための支柱です。 ~&ref(2017a/Member/kosih/Mission3/gia.jpg,50%,robot); ~これはロボットの後方から見た図です。ここから見えるモーターで缶をはさみごと持ち上げます。 *ゴールまでの道筋 [#a15b6b8c] &ref(2017a/Member/kosih/Mission3/2017a-mission3.png,50%,robot); 緑丸で囲った缶をゴールまで運びます。 ~まず光センサーでスタート近くの缶を認識してつかみます。 ~その後時間で次の缶までの角度を決定し光センサーで感知するまで直進します。 ~缶を発見したら2つの缶を積んでゴールに押し込み終了です。 *プログラムの紹介 [#vb635f6a] 2つの機械を赤外線で連動させます。 **台車のプログラム [#j26b636c] #define signal_can 11 //積む側のプログラムに移行 #define signal_move 12 //台車側のプログラムに移行 #define signal_last 13 //最後ゴールの円に置く指示 #define turn_right(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_AC); //右回転 #define turn_left(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC); //左回転 #define back(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC); //後退 sub move_can() //缶を積む前と積んでいる最中の動き { OnRev(OUT_AC); until(Message() == signal_can); //缶を見つけるまで前進 OnRev(OUT_AC); //缶との距離を詰める Wait(150); Off(OUT_AC); until(Message() == signal_move); //缶上げ終わるまで停止 } sub tyokkaku() //90度曲がる部分の動き { OnFwd(OUT_C); OnRev(OUT_A); Wait(80); Off(OUT_AC); } sub last() //最後に缶をゴールに置く部分の動き { turn_left(31); SendMessage(signal_last); until(Message() == signal_move); back(100); } task main() { ClearMessage(); move_can(); tyokkaku(); move_can(); last(); } **昇降のプログラム [#v7d157be] #define signal_can 11 //積む側のプログラムに移行 #define signal_move 12 //台車側のプログラムに移行 #define signal_last 13 //最後缶をゴールに置く指示 #define close OnFwd(OUT_B); //アームを閉じる #define open(t) OnRev(OUT_B); Wait(t); Off(OUT_B); //アームを開く #define can_up(t) OnRev(OUT_A); Wait(t); Off(OUT_A); //アームを上げる #define can_down(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //アームを下げる #define can_find 28 //缶判別の値 sub hazime() //動き始め(缶を見つけるまでは何もしない) { Off(OUT_AB); until(SENSOR_2 < can_find); SendMessage(signal_can); Wait(150); //缶との距離を詰めている間少し待つ } sub ageru() //缶を持ち上げる { close; can_up(200); SendMessage(signal_move); } sub idoutyuu() //移動中缶を上げる(重さで少し下がってくるので) { while(SENSOR_2 < can_find){ can_up(10); Wait(20); } } sub tumu() //缶を積む { can_up(20); //上まで上げる SendMessage(signal_can); can_down(100); //缶を合わせる open(100); //開いて can_down(100); //下まで下げて次の缶を持ち上げる準備 } sub last() //最後ゴールに缶を置く時 { until(Message() == signal_last); can_down(200); SendMessage(signal_move); } task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); hazime(); ageru(); idoutyuu(); tumu(); ageru(); last(); } *結果 [#q9e1e13e] 1つ目の缶の判断までは良かったのですが‥。 ~昇降のシステムがうまく機能せずにあえなく失敗してしまいました。 *反省点 [#d6f0a7f7] 昇降システムが作動しなかった理由として考えられることは、ギアの組み合わせが悪かったことです。もっと小さいギアを採用していれば、昇降スピードは落ちたかもしれませんが少ない力で確実に上ってくれたはずです。 *感想 [#bde93628] 先生も授業の最後におっしゃっていましたが、いくら機械だからと言って結果が毎回同じになるとは限らないことを強く感じました。特に未熟者な私たちの設計では確実性に欠けます。少ない時間で効率的に問題解決への道筋を確立することはとても難しいことだと身をもって体験できました。 *おまけ [#oc623f87] 実はコンテストの2日前までは別のタイプのロボットで挑もうとしていました。直前の変更のせいで本番に失敗してしまったのかもしれませんが‥。せっかく途中まで作っていたので紹介させてください。 **試作品 [#x4b2a736] &ref(2017a/Member/kosih/Mission3/S_6506366824325.jpg,50%,robot); これはキャタピラを使って缶を積んでいくものでした。 ~&ref(2017a/Member/kosih/Mission3/S_6506366947224.jpg,50%,robot); ~写真の左側に壁を取り付け、見えている白いギアでその壁を左右に動かすことができます。それで缶を挟んでキャタピラで持ち上げる作戦でした。後はキャタピラを止めた時に缶が落ちてこないように、ある程度まで上ったら“弁”のようなシステムを取り入れるだけだったのですが・・・。 ~&ref(2017a/Member/kosih/Mission3/S_6506376668236.jpg,50%,robot); ~写真のようにどうしても缶が傾いてしまうのでこのシステムを断念しました。 ~写真のように弁に引っかかりどうしても缶が傾いてしまうのでこのシステムを断念しました。