2015年10月23日
- EV3技術情報
- Java
- ソフトウェア
EV3-Java ジャイロセンサーの制御方法
Java言語で作成したプログラムで、EV3のジャイロセンサーを制御する方法を、サンプルプログラムを用いて紹介します。
※EV3のJava言語プログラミング環境については、「教育版EV3 Javaプログラミングガイド」をご参照ください。
※ここで紹介する内容は、leJOS EV3 バージョン 0.9.0-betaを用いて動作を確認したものです。
下図のプログラムは、ジャイロセンサーを用いて、EV3の車型ロボットを反時計回りに360度せん回させて停止させるものです。
各センサーとモーターは、以下のように接続されているものとします。
・左タイヤのLモーター:ポートB
・右タイヤのLモーター:ポートC
・ジャイロセンサー:ポート2
package gyroSample;
import lejos.hardware.lcd.LCD; import lejos.hardware.port.SensorPort; import lejos.hardware.sensor.EV3GyroSensor; import lejos.hardware.sensor.SensorMode; import lejos.hardware.motor.Motor; import lejos.robotics.RegulatedMotor; import lejos.utility.Delay;
public class GyroSample { static EV3GyroSensor gyroSensor = new EV3GyroSensor(SensorPort.S2); static RegulatedMotor leftMotor = Motor.B; static RegulatedMotor rightMotor = Motor.C;
public static void main(String[] args) { // ジャイロセンサーのモード設定と角度リセット SensorMode gyro = gyroSensor.getMode(1); …(※1) float value[] = new float[gyro.sampleSize()]; ??????????????? gyroSensor.reset(); …(※2)
??????????????? // モーターのスピード設定 ??????????????? leftMotor.setSpeed(100); ??????????????? rightMotor.setSpeed(100);
??????????????? // Lcdにジャイロセンサーのモードを表示 ??????????????? LCD.clear(); ??????????????? LCD.drawString("Mode : " + gyro.getName(), 1, 0); ??????????????? LCD.refresh();
??????????????? // ジャイロセンサーの値を取得 ??????????????? gyro.fetchSample(value, 0); …(※3) ??????????????? // モーターを回転 ??????????????? leftMotor.backward(); ??????????????? rightMotor.forward();
??????????????? // ジャイロセンサーの値が360度以上になるまでくり返し ??????????????? while( value[0] <= 360 ){ ??????????????????????? // Lcdにジャイロセンサーの値を表示 ??????????????????????? LCD.drawString("Value : " + value[0] , 1, 1); ??????????????????????? LCD.refresh(); ??????????????????????? // ジャイロセンサーの値を取得 ??????????????????????? gyro.fetchSample(value, 0); …(※3) ??????????????? } ??????????????? // モーターを停止 ??????????????? leftMotor.stop(); ??????????????? rightMotor.stop();
??????????????? Delay.msDelay(5000); ??????? } } |
ジャイロセンサーの値を取得するために、3つのモードが用意されています。
各モードと取得できる値は下表のとおりです。
ここではAngleモードを使用し角度を取得しています。(※1)
ID | モード | 取得できる値 |
---|---|---|
0 | Rate | 角速度(deg/s) |
1 | Angle | 角度(deg) |
2 | Angle and Rate | 角度と角速度 |
ジャイロセンサーをリセットするには、reset()メソッドを使用します。(※2)
ジャイロセンサーの値は、他のセンサーと同様にfetchSample()メソッドを使って取得します。(※3)
ここで取得できる値は、反時計回り方向への動きに対してプラスの値を時計回り方向への動きに対してマイナスの値を示します。