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:
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 izleyici | Tipik Hyvex parçası |
|---|---|---|
| Algıla | 2 ile 5 arası IR yansıma sensörü | TCRT5000 tipi modül, ileride engeller için HC-SR04 |
| Düşün | aç-kapa kuralı, ileride PD | Arduino Uno, ileride ESP32 |
| Eyle | iki redüktörlü DC motor | L298N 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
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
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?
İki sensör de beyaz okuyor ve çizgiyi en son gören sol sensördü. En iyi eylem nedir?
Bandın kenarında IR okuması tek bir eşiğin etrafında geziniyor ve motorlar titriyor. En iyi çözüm nedir?
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.