📌 Hızlı Özet & Temel Çıkarım:
Python ile otonom araç simülasyonu, karmaşık robotik sistemlerin fiziksel donanıma aktarılmadan önce yazılımsal ortamda kinematik modelleme, yol planlama (A*, RRT*) ve PID/MPC kontrol algoritmalarıyla test edilmesini sağlayan mühendislik sürecidir. Simülasyon ortamları donanım maliyetini sıfırlarken, kaza ve arıza senaryolarını güvenli şekilde doğrulamaya imkan tanır. ROS 2 (Robot Operating System) entegrasyonu sayesinde simülasyonda yazılan kontrol kodları doğrudan gerçek otonom deniz, hava veya kara araçlarına taşınabilir.


Giriş: Neden Simülasyon Odaklı Geliştirme?

Otonom insansız araçların (USV - İnsansız Deniz Aracı, İHA, İKA) geliştirme süreçlerinde donanım testleri yüksek maliyetli, zaman alıcı ve risklidir. Denizde veya zorlu arazide meydana gelebilecek küçük bir algoritma hatası; aracın kayalara çarpması, batması veya kontrol dışı kalması gibi geri dönüşü olmayan maddi hasarlara yol açar. Bu nedenle modern otonom sistem mühendisliğinin temel felsefesi; yazılan her algoritmanın önce %100 doğrulukla simülasyon ortamında stres testlerinden geçirilmesidir.

Python; zengin bilimsel kütüphane ekosistemi (NumPy, SciPy, Matplotlib), hızlı prototipleme kabiliyeti ve modern robotik işletim sistemi standartlarıyla (ROS 2 Humble) olan kusursuz uyumu sayesinde otonom simülasyonların vazgeçilmez dilidir.


1. Temel Kinematik Modelleme ve Araç Fiziği

Bir aracın simülatörde gerçekçi hareket edebilmesi için matematiksel bir fizik ve hareket modeline ihtiyaç vardır. Çift iticili bir insansız su üstü aracı (USV) veya diferansiyel sürüşlü kara robotu kinematiği şu diferansiyel denklemlerle modellenir:

  • Konum Güncellemesi:
    • $x_{yeni} = x + v \cdot \cos( heta) \cdot \Delta t$
    • $y_{yeni} = y + v \cdot \sin( heta) \cdot \Delta t$
    • $ heta_{yeni} = heta + \omega \cdot \Delta t$

Burada $v$ doğrusal hızı (m/s), $\omega$ açısal dönüş hızını (rad/s), $ heta$ ise aracın anlık yönelim (heading / yaw) açısını temsil eder. Python içerisinde oluşturulan 50-100 Hz frekansındaki bir simülasyon döngüsü (tick loop), bu denklemleri ardışık hesaplayarak aracın sanal koordinat düzlemindeki hareketini son derece akıcı şekilde üretir.


2. Engel Algılama ve İki Kademeli Rota Planlama

Otonom bir aracın başlangıç noktasından hedef koordinata güvenle ulaşabilmesi için iki katmanlı bir rota mimarisi kurgulanır:

  1. Global Rota Planlayıcı (Global Path Planner): Önceden bilinen statik harita verilerini kullanarak başlangıç ile hedef arasındaki en kısa, maliyeti en düşük patikayı üretir. En yaygın algoritmalar A* (A-Star) ve Dijkstra’dır.
  2. Lokal Reaktif Engelden Kaçınma (Local Planner): Lidar, sonar veya ultrasonik sensörlerden anlık olarak okunan dinamik engellere göre global rotayı milisaniyeler içinde revize eder. Burada Yapay Potansiyel Alanlar (Artificial Potential Fields - APF) ve Dinamik Pencere Yaklaşımı (DWA) öne çıkar.
Algoritma Görev Katmanı Avantajı Dikkat Edilmesi Gereken Kısıt
A (A-Star)* Global Rota Matematiksel olarak en optimum yolu garanti eder Harita büyüdükçe bellek tüketimi artar
RRT (Rapidly-exploring Tree)* Karmaşık Araziler Yüksek serbestlik dereceli uzaylarda hızlıdır Ürettiği rotalar düzeltme (smoothing) gerektirir
Yapay Potansiyel Alanlar (APF) Lokal Kaçınma Hesaplama yükü çok düşüktür, anlık tepki verir Yerel tuzaklara (local minima) takılabilir
DWA (Dynamic Window Approach) Hız Profili Seçimi Aracın ivme limitlerini hesaba katar Yüksek hızlarda anlık engelleri kaçırabilir

