Okullar için Robotik ve Mühendislik · anaokulundan liseye

8. ünite / 10 · yaklaşık 4 saat

Diferansiyel sürüşlü robot ve odometri

İki tekerlekten gövde hızına, (v, ω) komutları, enkoderle konum kestirimi ve hatanın nereden geldiği.

Bu ünitenin sonunda

  • Gövde hızından (v, ω) tekerlek hızlarını ve tersini hesaplamak
  • Enkoder sayımlarından odometriyle poz (x, y, θ) kestirmek
  • Tekerlek çapı hatası ve kaymanın odometriyi nasıl kaydırdığını göstermek
  • gpiozero Robot sınıfıyla klavyeden sürüş kurmak

Ders notları

İki bağımsız tekerlekli ve bir sarhoş tekerlekli robot, diferansiyel sürüşlüdür: tekerlekler aynı hızda dönerse düz gider, farklı hızda dönerse yay çizer, zıt yönde dönerse yerinde döner.

v = (vR + vL) / 2    ω = (vR − vL) / L

L iz genişliğidir (tekerlekler arası mesafe). Ters yönde, istenen (v, ω) için vL = v − ωL/2, vR = v + ωL/2. Üst düzey kod (Flask paneli, ROS 2) robotla hep (v, ω) dilinde konuşur; tekerlek hızlarına çevirmek sürücü katmanının işidir.

Odometri

Her döngüde iki enkoderin sayım farkı tekerlek yollarına (dL, dR) çevrilir. Ortalama yol ileri hareketi, fark dönüşü verir; tam yay formülü kısa adımlarda bile doğrudur. Ama odometri hata biriktirir: tekerlek çapında %2'lik hata, her metrede 2 cm demektir; dönüşteki küçük hata ise ilerledikçe büyüyen yan kaymaya dönüşür. Kayma ve tümsekler hiç ölçülmez.

Bu yüzden gerçek robotlar odometriyi başka sensörlerle düzeltir: IMU (MPU6050) dönüşü, kamera ya da lidar konumu. ESOF 323'ün 7. ve 9. haftaları bunun matematiğini işler.

Simülasyonlar

Diferansiyel sürüşlü robot ve odometri

Klavye (W A S D) ya da düğmelerle sür. Gerçek poz yeşil, enkoderden hesaplanan odometri turuncu: tekerlek çapı hatası ve kaymayla zamanla ayrılırlar.

gerçekodometri1 kare = 1 m
gerçek: x 0,00 y 0,00 θ 0° odometri: x 0,00 y 0,00 θ 0° fark: 0,0 cm sayım L/R: 0 / 0

3B kameralı keşif robotu

Diferansiyel sürüşlü robotu 3B sahada GPIO pinleriyle (L298N IN1–IN4, ENA/ENB) sür ya da izle kipini aç: kamera görüş konisi topu görünce yeşile döner, robot topa yaklaşır. Sahneyi sürükleyerek döndür, iki parmakla yakınlaştır. Sahne durumu testli saf mantıktan gelir; 3B yalnız görselleştirmedir.

gpiozero Robot(left=(5, 6), right=(13, 19)) ENA=GPIO12 ENB=GPIO18 IN1 0 IN2 0 ENA 0% · IN3 0 IN4 0 ENB 0% v_L 0,00 m/s · v_R 0,00 m/s · x -1,20 y 1,00 θ -23° kamera: top görünüyor · 3,34 m · x = 0,52

Ya da pinleri elle sür (L298N):

Kendin dene

Benzetimde robotu klavyeyle (W A S D) bir kare çizecek şekilde sür ve başlangıca dön. Gerçek poz ile odometri arasındaki farkı oku. Sonra tekerlek çapı hatasını %3 yap ve aynı kareyi tekrarla: fark nasıl değişti? Kaymayı aç ve yerinde dönüşlerde hatanın neden hızla büyüdüğünü açıkla.

Kod

Odometri sınıfı (tam yay)
from math import sin, cos, pi, atan2

class Odometry:
    def __init__(self, track_m=0.15, wheel_d=0.065, cpr=1400):
        self.L, self.k = track_m, pi * wheel_d / cpr   # sayım başına metre
        self.x = self.y = self.th = 0.0

    def update(self, dticks_l: int, dticks_r: int):
        dl, dr = dticks_l * self.k, dticks_r * self.k
        d, dth = (dl + dr) / 2, (dr - dl) / self.L
        if abs(dth) < 1e-9:
            self.x += d * cos(self.th); self.y += d * sin(self.th)
        else:
            R = d / dth                                 # dönüş yarıçapı
            self.x += R * (sin(self.th + dth) - sin(self.th))
            self.y -= R * (cos(self.th + dth) - cos(self.th))
        self.th = atan2(sin(self.th + dth), cos(self.th + dth))

def wheels(v: float, w: float, L=0.15):
    return v - w * L / 2, v + w * L / 2                # sol, sağ (m/s)

Sık yapılan hatalar

  • İz genişliğini cetvelle ölçüp kalibre etmemek: robotu 10 tur döndürüp L'yi düzelt.
  • Sol ve sağ enkoderi ters bağlamak: ileri giderken robot "dönüyor" sanır.
  • Odometriyi mutlak doğru kabul etmek: uzun yolda mutlaka kayar.
  • Açıyı sarmamak (−π..π): 359° ile 1° arasındaki fark 358° hesaplanır.

Yazılım mühendisliği bağlantısı

Kinematiği ve odometriyi donanımdan bağımsız bir modülde tut ve özellik testleri yaz:

  • "Eşit sayımlarda θ değişmez", "zıt eşit sayımlarda x, y değişmez".
  • "Çeyrek çember komutu θ'yı π/2 artırır". Aynı modül benzetimde ve gerçek robotta kullanılır.

Kendini sına

  1. v_L = 0,1 m/s, v_R = 0,3 m/s, L = 0,2 m. ω kaçtır?

  2. Robotu yerinde döndürmek için tekerlekler nasıl dönmeli?

  3. Tekerlek çapı %2 küçük ölçülmüşse 5 m'lik düz yolda odometri hatası yaklaşık?

  4. Odometri hangi hatayı hiç göremez?

Gerçek parçalar (Hyvex, 3B modelli)

ESOF 323, 7. hafta

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç