Ticari Robot Süpürge Şasisinden ROS2 Tabanlı Otonom Geliştirme Platformuna

ckrkmz

Yeni Üye
Katılım
14 Nisan 2026
Mesajlar
3

Bu proje, piyasada standart bir ev aleti olarak bulunan ticari bir robot süpürgenin (RS770) kapalı kutu elektronik altyapısını devreden çıkararak, donanımı tamamen açık kaynaklı ve modüler bir ROS2 otonom devriye robotuna (Perceptor) dönüştürme sürecini ele almaktadır. Çalışmanın temel amacı; süpürme fonksiyonlarından arındırılmış, sadece haritalama (SLAM), yörünge planlama (Nav2) ve otonom navigasyon yeteneklerine odaklanan, gelecekteki karmaşık robotik projeler için güvenilir bir mobil donanım altyapısı (mobile base) oluşturmaktır.

  • P1 - İskelet (Lobotomi): Robot süpürgenin orijinal kartını söktük, motorları ve şasiyi "aptal" hale getirip kendi sistemimize hazırladık.
  • P2 - Beyin Nakli: Pi 4 ve ESP32 montajı yapıldı. "Dual-brain" mimarisi kuruldu.
  • P3 - Motor Bring-up: "Tekerlekler dönüyor mu?" aşaması. PWM sinyallerini ESP32 üzerinden gönderip motorları ROS2 ile konuşturmayı başardık.
  • P4 - Odometri ve IMU Doğrulaması (Şu an buradayız): Robotun ne kadar gittiğini hesapladığımız aşama. Enkoderlerden gelen pulse'ları metreye çeviriyoruz. IMU (cayroskop) ile robotun sağa-sola sapmasını ölçüyoruz. Bu faz bitmeden robot düzgün harita çıkaramaz.
  • P5 - Lidar & Safety: Lidar verisinin Pi 4'e akması ve robotun önüne bir engel çıktığında "kendi kendine" durma yeteneği kazanması.
  • P6 - PID Tuning: Motorların hızını milimetrik hassasiyete getirme. (Halıda ayrı, parkede ayrı gitmesin diye).
  • P7 - SLAM (Haritalama): İşte büyük olay! Robotun evin içinde gezip kendi haritasını (Lidar ile) çıkarmaya başladığı ilk an.
  • P8 - Nav2 (Otonom Sürüş): Harita üzerinde bir nokta seçeceğiz ve robot engellere çarpmadan oraya kendi gidecek.
  • P9 - Devriye ve Görevler: Belirli saatlerde evin içinde tur atma, MQTT üzerinden akıllı eve veri gönderme.
  • P10 - Final (The Perceptor): Kasanın kapatılması, estetik dokunuşlar ve tam kararlılık.

1. Sistem Mimarisi: Neden İki Katmanlı (Dual-Brain) Yapı?​

Otonom robotik sistemlerde karşılaşılan en büyük handikaplardan biri, karar alma mekanizmaları ile fiziksel eylemler arasındaki zamanlama krizidir. Bu projede, işlem yükünü ve gerçek zamanlı (real-time) tepkileri optimize etmek amacıyla sistemi iki ana beyne böldük:

  • Üst Katman (Yüksek Seviye Kontrol - YZ ve Navigasyon): İşletim sistemi (Ubuntu/DietPi) ve ROS2 Jazzy barındıran Raspberry Pi 4.
  • Alt Katman (Düşük Seviye Kontrol - Gerçek Zamanlı İşlemler): ESP32-S3 mikrodenetleyici.
Mimari Gerekçe: Raspberry Pi üzerinde koşan Linux mimarisi, doğası gereği yüksek seviyeli bir işletim sistemidir. Arka planda çalışan servisler ve zamanlayıcı (scheduler) yapısı nedeniyle, motor sürmek için gereken hassas PWM sinyallerini veya milisaniyelik GPIO kesmelerini (interrupt) donanımsal düzeyde kusursuz işleyemez. Çekirdek gecikmelerinin (kernel latency) önüne geçmek ve motor/sensör kontrolünü garanti altına almak için tüm düşük seviye I/O işlemleri ESP32-S3'e devredilmiştir. İki işlemci arasındaki veri akışı (telemetri ve hız komutları), GPIO yerine Native USB/COM üzerinden köprülenerek yalıtılmıştır.

