#author("2020-02-13T16:32:45+09:00","sumi","sumi") 目次 #contents [[2019b/Member]] *課題3 [#cf9550fe] [[2019b/Mission3]]を参照 自分たちの班はこの赤いラインに沿うようにロボットを動かした。 *ロボットの説明 [#td67ecdc] #ref(2019b/Member/sumi/Mission3/3_robot_all.jpg,50%,本体) 今回の課題では、前回の課題で得られたすべての機構はロボットの進行方向と同一にしたほうが正確性が高いというのをもとに、アーム、レーン、センサーのすべてを進行方向に設置した。 コントロールユニットは2つ使用しており、片方がライントレース用、もう片方がボールの確保と設置用となっている。お互いに通信させている。 **ボールを確保する機構 [#b854d808] #ref(2019b/Member/sumi/Mission3/catch.jpg,50%,ロボットレーン) これが今回ボールを確保する機構である。今回の課題では空き缶の上においてあるボールを確保する必要があった。そこで出る問題は、空き缶の軽さである。これによって、ボールを水平方向から確保するには抑えのような機構が必要になる。しかし、それでは必要になる機構が多くなってしまうので結果としてボールに対して鉛直方向からの力での確保が必須と考えたのでこの形となった。この機構は、レーンの下に輪ゴムを使ってボールを支えることで、ボールの自重では下に落ちず、ロボットの力で落とすことができるようになっている。 **ボールを空き缶の上に設置する機構 [#qf1aed33] #ref(2019b/Member/sumi/Mission3/set.jpg,100%,ロボットアーム) ボールをキャッチする機構をそのまま缶の上に押さえつけ、、その上にある機構の出っ張りによりボールが一つずつ出てくるようになっている。 #ref(2019b/Member/sumi/Mission3/set2.jpg,100%,ロボットアーム2) このアームには、直接ボールを掴むなどの機構などはなく先ほど説明したレーンとの組み合わせによりボールを缶の上に置くようになっている。具体的には、レーンの上のボールの下に缶があればアームでボールを上から押さえつけ、その状態でレーンを上げることによってボールを設置するという輪ゴムの性質を活かした機構となっている。 **ライントレースについて [#r7d9bd2a] #ref(2019b/Member/sumi/Mission3/raintresu.jpg,100%,ロボット目) 今回のライントレースでは、光センサーを2つ使用して首振りによる確保したボールの落下を防いで、正確性を向上させた。 **超音波センサーについて [#rcc4a8a1] #ref(2019b/Member/sumi/Mission3/3_sensor_us.jpg,100%,ロボット目) 前々から薄々きづいていたのだがこの超音波センサーの精度はお世辞にも良いものとは言えない。そこで今回は缶とボールに対して鉛直方向から観測することで、缶とボールがそこに存在するかどうかについての判断をさせた。 *プログラムについて [#t2a941ee] 今回、自分はプログラムの作成が本番に間に合わなかった。そこで、本番に使用したプログラミングをを載せておく。 **レース開始前のプログラムについて [#yf2084bc] 今回の課題では2つのコントロールユニットを使用するので完全に通信してしているかや、正確性(超音波センサー、アームやレーンの初期位置など)の確保のためのプログラムを作成した。 ***通信が正常かどうかの確認 [#w8e7911f] void m_con(){//接続 int x; while(x!=4){ ReceiveRemoteNumber(MAILBOX1,false,x); } PlayTone(700,200); } これはマスター側のプログラムで、これを押してスレイブからの反応があれば音がなるようになっている。 #define con 4 void s_con(){//接続 SendResponseNumber(MAILBOX1,con);PlayTone(700,200); } 返す番号は4でこれをマスターの1のメールボックスにかえす。これにより接続が完了しているか否かについて知ることができる。 ***アームやレーンの初期位置の固定化 [#f081cbb6] void reset(){//初期位置 ResetTachoCount(OUT_BC); OnFwd(OUT_B,20);Wait(800);//キャッチ機構をめいっぱい後ろに倒す OnFwd(OUT_C,45);Wait(1200);//アームをめいっぱい後ろに倒す RotateMotor(OUT_B,-20,10);//キャッチ機構を少し前に倒す OnFwd(OUT_C,-20);Wait(1700);//アームを前に倒す OnFwd(OUT_B,-20);Wait(400);//キャッチ機構がアームに引っかかるまで前に倒す Off(OUT_BC); }