跳到內容
中文(繁體)

陀螺儀與加速度計

陀螺儀會回傳機器人繞各軸轉動的速度,單位是弧度每秒。在入門機器人上,它的名稱是 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 參考文件。