[[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]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS