Robotik atölyelerinin klasik manzarası: Öğrenci güzel bir kod yazar, ileriGit() çağırır ve robotun ok gibi dümdüz gitmesini bekler. Robot çalıştığı an sanki bir ayağı kısa kalmış gibi inatla sağa veya sola kavis çizer.
Kodda hata yoktur. Tekerlek sıkışmamıştır. Peki sorun nedir?
Acı gerçek: İki motor kardeş değildir
Sorun, dijital dünyanın mükemmelliği ile fiziksel dünyanın kusurları arasındadır. Kodda iki motora da aynı PWM değerini verirsiniz (örnek: 255). Fizikte ise fabrikadan çıkan iki DC motor bile birbirinin aynısı değildir.
- Birinin bakır sargısı milim farkla daha sıkı olabilir
- Diğerinin dişli kutusunda yağ biraz daha fazla olabilir
- Tekerlek sürtünmesi veya zemin teması azıcık farklı olabilir
Siz ikisine de 100 birim güç dersiniz; biri 100 ile koşarken diğeri 95 ile koşar. Robot doğal olarak yavaş tarafa doğru döner.
Püf noktası: Yazılımla donanımı terbiye edin
İyi bir robotçu donanımın kusurunu kabul eder ve yazılımla düzeltir. Buna motor kalibrasyonu denir.
1) Tam gaz gitmeyin
Motorlara doğrudan en yüksek değeri (örnek: 255) vermeyin. Kontrol payı bırakın (örnek: 200). Böylece bir tarafı kısarken diğerini artıracak alanınız olur.
2) Hızları değişken yapın
Sabit sayılar yerine değişken kullanın:
int solHiz = 200;
int sagHiz = 200;
3) Deneme-yanılma ile ince ayar
Robotu düz bir zemine koyun ve ileri sürün.
- Sola çekiyorsa: Sağ motor daha hızlıdır.
sagHizdeğerini biraz düşürün (örnek: 190). - Sağa çekiyorsa: Sol motor daha hızlıdır.
solHizdeğerini biraz düşürün.
Robot dümdüz gidene kadar küçük adımlarla ayarlayın. Bazen 5 birim fark yeterlidir.
void ileriGit() {
motorSol(solHiz);
motorSag(sagHiz);
}
Atölye notu: Kalibrasyonu yarışma pistinin zemininde yapın. Farklı zemin sürtünmesi sonucu değiştirebilir. Pil voltajı düşünce sapma artabilir; tam dolu pille de kontrol edin.
Sonuç
Robot yapmak sadece parçaları birleştirmek değildir; parçaların uyumunu sağlamaktır. Motor kusurunu yazılımla örtün. Doğru solHiz / sagHiz = düz giden robot.