概要
ev3devを用いてコマンドラインからmindstorm-EV3のモーターを制御したり、センサー値を取得することができます。
ev3devの環境構築についてはこちらを参考にして下さい。
モーターの制御
モーターはインテリジェントブロックのA~Dポートに接続することができます。
LモーターをAポートに、MモーターBポートにそれぞれ接続します。
接続されているモーターのファイルパスと接続ポート、モーターデバイス名を次のコマンドで確認できます。
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番ポートに接続することができます。
ジャイロセンサー、カラーセンサー、タッチセンサー、超音波センサをそれぞれ接続します。(順番は適当で大丈夫です)
接続されているセンサーのファイルパスと接続ポート、センサーデバイス名を次のコマンドで確認できます。
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 #黒