Lewati ke konten
Bahasa Indonesia

Gerakan

Robot punya dua roda, masing-masing dengan motornya sendiri: left wheel motor dan right wheel motor pada robot pemula. Kamu menggerakkannya dengan mengatur kecepatan setiap roda:

Roda kiri Roda kanan Robotnya…
Maju Maju Melaju maju
Mundur Mundur Melaju mundur
Mundur Maju Berputar ke kiri
Maju Mundur Berputar ke kanan
Cepat Lambat Berbelok melengkung ke kanan

Robot melaju maju, melaju mundur, berputar ke kiri, berputar ke kanan, dan berbelok melengkung ke kanan, dengan panah untuk kecepatan setiap roda

Kecepatan dinyatakan dalam radian per detik, hingga 6,28 (satu putaran roda per detik). Kecepatan negatif memutar roda ke belakang.

  1. Ambil setiap motor berdasarkan namanya.
  2. Atur posisinya ke tak hingga, agar motor berputar tanpa batas.
  3. Atur kecepatannya.

Motor mempertahankan kecepatan terakhir yang kamu atur, jadi robot tetap bergerak sementara programmu melakukan hal lain. Program ini membuat robot maju, mundur, dan berputar ke kiri, masing-masing selama satu detik:

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
maxSpeed = 6.28 # The maximum speed of the wheels, in radians per second
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
def drive(left, right, seconds):
# Set the speed of each wheel, and keep it for some time
leftWheel.setVelocity(left)
rightWheel.setVelocity(right)
start = robot.getTime()
while robot.step(timeStep) != -1:
if robot.getTime() - start >= seconds:
break
drive(maxSpeed, maxSpeed, 1.0) # Forward
drive(-maxSpeed, -maxSpeed, 1.0) # Backward
drive(-2.0, 2.0, 1.0) # Spin to the left
drive(0, 0, 0.1) # Stop
print("Done")

Setiap motor punya sensor posisi, yang juga disebut encoder, yang menghitung seberapa jauh roda sudah berputar, dalam radian. Sensor ini berguna untuk melaju sejauh jarak tertentu. Berputar mundur membuat hitungannya berkurang.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
# Each wheel has a position sensor, which counts how far it has turned
leftEncoder = leftWheel.getPositionSensor()
rightEncoder = rightWheel.getPositionSensor()
leftEncoder.enable(timeStep)
rightEncoder.enable(timeStep)
robot.step(timeStep) # Step once, so that the sensors have a value
start = leftEncoder.getValue()
leftWheel.setVelocity(5.0)
rightWheel.setVelocity(5.0)
while robot.step(timeStep) != -1:
turned = leftEncoder.getValue() - start
if turned > 10.0: # Stop after 10 radians
break
leftWheel.setVelocity(0)
rightWheel.setVelocity(0)
print("Left wheel:", round(leftEncoder.getValue() - start, 2), "rad")

Mengendalikan gerakan berdasarkan waktu itu mudah, tetapi hasilnya berubah tergantung kecepatan. Encoder mengukur gerakannya secara langsung, jadi lebih andal. Untuk belokan yang presisi, giroskop lebih baik lagi.

Selanjutnya, pelajari cara membaca sensor.