Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

1. hafta / 14

Robotiğe giriş

Araçlar: Bu platform (Uno laboratuvarı, çizgi izleyen simülasyonu), Arduino

Bu haftanın sonunda

  • Robotu bir algıla, düşün, uygula (sense, think, act) döngüsü olarak tanımlamak
  • Robotların başlıca sınıflarını ve bileşenlerini adlandırmak
  • İki sensörlü bir çizgi izleyicinin nereye döneceğine nasıl karar verdiğini açıklamak

Ders notları

Robot, çevresini algılayan, ne yapacağına karar veren ve dünya üzerinde eylemde bulunan, bu döngüyü saniyede pek çok kez tekrarlayan bir makinedir. Yazılım mühendisleri çoğunlukla ortadaki adımda çalışır, ancak iyi robot yazılımı ancak iki yandaki sensörleri ve eyleyicileri (actuators) anladığınızda ortaya çıkar.

Robot türleri

  • Manipülatörler: fabrikalarda ve laboratuvarlarda sabit tabanlı kollar.
  • Mobil kara robotları: tekerlekli ve bacaklı robotlar, depo AGV'leri, robot süpürgeler.
  • Hava robotları: çok rotorlu (multirotor) ve sabit kanatlı dronlar (13. hafta).
  • Deniz robotları: su üstü araçları ve su altı araçları.

Yapı taşları

Her robot; sensörleri (neyi ölçebildiği), bir denetleyiciyi (kodunuzu çalıştıran bir mikrodenetleyici veya bilgisayar), eyleyicileri (motorlar, servolar, pervaneler), bir güç sistemini ve mekanik bir yapıyı bir araya getirir. Bir bloktaki tasarım kararı her zaman diğerlerini kısıtlar: daha ağır piller daha güçlü motorlar, daha hızlı döngüler daha hızlı işlemciler gerektirir.

Çizgi izleyici

Çizgi izleyici, zemine doğrultulmuş kızılötesi yansıma sensörleri kullanır. Siyah çizgi kızılötesi ışığı soğurur, beyaz zemin ise yansıtır. Çizginin iki yanına yerleştirilmiş iki sensörle karar kuralı basittir:

  • iki sensör de çizgiyi görüyor: düz git
  • yalnızca sol sensör görüyor: sola dön
  • yalnızca sağ sensör görüyor: sağa dön
  • hiçbiri görmüyor: çizgi kayboldu, toparlan (son döndüğün yöne dönmeye devam et)

Bu bir aç-kapa (bang-bang) denetleyicidir: çıkış sabit değerler arasında sıçrar. Çalışır, ancak robot zikzak çizer. 6. haftada bunu, çizginin merkezden ne kadar uzak olduğuyla orantılı olarak yön veren bir PD denetleyiciyle değiştireceğiz.

Derinlemesine

Refleksten mimariye

