(詳しい説明はhttp://yakushi.shinshu-u.ac.jp/robotics/?2018a%2FMission3を参照下さい)
アームはマジックハンド状で,ミディアムモーターを使用し4つの歯車を回転させ,両端にある大きめの歯車にアーム中央部を固定することでアームを伸縮させる.
それと同時にアームの両端にあるハンド部分が閉じることで缶を掴むことが出来る.
またハンド部分にゴムが取り付けてあり缶が滑り落ちないようになっている.
エレベータは缶をアームユニットごと昇降させるための機構である.2つの縦に設置されたキャタピラとそれを回転させるためのモーター,歯車から成り立っている.
ラージモーターのついたタイヤが2つ並んでおり,別々に動かせる.
地面の色を判別するセンサー。これを使用し円XとYを結ぶ黒い線を認識させる。
#!/usr/bin/env python3 from ev3dev.ev3 import * from time import sleep mA = MediumMotor('outA') mH = LargeMotor('outB') mR = LargeMotor('outC') mL = LargeMotor('outD') cs = ColorSensor('in1') cs.mode = 'COL-REFLECT' ロボットを動かすための基本的なプログラムと,モーターやセンサーの定義付け.
mA.reset() mH.reset() mR.reset() mL.reset()
def move_position(R,L,s): mR.run_to_rel_pos(position_sp=R, speed_sp=50, stop_action='brake') mL.run_to_rel_pos(position_sp=L, speed_sp=50, stop_action='brake') sleep(s) ロボットを移動させる.R,Lはそれぞれ左右のタイヤを回転させる角度. sはその秒数だけ次の命令の実行を遅らせる(以下の関数でも同じ)
def move_arm(x,s): mA.run_to_rel_pos(position_sp=x, speed_sp=100, stop_action='brake') sleep(s) アームを伸縮させる.xはモーターの回転角度=腕の伸び&手の閉じ具合
def move_high(x,s): mH.run_to_rel_pos(position_sp=x, speed_sp=130, stop_action='brake') sleep(s) エレベーターを上下させる.同じくxはモーターの回転角度=エレベーターの変位.
def move_straight(): t0 = time.time() while time.time() - t0 < 0.3: mR.run_to_rel_pos(position_sp=20, speed_sp=50, stop_action='brake') mL.run_to_rel_pos(position_sp=20, speed_sp=50, stop_action='brake') if cs.value() >= 75: t0 = time.time() センサーが黒線を認識する( cs.value() >= 75となる)まで前進する.
move_position(920,920,18) move_position(180,-180,8) move_position(360,360,10) move_straight() スタート地点からXとYの中点まで移動する.1-3行目は予め定めた距離だけ動かし 4行目によってXとYを結ぶ線で停止する.
move_arm(700,6)#その位置から腕を伸ばして下の缶2つを掴み move_position(380,-380,11)#約180度ターンして move_arm(-300,6)#缶を置く
move_high(1500,15)#2段目の缶の高さまでアームを上げ move_arm(300,6)#2段目の缶を掴み move_high(800,10)#持ち上げる
move_position(-200,200,8)#再び約180度ターンするが今回は途中で一旦止まり move_high(-2300,16)#缶を地面近くまで降ろして move_position(-150,135,8)#ターンを続行 move_arm(-300,6)#缶を離す
mA.reset() mH.reset() mR.reset() mL.reset()#モーターをリセット
工夫した点は,ロボットが大きいためバランスを崩しがちであったが,写真のモーターとタイヤを重りとして使用し解決した.
今回の課題について:アームの形は「エリアの中点で左右対称の動きをすれば2つのエリアに効率よく缶を置けるのではないか」という発想から生み出され
2つ目のEV3との通信やカラーセンサー以外のセンサーを使用しなかったり缶を積まずに並べた状態でフィニッシュしたのは期末テストなどで全員時間がないため
できるだけシンプルにしたいという理由であった.
僕が考えるにこの課題は,早期から到達が困難でない目標を設定しそれに向かって作業を進めたことが勝因である.