Bu yazı, yeni başlayanlar için ”Robot nasıl yapılır” yazı dizisinin 3. yazısıdır. Konu içeriğimiz Yazılım ve Kontrol Algoritmaları.
Robot yazılımı, donanım aşamasında bir araya getirilen mikrodenetleyici, sensör ve motorların uyum içinde çalışmasını sağlayan katmandır. Bu yazı dizisinin üçüncü bölümünde, bir robot projesinde yazılımın nasıl yapılandırılacağını, temel programlama yaklaşımlarını ve kontrol algoritmalarını ele alıyoruz.
Geliştirme Ortamının Kurulması
Arduino tabanlı bir robot projesinde yazılım geliştirme, Arduino IDE üzerinden C/C++ tabanlı bir dille yapılır. Bu ortam, kartın kütüphanelerini yönetmeyi ve kodu doğrudan mikrodenetleyiciye yüklemeyi (upload) kolaylaştırır. Raspberry Pi gibi tek kart bilgisayarlar kullanıldığında ise genellikle Python dili tercih edilir, çünkü Python’ın okunabilir sözdizimi ve geniş kütüphane desteği (örneğin GPIO Zero, OpenCV) hızlı prototipleme için avantaj sağlar. Her iki durumda da geliştirme ortamının kart ile doğru şekilde iletişim kurabilmesi için gerekli sürücülerin ve kart tanımlarının kurulu olması gerekir.
Sensör Verisi Okuma ve İşleme
Bir robot yazılımının ilk temel görevi, bağlı sensörlerden veri okumaktır. Dijital sensörler (örneğin bir çizgi izleyen IR sensör) yüksek veya düşük sinyal (1 veya 0) döndürürken, analog sensörler (örneğin bir potansiyometre veya bazı mesafe sensörleri) belirli bir aralıkta sürekli bir değer üretir. Okunan ham sensör verisi genellikle doğrudan kullanılabilir durumda değildir ve bir ön işleme adımından geçirilmesi gerekir. Örneğin ultrasonik bir sensörden alınan yankı süresi, ses hızı kullanılarak santimetre cinsinden mesafeye dönüştürülmelidir. Gürültülü sensör verilerinde ise hareketli ortalama (moving average) gibi basit filtreleme teknikleri, ölçüm kararlılığını artırmak için sıklıkla uygulanır.
Motor Kontrolü: Yön ve Hız Ayarı
Motor kontrolü, motor sürücüsüne gönderilen dijital ve analog sinyaller aracılığıyla gerçekleştirilir. Bir DC motorun dönüş yönü, motor sürücüsündeki iki giriş pininin durumuna (yüksek/düşük) göre belirlenirken, motorun hızı darbe genişlik modülasyonu (PWM, Pulse Width Modulation) tekniğiyle ayarlanır. PWM, motora uygulanan gerilimin açık kalma süresinin oranını (duty cycle) değiştirerek motorun ortalama enerjisini ve dolayısıyla hızını kontrol eder. Örneğin yüzde 50 duty cycle, motora tam gerilimin yarısı kadar ortalama enerji sağlar. İki tekerlekli bir robotta farklı hız oranları uygulanarak (örneğin bir tekerleğin diğerinden daha yavaş döndürülmesi) robotun yön değiştirmesi sağlanabilir; bu yönteme diferansiyel sürüş (differential drive) adı verilir.
Durum Makineleri ile Robot Davranışını Yapılandırma
Basit bir robot bile genellikle birden fazla davranış modu arasında geçiş yapar; örneğin “ileri git”, “engelden kaçın” ve “dur” gibi durumlar arasında geçiş yapılması gerekebilir. Bu tür davranışları düzenli bir şekilde kodlamak için durum makinesi (state machine) yaklaşımı kullanılır. Durum makinesinde robot her an belirli bir durumda bulunur ve belirli koşullar (örneğin bir sensörün engel algılaması) gerçekleştiğinde bir sonraki duruma geçiş yapar. Bu yaklaşım, kodun karmaşık iç içe geçmiş koşul yapıları yerine daha okunabilir ve genişletilebilir bir yapıda organize edilmesini sağlar.
Kapalı Çevrim Kontrol: PID Kontrolcü Uygulaması
Yeni başlayanlar için robot yazılımındaki en önemli kavramsal sıçramalardan biri, açık çevrim kontrolden kapalı çevrim kontrole geçiştir. Örneğin bir çizgi izleyen robotta, yalnızca sensör verisine göre sabit bir hızla dönüş yapmak yerine, hedeflenen çizgi konumu ile robotun gerçek konumu arasındaki farkı (hata) sürekli ölçüp bu hataya orantılı şekilde motor hızını ayarlamak çok daha kararlı bir takip performansı sağlar. Bu amaçla kullanılan PID (Oransal-İntegral-Türev) kontrolcü, hatanın büyüklüğüne (P terimi), zaman içindeki birikimine (I terimi) ve değişim hızına (D terimi) göre üç ayrı katsayı ile ağırlıklandırılmış bir düzeltme sinyali üretir. Yeni başlayanlara, PID katsayılarını sıfırdan optimize etmeye çalışmak yerine önce yalnızca P teriminin etkisini gözlemlemeleri, ardından kararlılık sorunları ortaya çıktıkça I ve D terimlerini kademeli olarak eklemeleri önerilir.
Kod Yapısını Modüler Tutmak
Robot yazılımı büyüdükçe, tüm kodun tek bir dosyada yazılması hata ayıklamayı zorlaştırır. Bu nedenle sensör okuma, motor kontrolü ve karar verme mantığının ayrı fonksiyonlara veya modüllere bölünmesi önerilir. Örneğin bir mesafeOlc()fonksiyonu yalnızca sensör verisini okuyup mesafe değeri döndürürken, bir motorlariAyarla() fonksiyonu yalnızca motor hızlarını ayarlamakla sorumlu olmalıdır. Bu şekilde modüler bir yapı, hem kodun okunabilirliğini artırır hem de belirli bir bileşende sorun yaşandığında hatanın kaynağını izole etmeyi kolaylaştırır.
Yaygın Yazılım Hataları
Yeni başlayanların robot yazılımında sıkça yaptığı hatalardan biri, sensör verisini hiç filtrelemeden doğrudan karar verme mantığında kullanmaktır; bu durum gürültülü ölçümler nedeniyle robotun kararsız davranışlar sergilemesine yol açabilir. Bir diğer yaygın hata, ana döngü (loop) içine gecikme (delay) fonksiyonlarının aşırı kullanılmasıdır; bu durum robotun sensörlere veya komutlara zamanında tepki verememesine neden olur. Ayrıca PID katsayılarının deneme yanılma olmadan, yalnızca teorik hesaplarla belirlenmeye çalışılması da gerçek dünya koşullarında beklenmedik sonuçlar doğurabilir.
Sonuç
Robot yazılımı, sensör verisini işleyen, motorları kontrol eden ve robotun davranışını yöneten kontrol algoritmalarını bir araya getiren katmandır. Modüler kod yapısı, durum makineleri ve kapalı çevrim kontrol teknikleri, basit bir robotun bile öngörülebilir ve kararlı şekilde çalışmasını sağlayan temel yazılım araçlarıdır. Serinin son bölümünde, tamamlanan robotun nasıl test edileceğini, kalibre edileceğini ve temel otonomi seviyesine nasıl taşınacağını ele alacağız.
Sıkça Sorulan Sorular
Arduino tabanlı projelerde C/C++ tabanlı Arduino dili, Raspberry Pi gibi tek kart bilgisayarlarda ise genellikle Python tercih edilir.
PWM (darbe genişlik modülasyonu), motora uygulanan gerilimin açık kalma süresinin oranını değiştirerek motorun ortalama hızını ayarlamayı sağlayan bir tekniktir.
Durum makinesi, bir robotun “ileri git” veya “engelden kaçın” gibi farklı davranış modları arasında belirli koşullara göre geçiş yapmasını düzenli bir yapıda kodlamayı sağlayan bir programlama yaklaşımıdır.
PID kontrolcü, hedeflenen değer ile gerçek ölçüm arasındaki farkı sürekli hesaplayarak motor hızını buna göre ayarlar ve bu sayede çizgi izleme gibi görevlerde daha kararlı bir performans sağlar.
Ana döngü içinde aşırı delay kullanımı, robotun sensör verilerini veya komutları zamanında işleyememesine neden olarak tepki süresini olumsuz etkiler.
İlgili Yazılar
Robot Nasıl Yapılır? 1. Bölüm: Planlama ve Tasarım Aşaması
Robot Nasıl Yapılır? 2. Bölüm: Donanım Seçimi ve Devre Tasarımı
Robot Nasıl Yapılır? 4. Bölüm: Test, Kalibrasyon ve Otonomiye Geçiş
Sensör Füzyonu ve Filtreleme: Robotik Algı Sistemlerinde Veri Birleştirme
Görüntü İşleme ve Bilgisayarlı Görü ile Robot Algısı
Robotik Teknolojisinde 2026 Gelişmeleri: Fiziksel Yapay Zeka Çağı
Robot Etiği ve Toplumsal Etkileri: Robotik Teknolojisinin Hukuki ve Sosyal Boyutu
Endüstriyel Robotların Kullanım Alanları: Sektörel Uygulamalar ve Teknik Özellikler
