- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017a/Member]]
*目次 [#gcd37d29]
#contents
*課題内容 [#cdefc364]
下記url課題3のページを参照
http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMission3
*ロボットの説明 [#ja8bf9ae]
**ロボット全体 [#naad3d18]
#ref(2017a/Member/irin/Mission3/各部の説明.jpg,100%,下げ時);
上図が積み上げ用アームを下げた時、下図が上げた時
#ref(2017a/Member/irin/Mission3/上げ時.JPG,100%,上げ時);
-缶をつかむ用のアームは、根元のモーターが回転するとことで開閉する。
-缶を積む用のアームは上下することで、缶を積むことができる。
-超音波センサーは前方の缶を検知するために設置した。
-レールは、缶をつかむとき、ずれない様にするため設置した。
**アーム部分の説明 [#g0b31468]
#ref(2017a/Member/irin/Mission3/アーム.png,100%,アーム);
缶をつかむ用のアームは左右で、可動する部分と稼動しない部分で分かれているので、缶を持つ際は挟み込むように持つ。
*プログラムの説明 [#g6975e47]
#!/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)
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')
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')
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)
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()
*今回の課題を振り返って [#m917d763]