2017a/Member

課題3 空き缶収集&積み上げロボット

空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる

課題3

ロボットについて

ev31

アームは平行四辺形にしてアームを水平にできるようにした。また前に重心がかかりすぎるため、後ろに漬物石(EV3)を設置した。

ev32
ev33
ev34

プログラミングについて

プログラム

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import ev3dev.ev3 as ev3
import time
mR=ev3.LargeMotor('outA') #右モーター
mL=ev3.LargeMotor('outB') #左モーター
mT=ev3.LargeMotor('outC') #アーム
mA=ev3.LargeMotor('outD') #ハンド
us=ev3.UltrasonicSensor('in1') #超音波センサー
t1=time.time() #缶の探索の片方への旋回時間
t2=time.time() #探索開始から感知するまでの時間
minimum=10000 #缶との距離の最小値
def search():#seach for cans while spinning 
  global t1
  global t2
  global minimum
  while time.time()-t1<5:#search around
      mR.run_forever(duty_cycle_sp=50,speed_sp=-10)
      mL.run_forever(duty_cycle_sp=50,speed_sp=10)
      if minimum>=us.value():#not minimum
          minimum=us.value()
      if minimum<us.value():#minimum
          t2=time.time()
  while time.time()-t1>=5 and time.time()-t1<=5.5+t2 and us.value()>minimum:#research
      mR.run_forever(duty_cycle_sp=50,speed_sp=10)
      mL.run_forever(duty_cycle_sp=50,speed_sp=-10)

一定の時間缶との距離を旋回しながら測定し、距離が小さくなる都度最小値を更新していき、距離が最小値より大きくなった時をt2とおく。 反対方向に旋回を始め、最小値より小さい値を感知するか、t2を基準とした時間になるまで続ける。

def catch():#catch the can
  while us.value()>40:
      mR.run_forever(duty_cycle_sp=50,speed_sp=-100 
      mL.run_forever(duty_cycle_sp=50,speed_sp=-100)
  else :
      mR.run_timed(time_sp=800,duty_cycle_sp=40,speed_sp=100)
      mL.run_timed(time_sp=800,duty_cycle_sp=40,speed_sp=100)
      time.sleep(1.5)
      mT.run_timed(time_sp=1000,duty_cycle_sp=40,speed_sp=100,stop_action='brake')
      time.sleep(1)
      mA.run_timed(time_sp=2000,duty_cycle_sp=30,speed_sp=100,stop_action='hold')
      time.sleep(2)
      mT.run_timed(time_sp=2000,duty_cycle_sp=40,speed_sp=-100,stop_action='hold')

searchで缶の真正面を向いているため、まっすぐ走って一定の距離まで近づいて、距離を調整して缶をつかんで持ち上げる。

def build():#pile the cans
  while us.value()>40:
      mR.run_forever(duty_cycle_sp=50,speed_sp=-100)
      mL.run_forever(duty_cycle_sp=50,speed_sp=-100)
  else :
      mR.run_timed(time_sp=800,duty_cycle_sp=40,speed_sp=100)
      mL.run_timed(time_sp=800,duty_cycle_sp=40,speed_sp=100)
      time.sleep(1.5)
      mT.run_timed(time_sp=650,duty_cycle_sp=70,speed_sp=40,stop_action='hold')
      time.sleep(1.5)
      mA.run_timed(time_sp=2000,duty_cycle_sp=30,speed_sp=-100,stop_action='hold')
      time.sleep(1.5)
      mR.run_timed(time_sp=1200,duty_cycle_sp=40,speed_sp=100)
      mL.run_timed(time_sp=1200,duty_cycle_sp=40,speed_sp=100)
      time.sleep(1.5)
      mT.run_timed(time_sp=2000,duty_cycle_sp=70,speed_sp=30,stop_action='brake')
      time.sleep(2)
      mA.run_timed(time_sp=2000,duty_cycle_sp=30,speed_sp=100,stop_action='hold')
      time.sleep(2)
      mT.run_timed(time_sp=710,duty_cycle_sp=40,speed_sp=-100,stop_action='hold')

はじめはcatchと同じ。缶を次の缶の上に置き、、一度放して位置を調節して根本から持ち上げる。

def end():#get out of the goal
  mR.run_timed(time_sp=1000,duty_cycle_sp=50,speed_sp=200)
  mL.run_timed(time_sp=1000,duty_cycle_sp=50,speed_sp=200)

すべての動作の後に、ゴールから出る。

for loop in [0]:
  search()
  mR.stop()
  mL.stop()
  time.sleep(2)
  catch()
  time.sleep(2)

一個目はcatchなのでループを変えておく。 

for loop in [0]:
  t1=time.time()
  search()
  mR.stop()
  mL.stop()
  time.sleep(2)
  build()
  time.sleep(2)

二個目以降のループ。

mR.run_timed(time_sp=3000,duty_cycle_sp=50,speed_sp=-55)
mL.run_timed(time_sp=3000,duty_cycle_sp=50,speed_sp=-120)
time.sleep(3)
mR.run_timed(time_sp=1500,duty_cycle_sp=50,speed_sp=-200)
mL.run_timed(time_sp=1500,duty_cycle_sp=50,speed_sp=-200)
time.sleep(3)
mR.stop()
mL.stop()

位置の調節

mA.run_timed(time_sp=1000,duty_cycle_sp=30,speed_sp=-40)
time.sleep(3)
mA.run_timed(time_sp=2000,duty_cycle_sp=30,speed_sp=-110,stop_action='brake')
end()
time.sleep(2)

ゆっくり缶を放す。その後ゴールから出る。

mT.reset()

mTのホールドを解く

結果

0点(空き缶が詰めるが枠に入らなかったり、枠に入るが空き缶がつめなかったり)

反省点

やはり今回の一番の問題は時間がなかったという事だと思う4人中1人しか課題の発表前の調整できる人がいなかったりして、本来ライントレースすればきれいに重ねられると思うが時間がなかったのでその調整でさえできなかった。これからはもっと濃密い計画したいと思う。


添付ファイル: fileev3_5.jpg 33件 [詳細] fileev3_4.JPG 71件 [詳細] fileev3_3.JPG 58件 [詳細] fileev3_2.JPG 75件 [詳細] fileev3_1.JPG 64件 [詳細] filekadai3.png 67件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-14 (月) 01:07:09 (740d)