Saltar al contenido
//

Bilim ve Teknoloji Üretmek İçin Buradayız!

Robot Neden Hayalet Görür? Sensör Gürültüsü

Robotik projelerde herkesin başına en az bir kez gelir: Engelden kaçan güzel bir robot yaparsınız. Kod tamam, bağlantı tamam. Robotu boş bir koridora bırakırsınız. Neşeyle ilerlerken aniden, önünde hiçbir şey yokken fren yapıp durur.

Siz şaşkın bakarken robot sanki görünmez bir duvara çarpmış gibidir. Robot delirmedi. Sadece bir hayalet gördü. Teknik adı: sensör gürültüsü (sensor noise).

Sorun: Filtresiz, fazla saf yaklaşım

Ultrasonik sensör bazen anlık hata üretir. Küçük bir toz, hava akımı veya yankı yüzünden gerçekte 200 cm olan mesafe bir an 5 cm gibi görünebilir.

Kodda genellikle tek ölçüme körü körüne güveniriz:

if (mesafe < 10) {
  dur();
}

Robot hatalı 5 cm değerini aldığı anda sorgulamadan panikler ve durur. Engel gerçek değildir; ölçüm hatasıdır, gürültüdür.

Püf noktası: Ortalama ile filtreleyin

Gerçek hayatta tek söze hemen inanmayız. Birisi dışarı 50 derece dese montu hemen çıkarmazsınız; birkaç kez kontrol edersiniz. Robota da aynı yeteneği verin. Buna filtreleme denir. En basit ve etkili yol: ortalama alma.

Akıllı robot tek ölçümle karar vermez. Çok kısa sürede (milisaniyeler) arka arkaya 5-10 ölçüm alır. Örnek:

200, 200, 5, 202, 198

O tek hatalı 5 cm, diğer doğru değerlerin arasında erir. Ortalama gerçek mesafeye yaklaşır. Robot hayalet engelde durmaz; gerçek engelde durur.

int mesafeOrtalama() {
  long toplam = 0;
  int n = 5;
  for (int i = 0; i < n; i++) {
    toplam += mesafeOlc();
    delayMicroseconds(2000); // cok kisa ara; loop u uyutmaz
  }
  return (int)(toplam / n);
}

void loop() {
  int mesafe = mesafeOrtalama();
  if (mesafe > 0 && mesafe < 10) {
    dur();
  } else {
    ileriGit();
  }
}

Atölye notu: Ölçümler arasında çok kısa bir ara bırakın. Buradaki mikro-bekleme tüm loop u saniyelerce kilitleyen delay(1000) tuzağından farklıdır. İsterseniz aynı mantığı millis() ile de kurabilirsiniz.

Özet

İyi bir robot programcısı sensörden gelen her veriye hemen inanmaz. Veriyi matematikle süzgeçten geçirir ve yalnızca gerçek engellerde durur. Robotunuzu hayalet avcısı yapmayın; ona verileri analiz etmeyi öğretin.