Mindstorms EV3 Direct Command
今回もロボットで、久しぶりにMindstorms EV3をテストしました。
今までと違ってダイレクトコマンドというものを使って制御します。
参考) https://ev3-dc.readthedocs.io/en/latest/examples_twowheelvehicle.html
このようなモータが2つついただけのシンプルな乗り物を動かしてみます。
ダイレクトコマンドは、EV3側にOSを入れたりせず、デフォルト状態のまま使用します。
環境) Python 3 / Raspberrypi 3
設定)
python3 -m pip install –user ev3_dc
sudo rfcomm bind 1 00:16:xx:xx:xx:xx
(MacアドレスはEV3固有のもの)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import ev3_dc as ev3 from thread_task import Sleep, Task from time import sleep import time my_vehicle = ev3.TwoWheelVehicle( 0.0209, # radius_wheel 0.1175, # tread protocol=ev3.BLUETOOTH, host='00:16:xx:xx:xx:xx', ) parcours = ( my_vehicle.task_straight(.3) + Sleep(.5) + Task(my_vehicle.stop) ) parcours.start(thread=False) time.sleep(1) parcours = ( my_vehicle.task_turn(45, .3) + Sleep(.5) + Task(my_vehicle.stop) ) parcours.start(thread=False) time.sleep(1) parcours = ( my_vehicle.task_turn(-45, .3) + Sleep(.5) + Task(my_vehicle.stop) ) parcours.start(thread=False) |
実行するとゆっくり前進、右にまがりながら45度くらい傾き、次は左にまがりながらもとにもどります。
左右のモータを同時に制御するためにタスクを使っていると思いますが、もう少しわかりやすい形のものを期待していました。
単独モータの制御を組み合わせて左右同時に動かすことにも、他のサンプルでトライしましたが、非同期にしても別々に動いてしまい、このAPIを使用しました。(もう少し研究が必要)
これまでMindstorms NXTではBluetoohシリアルの接続でダイレクトコマンド動作を確認していましたが、EV3ではできていませんでした。これができたことは有意義でした。
ダイレクトコマンドのいいところは、EV3側の事前準備が簡単なことです。(教室などで使う時、こういう手間が省けるのは結構重要なんですよね)
まだ使い勝手が悪いのですが、今回は備忘録として、とりあえずこのままで。
Category: 未分類