2. Donanım ve Tersine Mühendislik Süreçleri​

2.1. Odometri ve Tek Kanallı Enkoder Problemi​

Projenin en zorlu mekanik ve yazılımsal aşamalarından biri, robotun konum takibini (odometri) sağlayacak tekerlek verilerini anlamlandırmaktı. İlk adım olarak dişli oranlarının çıkarılması gerekti. GearGenerator aracı kullanılarak şasideki dişli mimarisinin kinematik analizi yapıldı ve motorun tam bir turunda enkoderin kaç pulse ürettiği matematiksel olarak haritalandı.

Ancak ticari robot süpürgelerde maliyet odaklı tasarlandığı için, standart A-B kanallı (yön algılayabilen) enkoderler yerine sadece A kanalına sahip tek fazlı enkoderler kullanılmaktadır. Bu durum, donanımsal olarak tekerleğin ileri mi yoksa geri mi döndüğünün anlaşılamaması sorununu doğurur.

Çözüm: Bu donanımsal eksiklik, yazılımsal bir durum makinesi (state machine) ile aşıldı. Tekerleğin dönüş yönü, motor sürücüye (L298N) o an gönderilen "ileri/geri" komut sinyallerinden türetilerek enkoder pulse'ları ile senkronize edildi.

2.2. Sensör Füzyonu (IMU + Enkoder)​

Tek kanallı enkoder üzerinden alınan tahmini odometri verisi, zemin kaymaları veya asimetrik sürtünmeler nedeniyle zamanla sapma (drift) yaratır. Bu sapmayı minimuma indirmek için sisteme MPU-9250/6500 (IMU) entegre edildi. Robotun ivme ve yönelim (heading) bilgileri, motor kontrol döngüsü (PID) ile harmanlanarak doğrusal rota takibi stabilize edildi.

2.3. Lidar Entegrasyonu ve Güvenlik İzolasyonu​

Çevresel algılama (SLAM) için harici, pahalı bir Lidar almak yerine, donanımın üzerinde gelen YD-Lidar X2 değerlendirildi. Topluluk kaynakları ve teknik dokümantasyonlar incelenerek bu donanıma özel kontrol kodları yazıldı.

Kritik Donanım Kararı: Lidarın ürettiği devasa nokta bulutu (point cloud) verisinin ESP32-S3'ü boğmaması için Lidarın veri hattı (TTL) doğrudan Raspberry Pi'ye bağlanmıştır. Lidarın 5V ile çalışan döndürücü motoru ise doğrudan işlemcilere bağlanmak yerine, ESP32'den (GPIO 14) gönderilen PWM sinyali ile bir MOSFET üzerinden sürülerek sistemsel izolasyon sağlanmıştır.

3. Mevcut Durum ve Geliştirme Süreci (Faz: Bring-up)​

Proje an itibarıyla P3 (Motor sürücü ve enkoder bring-up) fazındadır. Bugüne kadar tamamlanan kilometre taşları şunlardır:

  • Güç topolojisi ve 3.3V tolerans kurallarına uygun ortak GND altyapısı kuruldu. L298N sürücüsünün ENA/ENB jumper'ları sökülerek doğrudan PWM kontrolüne geçildi.
  • ESP32 firmware katmanı başarıyla implemente edildi ve Raspberry Pi üzerinden firmware yükleme/komut doğrulama işlemleri entegre edildi.
  • ROS2 Jazzy ile seri köprü (bridge node) düğümü aktif olarak çalıştırıldı.
  • Canlı fiziksel testler için Pi üzerinden çalıştırılabilen reset_encoders ve enc-pulse-per-turn gibi özel komut satırı arayüzleri (CLI) geliştirildi.

4. Sonraki Adımlar​

Mevcut iterasyonda, manuel referanslarla tekerleklerin tam tur başına ürettiği pulse ölçümlerinin doğrulanması (enc-pulse-per-turn aracı ile) ve sağ/sol tekerlek hız farklarını dengeleyecek ilk ölçekleme katsayılarının (PID tuning) belirlenmesi hedeflenmektedir. Bu mekanik kalibrasyonlar tamamlandıktan sonra, ROS2 üzerinde Nav2 ve SLAM entegrasyonu (P7 Fazı) ile robot kapalı alanlarda harita çıkarmaya başlayacaktır.

