はじめに
この記事はleJOSの開発環境が整っていることが前提にしています。
詳しくはこちらの記事を参考にして下さい。
【leJOS】mindstorm-EV3をJavaでプログラミングしよう【環境構築前編】
【leJOS】mindstorm-EV3をJavaでプログラミングしよう【環境構築後編】
概要
leJOSでEV3のモーターを制御するAPIの一部を紹介します。
基本的なモーター制御は紹介するメソッドだけ抑えておけば実現できるでしょう。
また、具体的にどのようにAPIを利用すればいいのかを簡単なサンプルプログラムで示したいと思います。
API
LモーターをEV3本体のポートAに接続しましょう。
(Lモーター)
EV3LargeRegulatedMotorクラス
Lモーターの制御にはEV3LargeRegulatedMotorクラスが利用できます。
RegulatedMotor m = new EV3LargeRegulatedMotor(MotorPort.A);
メソッド
主に利用するメソッドを紹介します。
addListener
public void addListener(RegulatedMotorListener listener)
モーターの回転開始、停止のイベントを登録できます。
removeListener
public void removeListener()
イベントを削除します。
forward
public void forward();
モーターを正回転させます。
stopが呼ばれるまで停止しません。
backward
public void backward()
モーターを逆回転させます。
stopが呼ばれるまで停止しません。
stop
public void stop()
モーターを停止させます。
rotate
public void rotate(int angle)
現在位置から相対的に、引数に指定した角度分回転します。
rotateTo
public void rotateTo(int limitAngle)
引数に指定した絶対角度まで回転します。
close
public void close()
モーターへのアクセスを閉じ、リソースを解放します。
flt
public void flt()
モーターをフロートモードに設定します。
制動なしでモーターが停止するため、モーターの位置は維持されません。
getSpeed
public int getSpeed()
現在の回転速度を返します。
getRotationSpeed
public int getRotationSpeed()
現在の加速度を返します。
getAcceleration
public int getAcceleration()
現在の角速度(degree/s/s)を返します。
getPosition
public float getPosition()
モーターの現在位置の角度を返します。
getLimitAngle
public int getLimitAngle()
モーターが回転する最大位置角度を返します。
getMaxSpeed
public float getMaxSpeed()
モーターに設定できる最大の回転速度を返す。
isMoving
public boolean isMoving()
モーターが回転しているなら真を返します。
isStalled
public boolean isStalled()
モーターが停止しているなら真を返します。
lock
public void lock(int power)
モータはfltメソッドを使用してフロートモードに設定されていない限り、ポジションを保持しようとします。
引数に保持する力の強さを1〜100の間で設定します。
setSpeed
public void setSpeed(int speed)
モーターの回転速度を設定します。
setAcceleration
public void setAcceleration(int acceleration)
引数に渡したモーターの角速度を設定します。
デフォルトでは(6000degree/s/s)になっています。
Mモーター
Mモーターの制御にはEV3MediumRegulatedMotorクラスを利用します。
使えるメソッドはEV3LargeRegulatedMotorクラスと基本的に殆ど変わりはないので説明は割愛します。
(Mモーター)
サンプルプログラム
回転速度などを変化させてモーターを動かすだけの簡単なサンプルプログラムです。
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.robotics.RegulatedMotor;
import lejos.utility.Delay;
public class Ev3MotorSample {
public static void main(String[] args) {
RegulatedMotor m = new EV3LargeRegulatedMotor(MotorPort.A);
m.forward();
Delay.msDelay(2000);
m.stop();
m.backward();
Delay.msDelay(2000);
m.stop();
m.setSpeed((int) m.getMaxSpeed());
m.forward();
Delay.msDelay(2000);
m.stop();
m.backward();
Delay.msDelay(2000);
m.stop();
m.setAcceleration(3000);
m.rotate(720);
m.setAcceleration(6000);
m.rotate(-720);
}
}
参考
紹介したAPIは一部のみです。より詳しい情報を知りたい方は公式ドキュメントを参考にしましょう。
https://sourceforge.net/p/lejos/wiki/Motors/