İki sensörlü çizgi izleyici tepkisel (reactive) bir denetleyicidir: anlık sensör okumasını, hiçbir bellek ve dünya modeli kullanmadan doğrudan motor komutuna çevirir. Robotikte algıla, düşün, eyle döngüsünü düzenlemenin üç klasik yolu vardır:

  • Tepkisel (Brooks'un katmanlı bastırma mimarisi, subsumption, 1986): basit davranış katmanları; "engelden kaç" gibi üst bir katman "çizgiyi izle" gibi alttaki katmanı bastırabilir. Hızlı ve dayanıklıdır, ancak uzun vadeli hedefleri ifade etmek zordur.
  • Planlayıcı (deliberative): önce model kur, plan yap, sonra eyle. Kararlar iyidir, ama dünya değiştiğinde yavaş kalır.
  • Hibrit: altta güvenlik ve kontrol için hızlı bir tepkisel katman, üstte daha yavaş bir planlama katmanı. 12. haftanın ROS 2 yığınları ve 13. haftanın PX4 dronları dahil, modern robotların neredeyse tamamı hibrittir.

IR sensörünü doğru okumak

TCRT5000 tipi bir yansıma modülü analog bir değer verir. Beyaz zeminin analogRead ile yaklaşık 300, siyah bandın yaklaşık 800 okunduğunu ve ±60 gürültü olduğunu varsayalım. 550'de tek bir eşik bandın ortasında işe yarar; ancak kenarda okuma 550 civarında gezinir ve çıkış titrer. Çözüm histerezis (hysteresis): 600'ün üstünde "siyah"a geç, "beyaz"a ancak 500'ün altında geri dön. Ortam ışığı ve sensör yüksekliği bu seviyeleri kaydırdığı için ikisini de açılışta kalibre edin.

Çözümlü örnek: döngü ne kadar yavaş olabilir?

Sensör zemini yalnızca örnek aldığınız anlarda görür. İki örnek arasında çizgi, robota göre yana doğru şu kadar kayar:

Δy = v · sin(θ) · Tloop

Burada θ robot ile çizgi arasındaki açıdır. Keskin bir virajda v = 1,0 m/s ve θ = 30° alalım. 50 Hz'lik bir döngüde (T = 20 ms) Δy = 1,0 × 0,5 × 0,020 = 0,010 m = 10 mm olur; bu, 19 mm'lik elektrik bandının genişliğinden küçüktür, yani her geçiş görülür. Döngüde delay(100) varsa (T = 100 ms) Δy = 50 mm olur: bant iki örnek arasında tamamen geçip gidebilir ve robot çizgiden çıktığını hiç fark etmez. Robotların hızlı ve bloklamayan döngülere ihtiyaç duymasının ilk somut nedeni budur (2. hafta).

Aç-kapa kontrol neden salınır?

Komut yalnızca üç değer alır (sol, düz, sağ), bu yüzden robot her zaman hedefi aşar: dıştaki sensör bandı terk ettiğinde robot zaten yanlış yöne bakıyordur ve motorların hız değiştirmesi onlarca milisaniye sürer. Zikzak genliği hızla ve eyleyici gecikmesiyle büyür. PID'den (6. hafta) önce iki ucuz çözüm: dönerken içteki tekerleği ters çevirmek yerine yavaşlatın ve dönüş durumlarında temel hızı düşürün.

BlokÇizgi izleyiciTipik Hyvex parçası
Algıla2 ile 5 arası IR yansıma sensörüTCRT5000 tipi modül, ileride engeller için HC-SR04
Düşünaç-kapa kuralı, ileride PDArduino Uno, ileride ESP32
Eyleiki redüktörlü DC motorL298N veya TB6612FNG sürücü

Simülasyon

Çizgi izleyen robot

Yansıma sensörlü iki tekerlekli robot. İki sensörlü aç-kapa (bang-bang) denetleyiciyi beş sensörlü PD denetleyiciyle karşılaştır.

Kod

Arduino: L298N sürücülü, iki sensörlü çizgi izleyici
const int L_IR = 2, R_IR = 3;
const int ENA = 5, IN1 = 6, IN2 = 7, IN3 = 8, IN4 = 9, ENB = 10;

void drive(int left, int right) {
  digitalWrite(IN1, left >= 0);  digitalWrite(IN2, left < 0);
  digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
  analogWrite(ENA, abs(left));   analogWrite(ENB, abs(right));
}

void setup() {
  pinMode(L_IR, INPUT); pinMode(R_IR, INPUT);
  for (int p = 5; p <= 10; p++) pinMode(p, OUTPUT);
}

void loop() {
  bool l = digitalRead(L_IR) == LOW;   // LOW = çoğu IR modülünde çizgi algılandı
  bool r = digitalRead(R_IR) == LOW;
  if (l && r)   drive(150, 150);       // düz
  else if (l)   drive(0, 150);         // sola dön
  else if (r)   drive(150, 0);         // sağa dön
  else          drive(0, 0);           // çizgi kayboldu
}

Sık yapılan hatalar

  • Laboratuvar ışığı altında ölçülmüş tek bir sabit IR eşiği kullanmak; farklı bir lambada veya farklı sensör yüksekliğinde bozulur.
  • Sensörleri teker aksının altına monte etmek; robot çok geç tepki verir, sensörleri aksın epey önüne yerleştirin.
  • Bir tekerleği tam hızda ters çevirerek dönmek; zikzak şiddetlenir, bunun yerine içteki tekerleği yavaşlatın.
  • Kayıp durumunda hiçbir şey yapmamak; robot pistten dümdüz çıkar.
  • Sol ve sağ sensör kablolarını karıştırıp kodda kuralları ters çevirerek düzeltmek; kod artık diyagramla uyuşmaz.

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

Robot fiziksel dünyada değerlendirilir, bu nedenle gereksinimleri (requirements) ölçülebilir olmalıdır. "Robot çizgiyi izler" test edilemez; "robot oval pisti 20 s'nin altında, çizgiyi hiçbir zaman 0,5 s'den uzun kaybetmeden tamamlar" test edilebilir.

Algıla, düşün, eyle döngüsü aynı zamanda bir boru hattı mimarisidir (pipeline): her aşamanın net bir girdisi ve çıktısı vardır. Aşamaları kodda ayrı tutmak (readSensors(), decide(), drive()), kararı sahte sensör değerleriyle test etmenizi ve donanımı daha sonra mantığa dokunmadan değiştirmenizi sağlar.

Dönem projesi uygulaması: robotunuz için üç ile beş arası kullanıcı hikâyesi (user story) yazın ("Operatör olarak ... istiyorum, böylece ...") ve her birine mutlaka bir sayı ve bir birim içeren bir kabul kriteri verin. Bunları deponuzda docs/requirements.md içinde tutun; sonraki her test bunlardan birine işaret etmelidir.

Laboratuvarda: Çizgi izleyen: 2 IR sensör + L298N + 2 motor

IR modüllerinin "Yakınlık" kaydırıcıları çizgiyi temsil eder (eşiği geçince çizgi görüldü). İkisi de görürse düz, biri görürse o tarafa döner, hiçbiri görmezse durur. Motor çubuklarını ve seri monitörü izle.

Laboratuvarda aç

Laboratuvar görevi

Aynı çizgi izleyiciyi Tinkercad Circuits veya Wokwi'de iki IR sensör ve bir L298N ile kurun. Ardından yukarıdaki simülatörü aç-kapa (bang-bang) modunda çalıştırın ve robot pistten çıkana kadar temel hızı artırın. Bu hızı not edin.

Kendini sına

  1. Bir çizgi izleyici çizgiye 30° açıyla 0,8 m/s hızla gidiyor ve sensörlerini 10 Hz'de örnekliyor. İki örnek arasında çizgi robota göre yana doğru ne kadar kayar?

  2. İki sensör de beyaz okuyor ve çizgiyi en son gören sol sensördü. En iyi eylem nedir?

  3. Bandın kenarında IR okuması tek bir eşiğin etrafında geziniyor ve motorlar titriyor. En iyi çözüm nedir?

  4. Bir drone, saniyede bir yeniden plan yapan görev planlayıcısının altında 1 kHz'lik bir dengeleme döngüsü çalıştırıyor. Bu hangi mimaridir?

Ödev

Çizgi izleyici için dört durumlu (düz, sol, sağ, kayıp) bir durum diyagramı çizin. Kayıp durumu için bir toparlanma stratejisi ekleyin ve neden işe yaradığını açıklayın.

Bu haftanın donanımı (Hyvex)

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
  • TestlerimMini testler ve puanlarSayfa
  • 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ç