Giriş
Bir otonom aracın en temel görevlerinden biri şeridinde kalmaktır. Bunun için aracın önüne yerleştirilen kameralarla gerçek zamanlı görüntü alınır ve bu görüntü üzerinden işaretli şerit çizgileri algılanarak aracın konumu sürekli olarak düzeltilir. Bu yazıda, OpenCV kullanarak nasıl şerit algılama sistemi geliştirdiğimi ve bunu ROS 2 simülasyonu ile nasıl entegre ettiğimi anlatacağım.
1. Proje Süreci ve Kullandığım Teknolojiler
- 📷 OpenCV (Python): Görüntü işleme
- 🧠 NumPy & Matplotlib: Görüntü üstünde hesaplamalar
- 🤖 ROS 2: Gerçek zamanlı veri aktarımı
- 🏁 Gazebo: Simülasyon ortamı

2. Kamera Görüntüsünü İşlemek
ROS 2 üzerinden gelen görüntülerde sarı şerit çizgisini bulmak için şu işlemleri uyguladım:
- Görüntünün alt kısmından ROI seçildi
- HSV dönüşümü ile sarı renk filtresi
- Canny Edge + Gaussian Blur
- Hough Transform ile çizgi çıkarımı
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([35, 255, 255])
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

3. ROI (Region of Interest)
Kameranın açısı eğik olduğu için görüntünün üst 1/3.2’lik kısmı kesildi. Böylece gereksiz alanlar işlenmeden şerit takibi daha güvenilir hale geldi.
4. Hata Değeri ile Araç Yönü Hesaplama
Şeridin orta noktası ile görüntü orta noktası arasındaki fark alınarak hata değeri hesaplandı:
error = line_center_x - frame_center_x
Eğer bu hata 0.3 altında ise araç düz gitmeye devam etti. Aksi durumda dönme komutu gönderildi.
5. Karar Mekanizması (Decision Layer)
`decision_maker.py` modülünde bu hata analizi yapılarak araca `cmd_vel` mesajı gönderildi.
- T-kavşaklarda sağ kamerada çizgi kaybolursa:
- Araç önce durur
- Sonra sağa 90 derece döner
6. Öğrendiğim Şeyler
- Gerçek zamanlı görüntü için ROI kritik
- HSV uzayı, renk filtrelemede RGB’ye göre daha stabil
- cv_bridge ile ROS 2 - OpenCV entegrasyonu çok verimli
Sonuç
Teorik bilgilerin pratiğe dönüşmesini sağlayan bu proje sayesinde, görüntü işleme ve otonom sürüş sistemleri konularında önemli deneyimler kazandım. ROS 2 simülasyon ortamı, testler için büyük kolaylık sağladı.