3. Sensör Füzyonu ve Genişletilmiş Kalman Filtresi (EKF)

Gerçek dünyada hiçbir sensör kusursuz değildir. GPS sinyalleri binaların veya köprülerin altında kaybolabilirken (multipath etkisi), manyetometre ve IMU sensörleri motorların yaydığı elektromanyetik parazitlerden etkilenir.

Simülasyon kodumuza gerçekçilik katmak için sensör verilerine Gaussian beyaz gürültü (white noise) eklenmeli ve bu veriler bir Genişletilmiş Kalman Filtresi (EKF) vasıtasıyla birleştirilmelidir:

  • IMU (Ataletsel Ölçüm Birimi): Yüksek frekansta (100 Hz) hızlı açısal ivme sağlar ancak zamanla sapma (drift) yapar.
  • GPS: Düşük frekansta (5-10 Hz) mutlak konum verir ve sapma yapmaz.
  • EKF Çıktısı: Bu iki sensörün güvenilirlik kovaryans matrislerini harmanlayarak aracın gerçek konumunu ve yönelimini milimetre hassasiyetinde tahmin eder.

4. Python ve ROS 2 Düğüm Entegrasyonu

Geliştirilen simülasyon kodunun gerçek bir robota taşınabilmesi için endüstri standardı olan ROS 2 Humble / Iron mimarisi kullanılmalıdır. Aşağıda, sensörden gelen lazer taramasını dinleyip motorlara yön komutu veren örnek bir Python kontrol düğümü yer almaktadır:

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

class AutonomousController(Node):
    def __init__(self):
        super().__init__('autonomous_controller')
        self.cmd_pub = self.create_publisher(Twist, '/cmd_vel', 10)
        self.scan_sub = self.create_subscription(LaserScan, '/scan', self.scan_callback, 10)
        self.get_logger().info("Otonom kontrol ve reaktif surus dugumu baslatildi.")

    def scan_callback(self, msg):
        # On sektordeki en yakin engeli tespit et
        front_ranges = msg.ranges[len(msg.ranges)//4 : 3*len(msg.ranges)//4]
        valid_ranges = [r for r in front_ranges if msg.range_min < r < msg.range_max]
        
        twist = Twist()
        if valid_ranges and min(valid_ranges) < 1.2:
            # 1.2 metreden yakin engel: Yavasla ve sancak yonune manevra yap
            twist.linear.x = 0.2
            twist.angular.z = -0.8
            self.get_logger().warn("Engel algilandi, rotadan kaciniliyor!")
        else:
            # Yol guvenli: Normal seyir hizina devam
            twist.linear.x = 1.5
            twist.angular.z = 0.0
            
        self.cmd_pub.publish(twist)

5. Simülasyondan Fiziksel Testlere Geçiş İlkeleri

Sanal ortamda kusursuz çalışan bir algoritmanın gerçek donanımda başarıyla görev yapabilmesi için şu mühendislik kuralları uygulanmalıdır:

  1. Watchdog ve Güvenli Mod (Fail-Safe): Simülasyondan gelen kontrol sinyalleri 200 milisaniyeden uzun süre kesilirse, motor sürücü donanımı otonom olarak ‘acil stop’ durumuna geçmelidir.
  2. İletişim Gecikmesi Testi (Latency Injection): Seri port (UART), CAN Bus veya WiFi üzerinden aktarılan telemetri paketlerindeki gecikmeler simülatörde kasıtlı olarak simüle edilmelidir.
  3. Telemetri ve Kara Kutu Günlüğü (Rosbag): Gerçek testler esnasında yaşanan tüm sensör verileri ve kontrol komutları ros2 bag ile diske kaydedilmeli, olası kararsızlıklar simülasyonda tekrar oynatılarak (replay) incelenmelidir.

Sonuç

Python tabanlı simülasyon altyapıları, otonom araç projelerinde hata yapma maliyetini ortadan kaldıran en kritik kaldıraçtır. Doğru matematiksel modeller, sensör füzyonu ve ROS 2 standartları ile inşa edilen bir simülasyon katmanı, projenizi aylar süren donanım tamirlerinden kurtararak doğrudan başarıya ulaştırır.