ROS + OpenCV Şerit Tespiti
USB kamera akışından gerçek zamanlı şerit algılama ve yönlendirme sinyali üretimi — Teknofest Robotaksi prototipi
Proje Bilgisi
- ✓Kategori: Bilgisayarlı Görü / Otonom Sürüş
- ✓Bağlam: Teknofest Robotaksi için gerçek zamanlı prototip
- ✓Girdi: USB kamera veya ROS kamera sürücüsü
- ✓Çıktı: Şerit maskeleme & yönlendirme açısı (PID’e uygun)
- ✓Platform: ROS (Ubuntu), OpenCV
ROS
OpenCV
Python
C++
Canny
Hough
PID
Mimari & Algoritma Boru Hattı
Sistem, klasik OpenCV tabanlı bir şerit tespiti yaklaşımıyla gerçek zaman performans hedefler. Tipik akış aşağıdaki adımlardan oluşur:
- ROI (Region of Interest): Yolun ilgi bölgesi maskeleme (alt üçgen/poligon).
- Ön işleme: Gri tonlama, Gauss bulanıklaştırma, dinamik eşikleme.
- Kenar çıkarımı (Canny): Aday çizgi kenarlarının çıkarımı.
- HoughLinesP: Sağ/sol şerit adaylarının hat segmentleri olarak bulunması.
- Simetri & birleştirme: Çizgilerin filtrelenmesi, eğim/süreklilik ile birleştirme.
- Yön açısı tahmini: Şerit merkezine göre sapma ve
steering_angle
üretimi. - İsteğe bağlı düzeltmeler: Zaman penceresinde yumuşatma, jitter azaltma.
Not: Konu adları (topic), düğüm isimleri ve parametre dosyaları depo içinde tanımlıdır; burada verilenler
genel şablondur. Depodaki launch ve/veya param dosyalarıyla özelleştirilebilir.
Örnek ROS Konuları
/camera/image_raw
– Giriş görüntüsü/lane/overlay
– Tespit edilen şerit overlay’i (isteğe bağlı)/lane/steering_angle
– Yönlendirme açısı (float)/lane/pid
– PID kontrol girdisi (opsiyonel)
Örnek Parametreler
Parametre | Açıklama | Örnek |
---|---|---|
canny_low | Kenar alt eşiği | 50 |
canny_high | Kenar üst eşiği | 150 |
hough_threshold | Hough oy eşiği | 30 |
minLineLength | Minimum çizgi uzunluğu | 25 |
maxLineGap | Çizgi birleştirme boşluğu | 20 |
roi_vertices | İlgi bölgesi çokgeni | alt üçgen |
smoothing_window | Açı yumuşatma penceresi | 5 |
Kurulum (Örnek)
# ROS & bağımlılıklar (örnek: Noetic / Ubuntu 20.04)
sudo apt update
sudo apt install ros-noetic-desktop-full python3-opencv
# Çalışma alanı
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
# Depoyu ekle
git clone https://github.com/mr-ozdemir/Lane-detection-with-Opencv-in-Ros.git
# Derleme (varsa C++ düğümleri için)
cd ..
catkin_make
source devel/setup.bash
Çalıştırma (Örnek)
# Kamera sürücünüzü başlatın (örnek)
roslaunch usb_cam usb_cam-test.launch
# Lane tespiti - launch dosyası varsa:
roslaunch lane_detection lane_detection.launch
# veya tek düğüm çalıştırma (depo yapısına göre):
rosrun lane_detection lane_node.py
# ya da
rosrun lane_detection lane_node
Komutlar depo yapısına göre değişebilir; depodaki README/launch dosyalarına göre uyarlayın.
Notlar & Olası Geliştirmeler
- Farklı ışık/zemin koşulları için ROI ve kenar/çizgi eşikleri sahaya göre ayarlanmalıdır.
- FPS/latency hedefleri çözünürlüğe ve donanıma bağlıdır; 640×480 ile daha stabil gerçek zaman performans alınır.
- Gelecekte segmentasyon tabanlı yaklaşımlar (örn. U-Net, ENet) ile klasik yöntem hibrit edilebilir.
- ROS2 portu ve donanım ivmelendirme (GPU/OpenCL) planlanabilir.