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

Hareket

Robotun iki tekerleği vardır ve her birinin kendi motoru bulunur: başlangıç robotunda left wheel motor ve right wheel motor. Robotu her tekerleğin hızını ayarlayarak sürersin:

Sol tekerlek Sağ tekerlek Robot…
İleri İleri İleri gider
Geri Geri Geri gider
Geri İleri Olduğu yerde sola döner
İleri Geri Olduğu yerde sağa döner
Hızlı Yavaş Sağa doğru kavis çizer

Robotun ileri ve geri gitmesi, olduğu yerde sola ve sağa dönmesi ve sağa kavis çizmesi; oklar her tekerleğin hızını gösterir

Hızlar radyan/saniye cinsindendir, en fazla 6,28’dir (saniyede tekerleğin bir tam turu). Negatif hızlar tekerleği geriye döndürür.

  1. Her motoru adıyla al.
  2. Sınırsız dönmesi için konumunu sonsuza ayarla.
  3. Hızını ayarla.

Motorlar ayarladığın son hızı korur; bu yüzden programın başka işler yaparken robot hareket etmeye devam eder. Bu program robotu ileri ve geri sürer, sonra olduğu yerde sola döndürür; her hareket bir saniye sürer:

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

Her motorun, enkoder (encoder) da denen bir konum sensörü vardır. Bu sensör, tekerleğin ne kadar döndüğünü radyan cinsinden sayar ve belirli bir mesafe gitmek için kullanışlıdır. Tekerlek geriye dönünce sayı azalır.

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

Bir hareketi süreyle kontrol etmek basittir, ama sonuç hıza göre değişir. Enkoderler hareketin kendisini ölçer, bu yüzden daha güvenilirdir. Hassas dönüşler için jiroskop daha da iyidir.

Sırada sensörleri okumayı öğrenmek var.