コンテンツにスキップ
日本語

ジャイロと加速度センサー

ジャイロスコープは、各軸まわりのロボットの回転速度を ラジアン毎秒 で返します。スターターロボットでは gyro という名前です。

getValues() は [x, y, z] を返します。Y 軸が垂直方向 なので、getValues()[1] がロボットの旋回速度です。左に曲がるときに正の値になります。

左に曲がると正の値、右に曲がると負の値になる

回転速度にタイムステップを掛けた値を足し合わせると、回転した角度が求まります。速度に左右されないので、時間で旋回を制御するよりも確実です。

from controller import Robot
import math
robot = Robot()
timestep = int(robot.getBasicTimeStep())
left = robot.getDevice("left wheel motor")
right = robot.getDevice("right wheel motor")
left.setPosition(float("inf"))
right.setPosition(float("inf"))
gyro = robot.getDevice("gyro")
gyro.enable(timestep)
def turnLeft(angle):
turned = 0
left.setVelocity(-2)
right.setVelocity(2)
while abs(turned) < angle and robot.step(timestep) != -1:
turned += gyro.getValues()[1] * timestep / 1000 # Speed multiplied by the time, in seconds
left.setVelocity(0)
right.setVelocity(0)
turnLeft(math.pi / 2)
print("Turned 90 degrees")

スターターロボットでのテストでは、この方法で計算した角度は実際の回転と 0.01 ラジアン以内で一致しました。小さな誤差もゲーム中に積み重なるので、たとえば壁に合わせるなどして、できるときに向きを補正しましょう。

加速度センサーは、各軸方向の加速度を m/s² で返します。スターターロボットでは accelerometer という名前です。静止しているとき、getValues()[1] は重力にあたる約 9.8 になります。

慣性計測ユニット(inertial unit)はスターターロボットには付いていません。Robot Customizer で追加でき、デフォルトの名前は inertial_unit です。回転速度を足し合わせなくても、getRollPitchYaw() で向きを直接得られます。Webots のリファレンスを参照してください。