İçeriğe geç
Türkçe

Jiroskop ve ivmeölçer

Jiroskop, robotun her eksen etrafındaki dönüş hızını radyan/saniye cinsinden verir. Başlangıç robotunda adı gyro’dur.

getValues(), [x, y, z] döndürür. Y ekseni dikeydir, bu yüzden getValues()[1] robotun dönüş hızıdır. Robot sola dönerken pozitiftir.

Sola dönüş pozitif, sağa dönüş negatif bir değer verir

Dönülen açıyı bulmak için dönüş hızını zaman adımıyla çarpıp topla. Bu yöntem, dönüşü süreyle kontrol etmekten daha güvenilirdir, çünkü hıza bağlı değildir.

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")

Başlangıç robotunda yapılan bir testte, bu şekilde hesaplanan açı gerçek dönüşten en fazla 0,01 radyan farklıydı. Küçük hatalar bir oyun boyunca birikir; bu yüzden fırsat buldukça robotun yönünü düzelt (örneğin bir duvara hizalayarak).

İvmeölçer, her eksen boyunca ivmeyi m/s² cinsinden verir. Başlangıç robotunda adı accelerometer’dır. Robot dururken getValues()[1] yaklaşık 9,8 değerini verir; bu, yerçekimi ivmesidir.

Eylemsizlik birimi (inertial unit) başlangıç robotunda yoktur. Robot Customizer ile bir tane ekleyebilirsin; varsayılan adı inertial_unit’tir. Bu birim, dönüş hızlarını toplamana gerek kalmadan yönelimi doğrudan getRollPitchYaw() ile verir. Webots başvurusuna bak.