1776259661214.png
1776259674714.png
1776259689899.png


1776259717457.png
1776259733125.png
1776259758445.png
1776259774323.png
 
Son düzenleme:
Harika, projeyi takip eden arkadaş grubuna yönelik; teknik derinliği koruyan ama daha samimi, "garajda üretim" havasında bir güncelleme metni hazırladım.


Perceptor Projesinde Son Durum: "Bring-up" Tamam, Kalibrasyona Girdik!

Selamlar, makalenin devamı niteliğinde Perceptor tarafındaki son teknik gelişmeleri paylaşıyorum. Proje artık sadece bir fikir değil, yavaş yavaş "karakteri olan" bir robota dönüşmeye başladı. İşte son birkaç günün özeti.

1. Motorlardaki "Karakter Farkı" ve Yazılımsal Çözüm

Robotun şasisi ticari bir süpürge olsa da, motorlar fabrikasyon olarak birebir aynı tepkiyi vermiyor. Yaptığım PWM testlerinde gördüm ki; sağ motor 130 PWM değerinde kalkış yapabilirken, sol motor ancak 135-140 civarında hareket ediyordu.

  • Çözüm: Bridge katmanına motor bazlı min_abs_pwm eşikleri ekledim (Sol: 150, Sağ: 140). Bu sayede joystick’i hafifçe ittiğimde robot yengeç gibi yan gitmek yerine doğrudan ileri fırlıyor.

2. Odometri: "Kör Uçuş"tan Metrik Dünyaya

Bildiğiniz gibi tekerlek enkoderlerimiz tek kanallı. Yani robot geri mi gidiyor ileri mi, donanımsal olarak bilmiyor.

  • Gelişme: ESP32 üzerindeki state machine’i L298N’den gelen yön sinyalleriyle senkronize ettim. Şu an 604 pulse/tur çözünürlüğünde, yön bilgisini de içeren bir meta_odom verisi üretebiliyoruz.
  • Kalibrasyon: Şu an en kritik aşamadayım: wall2m_run testleri. Robotu duvara 2 metre mesafeye koyup, tekerleklerin attığı pulse sayısı ile LIDAR’dan gelen gerçek mesafe bilgisini karşılaştırarak right_scale (0.817 şu anki favorim) çarpanını oturtmaya çalışıyorum.

3. Sensör Füzyonu ve LIDAR

LIDAR (YD-Lidar X2) tarafında ESP32'yi hiç yormuyorum; veri hattı doğrudan Pi 4'e bağlı.

  • ESP32 sadece LIDAR'ın dönme hızını (RPM) kontrol ediyor (GPIO 14 üzerinden PWM ile).
  • IMU (MPU-9250): imu_read komutuyla ham verileri almaya başladık. Tek kanallı enkoderin en büyük düşmanı olan "zemin kayması" (drift) sorununu, IMU'dan gelen yönelim (heading) verisiyle kalibre edeceğimiz P4 fazının ortasındayız.

4. Sırada Ne Var?

Şu anki hedefim (P4.8 fazı), robotu her seferinde aynı çizgiden başlatıp duvara vurdurmadan durdurarak odometri hatasını %2'nin altına çekmek. Bu hassasiyeti yakaladığımız an P7 fazına geçiyoruz: Nav2 ve SLAM entegrasyonu! Yani robot evin içinde kendi haritasını çıkarmaya başlayacak.

Özetle; düşük seviye kontrolcü (ESP32) ile yüksek seviye beyin (Pi 4 - ROS2 Jazzy) arasındaki köprü artık çok daha stabil. Yakında ilk otonom devriye videosunu atarım!
 
Üzerindeki lidar fena değilmiş. saniyede 8 tane haritalama yapabiliyor. Yalnız merak ettim. Mesela duvarda birkaç santimetrelik süpürgelik varsa, süpürge de duvarın dibinde ise, LIDAR duvarın yeterince uzakta olduğunu zannedip ilerlemek isteyecek, ama süpürge gövdesi de duvar dibindeki süpürgeliğe dayanmış olacak. Bu durumu nasıl algılayacak sistem?
 

Forum istatistikleri

Konular
9,091
Mesajlar
146,664
Üyeler
3,680
Son üye
MeftuN

Son kaynaklar

Back
Top