Lewati ke konten
Bahasa Indonesia

Giroskop dan akselerometer

Giroskop mengembalikan kecepatan rotasi robot terhadap setiap sumbu, dalam radian per detik. Pada robot pemula, namanya gyro.

getValues() mengembalikan [x, y, z]. Sumbu Y adalah sumbu vertikal, jadi getValues()[1] adalah kecepatan belok robot. Nilainya positif saat berbelok ke kiri.

Berbelok ke kiri memberikan nilai positif, dan berbelok ke kanan memberikan nilai negatif

Jumlahkan kecepatan rotasi dikalikan dengan time step untuk mendapatkan besar sudut putarnya. Cara ini lebih andal daripada mengendalikan belokan berdasarkan waktu, karena tidak bergantung pada kecepatan.

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

Dalam pengujian dengan robot pemula, sudut yang dihitung dengan cara ini cocok dengan rotasi sebenarnya hingga selisih 0,01 radian. Kesalahan kecil akan menumpuk selama permainan, jadi koreksi arah robot bila memungkinkan, misalnya dengan menyejajarkannya dengan dinding.

Akselerometer mengembalikan percepatan di sepanjang setiap sumbu dalam m/s². Pada robot pemula, namanya accelerometer. Saat diam, getValues()[1] terbaca sekitar 9,8, yaitu gravitasi.

Unit inersia (inertial unit) tidak ada di robot pemula. Dengan Robot Customizer kamu bisa menambahkannya, dengan nama bawaan inertial_unit. Unit ini memberikan orientasi secara langsung, dengan getRollPitchYaw(), jadi kamu tidak perlu menjumlahkan kecepatan rotasi. Lihat referensi Webots.