LoginSignup
4
1

More than 5 years have passed since last update.

mindstorm-EV3 ev3devでコマンドラインからモーター制御、センサー値取得する方法まとめ

Last updated at Posted at 2016-12-14

概要

ev3devを用いてコマンドラインからmindstorm-EV3のモーターを制御したり、センサー値を取得することができます。
ev3devの環境構築についてはこちらを参考にして下さい。

mindstorm-EV3をLinuxで制御しよう! ev3dev OSのインストールととSSH接続

モーターの制御

モーターはインテリジェントブロックのA~Dポートに接続することができます。
LモーターをAポートに、MモーターBポートにそれぞれ接続します。
P_20161214_183727_1.jpg

接続されているモーターのファイルパスと接続ポート、モーターデバイス名を次のコマンドで確認できます。

robot@ev3dev:~$ for f in /sys/class/tacho-motor/*; do echo -n "$f: "; cat $f/address $f/driver_name;echo $""; done

実行結果(*モーターを接続したポートによって変わります)
/sys/class/tacho-motor/motor0: outA
lego-ev3-l-motor

/sys/class/tacho-motor/motor1: outB
lego-ev3-m-motor

それぞれのモーターについて制御方法を解説します。

Lモーター(lego-ev3-l-motor)


ファイルパスが長くなるので変数にします。
robot@ev3dev:~$ export MC=/sys/class/tacho-motor/motor0

使用できるコマンド

robot@ev3dev:~$ cat $MC/commands                       
run-forever run-to-abs-pos run-to-rel-pos run-timed run-direct stop reset
  • run-forever
    回転維持(速度変更が静的に反映)
    速度パラメータは/sys/class/tacho-motor/motor0/speed_spに定義する
  • run-to-abs-pos
    絶対位置へ回転
    位置パラメータは/sys/class/tacho-motor/motor0/position_spに定義する
  • run-to-rel-pos
    相対位置へ回転
    位置パラメータは/sys/class/tacho-motor/motor0/position_spに定義する
  • run-timed
    指定秒数回転
    秒数パラメータは/sys/class/tacho-motor/motor0/time_spに定義する
  • run-direct
    回転維持(スピード変更が動的に反映)
    速度パラメータは/sys/class/tacho-motor/motor0/duty_cycle_spに定義する
  • stop
    回転停止
  • reset
    全てのパラメータをリセットする

詳しくは下記URLを参照してください。
http://www.ev3dev.org/docs/tutorials/tacho-motors/

モーターを回転、停止

速度パラメータspeed_spを400に設定し回転維持させる

speed_spには-1050~1050の値を設定できます。数値が大きいほど速度が増します。負の値を設定すると逆回転します。

robot@ev3dev:~$ echo 400 > $MC/speed_sp 
robot@ev3dev:~$ echo run-forever > $MC/command 
速度パラメータspeed_spを200に変更する

速度パラメータを変更してもモーターの回転速度には動的に反映されません。もう一度run-foreverコマンドを実行する必要があります。

robot@ev3dev:~$ echo 200 > $MC/speed_sp 
robot@ev3dev:~$ echo run-forever > $MC/command 
モーターを停止させる
robot@ev3dev:~$ echo stop > $MC/command 

Mモーターの制御


Lモーターと基本的に同様に制御できるので割愛します。
速度パラメータspeed_spの設定可能範囲が(-1560~1560)になるところがLモーターとは違います。
詳しくは下記URLを参照してください。
http://www.ev3dev.org/docs/tutorials/tacho-motors/

センサー値の取得

センサーはインテリジェントブロックの1~4番ポートに接続することができます。
ジャイロセンサー、カラーセンサー、タッチセンサー、超音波センサをそれぞれ接続します。(順番は適当で大丈夫です)
P_20161214_184324_1.jpg

接続されているセンサーのファイルパスと接続ポート、センサーデバイス名を次のコマンドで確認できます。

robot@ev3dev:~$ for f in /sys/class/lego-sensor/*; do echo -n "$f: "; cat $f/address $f/driver_name;echo $''; done

実行結果(*センサを接続したポートによって変わります)

/sys/class/lego-sensor/sensor4: in1
lego-ev3-gyro

/sys/class/lego-sensor/sensor5: in2
lego-ev3-us

/sys/class/lego-sensor/sensor6: in3
lego-ev3-touch

/sys/class/lego-sensor/sensor7: in4
lego-ev3-color

それぞれのセンサーについて値の取得方法を解説します。

ジャイロセンサー(lego-ev3-gyro)

ジャイロセンサーのモード

センサーのモードを設定することで、モードに対応した値を取得できます。

robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor4/modes
GYRO-ANG GYRO-RATE GYRO-FAS GYRO-G&A GYRO-CAL
mode 説明 単位 ファイル 値の範囲
GYRO-ANG 角度 deg (degrees) value0 32768 ~ 32767
GYRO-RATE 回転速度 d/s (degrees/second) value0 -440 ~ 440
GYRO-FAS センサーの生データ - value0 -1464 ~ 1535
GYRO-G&A 角度と回転速度 - 角度:value0、回転速度:value1  角度:(32768 ~ 32767)、回転速度(-440 ~ 440)
GYRO-CAL 較正値 - value0 value1 value2 value3 ?

詳しくは下記URLを参照下さい
http://www.ev3dev.org/docs/sensors/lego-ev3-gyro-sensor/
例えば、角度を取得したい場合は、表より/sys/class/lego-sensor/sensor4/modeにGYRO-ANGを書き込み、/sys/class/lego-sensor/sensor4/value0をcatすれば良いと分かります。

robot@ev3dev:~$ echo GYRO-ANG >> /sys/class/lego-sensor/sensor4/mode
robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor4/value0
24452

超音波センサー(lego-ev3-us)

超音波センサのモード

robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor5/modes
US-DIST-CM US-DIST-IN US-LISTEN US-SI-CM US-SI-IN US-DC-CM US-DC-IN

超音波センサーのモードについては下記URLを参照して下さい。
http://www.ev3dev.org/docs/sensors/lego-ev3-ultrasonic-sensor/

障害物までの距離(mm)を取得

robot@ev3dev:~$ echo US-DIST-CM >> /sys/class/lego-sensor/sensor5/mode
robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor5/value0
70

タッチセンサー(lego-ev3-touch)

タッチセンサーのモード

robot@ev3dev:~$ robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor6/modes
TOUCH

タッチセンサーのモードについては下記URLを参照して下さい。
http://www.ev3dev.org/docs/sensors/lego-ev3-touch-sensor/

タッチを検出

タッチされていたら1されていなかったら0を出力します。

robot@ev3dev:~$ echo TOUCH >> /sys/class/lego-sensor/sensor6/mode
robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor6/value0
0 #タッチされていない

カラーセンサー(lego-ev3-color)

カラーセンサーのモード

robot@ev3dev:~$ robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor7/modes
COL-REFLECT COL-AMBIENT COL-COLOR REF-RAW RGB-RAW COL-CAL

タッチセンサーのモードについては下記URLを参照して下さい。
http://www.ev3dev.org/docs/sensors/lego-ev3-color-sensor/

色の判定

対象の色を識別します。出力値と色の対応関係は以下のようになっています。

出力
0 色無し
1
2
3
4
5
6
7
robot@ev3dev:~$ echo TOUCH >> /sys/class/lego-sensor/sensor7/mode
robot@ev3dev:~$ cat /sys/class/lego-sensor/sensor7/value0
1 #黒

参考

ev3dev 公式ページ

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1