📌 Hızlı Özet & Temel Çıkarım:
Denizde Otonom Seyrüsefer, karadaki engelden kaçınma algoritmalarından farklı olarak uluslararası deniz hukuku olan COLREGs (Convention on the International Regulations for Preventing Collisions at Sea) standartlarına uymak zorundadır. ROS 2 Nav2 yığınında özel maliyet katmanları (Costmap Layers) ve Model Predictive Path Integral (MPPI) denetleyicileri kullanılarak, yaklaşan gemilerin iskele tarafından geçilmesi (baş başa çatışma kuralı) veya yol verme yükümlülüğü matematiksel kısıtlar olarak rota planlamasına enjekte edilir.


1. Denizde Seyrüsefer: COLREGs Neden Bir Algoritma Zorunluluğudur?

Karada bir robot önüne çıkan bir engelin sağından veya solundan geçmekte tamamen serbesttir; tek kriter en kısa yoldur. Ancak denizde bu serbestlik ölümcül çatışmalara yol açar. Uluslararası denizcilikte geçerli temel kurallar şunlardır:

  1. Kural 14 (Baş Başa Karşılaşma - Head-on Situation): Karşıdan gelen iki motorlu tekne de rotasını sancağa (sağa) kırarak birbirlerinin iskelesinden (solundan) geçmelidir.
  2. Kural 15 (Aykırı Geçiş - Crossing Situation): Diğer tekneyi sancak (sağ) tarafında gören tekne “yol veren tekne” (give-way vessel) statüsündedir ve onun pruvasından (önünden) geçmekten kaçınmalıdır.
  3. Kural 16 (Yol Veren Teknenin Hareketi): Erken, belirgin ve kararlı manevra yapılmalıdır; küçük rota değişiklikleri karşı kaptanı yanıltır.

Bu kuralları yapay zeka ve planlama algoritmalarına öğretmek, Nav2 maliyet haritasının asimetrik olarak ağırlıklandırılmasıyla mümkündür.


2. Nav2 Asimetrik COLREGs Costmap Katmanı

Geleneksel Nav2 engel katmanı, tespit edilen bir engelin etrafına dairesel ve simetrik bir şişirme (inflation) alanı çizer. Bu durum planlayıcının engelin solundan da sağından da eşit maliyetle geçebileceğini düşünmesine neden olur.

COLREGs uyumlu katmanda ise, hedef geminin hız vektörü ve yönelimi (AIS veya Radar/LiDAR ile elde edilen) doğrultusunda engelin sancak tarafına çok yüksek sanal maliyet (virtual penalty) eklenir. Böylece A* veya SmacPlanner, doğal olarak engelin iskele tarafından dolaşan ve kurala uyan rotayı tek mantıklı seçenek olarak seçer.

Aşağıdaki Python tabanlı maliyet haritası güncelleme mantığı bu asimetrik dağılımı özetler:

import numpy as np

def generate_colreg_costmap_patch(relative_heading, speed_knots, grid_res=0.5):
    """
    relative_heading: Karsilasan teknenin bagil bas acisi (derece)
    speed_knots: Karsidaki teknenin seyir hizi
    """
    size = int(60 / grid_res) # 60 metrelik etki alani
    patch = np.zeros((size, size), dtype=np.uint8)
    center = size // 2

    # Engelin pruva ve iskele/sancak bolgelerini asimetrik agirliklandir
    for y in range(size):
        for x in range(size):
            dx = (x - center) * grid_res
            dy = (y - center) * grid_res
            dist = np.hypot(dx, dy)
            
            if dist < 5.0: # Fiziksel carpisma bolgesi
                patch[y, x] = 254
            elif dist < 35.0:
                angle = np.arctan2(dy, dx)
                # Sancak on bolgesine yuksek sanal maliyet ekleyerek oraya girmeyi engelle
                if 0 <= angle <= np.pi / 2:
                    patch[y, x] = int(220 * (1.0 - dist / 35.0))
                else:
                    patch[y, x] = int(80 * (1.0 - dist / 35.0))
                    
    return patch

3. MPPI (Model Predictive Path Integral) Denetleyicisi ile Dinamik Sürüklenme Telafisi

Deniz araçları tekerlekli robotlar gibi rayında gitmez; rüzgar ve dalgalar gövdeyi sürekli yana doğru kaydırır (drift / sideslip angle). Rota çizgisi üzerinde kalabilmek için teknenin burnu rüzgara doğru hafifçe çevrilmelidir (Crabbing motion).

ROS 2 Nav2 bünyesinde yer alan MPPI Controller, binlerce olası kontrol yörüngesini (trajectories) GPU veya çok çekirdekli CPU üzerinde paralel olarak simüle eder. Teknenin hidrodinamik kütle, atalet ve sürüklenme katsayılarını hesaba katarak en pürüzsüz ve enerji verimli itki kombinasyonunu seçer.


4. İlgili Konular ve İç Bağlantılar


5. Sıkça Sorulan Sorular

Evet. Çoğu USV yalnızca ileri/geri ve dümen kontrolüne sahip difransiyel veya dümenli yapıdır (Ackermann benzeri kısıt). Nav2 SmacPlanner2D ve Hybrid-A*, aracın minimum dönüş yarıçapını parametrik olarak tanımlamanıza izin verir ve teknenin yerinde dönemeyeceği gerçeğine göre uygulanabilir eğriler (Reeds-Shepp veya Dubins paths) üretir.

GPS sinyalinin kesildiği dar boğazlarda Nav2 nasıl davranır?

Dead reckoning moduna geçer. LiDAR tabanlı SLAM (Cartographer veya LIO-SAM) kıyı hatlarını ve şamandıraları eşleştirerek yerel harita üzerinde konumunu sürdürür.

6. SmacPlanner Hybrid-A* ve Reeds-Shepp Eğrileri ile Rıhtım Yanaşma

USV’nin açık deniz seyrüseferinden liman içi yanaşma (docking) moduna geçtiği senaryolarda standart 2D planlayıcılar yetersiz kalır; çünkü teknenin yönelimi (heading) yanaşma açısını doğrudan belirler.

Nav2 bünyesindeki SmacPlanner Hybrid-A*, arama uzayına $X, Y$ koordinatlarının yanı sıra $ heta$ (açı) boyutunu da ekler. Teknenin ileri ve geri manevra kabiliyetlerini Reeds-Shepp analitik eğrileriyle birleştirerek, rıhtıma paralel yanaşmayı sağlayacak manevra dizisini hesaplar:

Aşağıdaki parametre yapılandırması dar kanal ve liman yanaşma manevralarını optimize eder:

planner_server:
  ros__parameters:
    expected_planner_frequency: 10.0
    planner_plugins: ["GridBased"]
    GridBased:
      plugin: "nav2_smac_planner/SmacPlannerHybrid"
      downsample_costmap: false
      allow_unknown: false
      tolerance: 0.25
      max_iterations: 100000
      max_on_approach_iterations: 1000
      max_planning_time: 2.0
      motion_model_for_search: "REEDS_SHEPP"
      angle_quantization_bins: 72 # 5 derecelik aci hassasiyeti
      minimum_turning_radius: 2.5 # Metre cinsinden tekne donus capi
      reverse_penalty: 2.0        # Geri vites manevrasina kontrollu ceza
      change_penalty: 0.5
      non_straight_penalty: 1.2
      cost_penalty: 2.5

Bu yapılandırma, teknenin rıhtıma yaklaşırken kendi etrafında kontrolsüz savrulmasını engeller ve motorların minimum ileri-geri değişimiyle en yumuşak hat üzerinden hedefe kilitlenmesini sağlar.