数秒間モーターを回転 - HondaLab/Robot-Intelligence GitHub Wiki

下記のコードでは, 例として3秒間だけ,AとDのインターフェイスにつないだモーターを回転さています.

下記のプログラムでロボットはどのような動きをすると予想されるでしょうか?

import ev3dev.ev3 as ev3
import time
     
mL = ev3.Motor('outA') # インターフェイスAにつないだモーターを mLと名前をつけます.
mR = ev3.Motor('outD') # インターフェイスDにつないだモーターを mRと名前をつけます.
mL.reset()
mR.reset()
     
now = time.time()
start = now
while now-start<3: # 3秒間下記の命令ブロックを繰り返します.
   mL.run_forever(duty_cycle_sp=50)
   mR.run_forever(duty_cycle_sp=-50)
   now=time.time()
     
mL.stop()
mR.stop()

左のモーターは50%の出力で前進し,右のモーターは50%の出力で後退します.(-50%) したがって,ロボット全体しては時計回り(右回り)に3秒間回転します.

3秒間右回転するレゴロボット

いくつかのパラメータを変更して,ロボットの動きがどう変化するか試してください.

run_direct をつかう

回転速度の指定にduty_cycle_spの値は-100から+100の値を指定するので,直感的にわかりやすい面があります. しかし, Speed Regulationがonになっている場合, 機能しない仕様となっています.

run_foreverの代わりに,run_directを使います. run_directのなかでは,duty_cycle_spが機能します.

import ev3dev.ev3 as ev3
import time

ts=ev3.TouchSensor('in1')
     
mL = ev3.Motor('outA')
mR = ev3.Motor('outD')
mL.reset()
mR.reset()
     
while ts.value()==0:
   mL.run_direct(duty_cycle_sp=50)
   mR.run_direct(duty_cycle_sp=50)
   time.sleep(0.1)
     
mL.stop()
mR.stop()

PythonでLEGOロボットをうごかすにもどる