📌 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:
- 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.
- 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.
- 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
- ROS 2 Humble ile USV Mimarisi Kurulumu — Nav2 yığınının koştuğu çekirdek mimari.
- Deniz Yüzeyinde LiDAR ve Stereo Kamera Füzyonu — Dinamik engellerin tespiti ve takip algoritmaları.
- Otonom Sistemlerde Fail-Safe ve Watchdog Mimarisi — Rota tıkandığında acil durum duraklama protokolleri.
5. Sıkça Sorulan Sorular
Nav2 deniz taşıtlarının holonomik olmayan (non-holonomic) hareketini destekler mi?
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.