📌 Hızlı Özet:
Otonom sistemlerde Gazebo, algoritmayı guvenli kirmanin yeridir; Jetson Orin ise sahaya yakin hesap platformudur. Iyi is akisi, ayni ROS 2 dugumlerini iki ortamda da calistiracak sekilde paketler, parametreleri ayirir ve bag/log ile geri besler. Bu yazida Pusula USV tarzı bir sim→Orin boru hattini abartisiz anlatiyorum.


Neden ayri makineler, tek yazilim?

Simulasyon bilgisayarinda guclu CPU/GPU, bol RAM ve rahat ekran vardir. Jetson Orin (Nano/NX/AGX varyantlari) ise gomulu CUDA, sinirli termal butce ve sahaya cikabilir baglanti sunar. Ikisinde de ayni “beyni” kosuturmaya calisiriz; ama aynı world dosyasını Orin’de 60 FPS fizikle ezmeye calismak sikca yanlis hedeftir.

Benim tercih ettigim zihin modeli:

  • Dev workstation: Gazebo world, sensor plugin, hizli iterasyon
  • Orin: algılama/control dugumleri, gercek kamera/IMU, telemetri
  • Kontrat: ayni mesajlar, ayni launch argumanlari, ortam bazli parametre

Is akisi haritasi (ucak gorunumu)

  1. Arac URDF/SDF + temel plugin’ler (iturucu, IMU, GPS sahte)
  2. ROS 2 Humble dugumleri workstation’da Gazebo’ya baglanir
  3. Senaryo seti: duz hat, engel, GPS kaybi, E-stop
  4. CI veya gece kosusu: headless sim + smoke test
  5. Ayni paketler Orin imajina alinir (container veya native)
  6. Orin’de once bag replay, sonra gercek sensor
  7. Saha log’u → sim’e yeni regresyon senaryosu

Dongu kapali degilse sim “oyuncak”, saha “kumarbazlik” olur.

Gazebo tarafinda neyi modellemeli?

Oncelik sirasi (USV/otonom arac icin):

  1. TF ve kinematik: dogru linkler, thruster frame’leri
  2. Aktuator gecikmesi / limit: aninda tork masalı
  3. Sensor rate ve gurultu: mukemmel GPS yasak
  4. Basit cevre: iskele, sığlık kutulari — AAA gorsellik sart degil
  5. Haberlesme bozuklugu: opsiyonel ama egitici

Goruntu isleme egitiyorsaniz kamera plugin’i ve isik kosulu onem kazanır. Sadece Nav2/kontrol egitiyorsaniz dusuk kalite mesh ile ilerleyin; zamaninizi shader’da yakmayin.

Jetson Orin gercekleri

Orin gucludur ama sinirsiz degildir:

  • Termal throttle uzun sureli yuksek GPU isinde gelir
  • Disk ve log yazma sahada dolabilir — rotasyon sart
  • USB kamera + Ethernet lidar + telemetri radyosu birleseince CPU biter
  • Masaustunde calisan PyTorch modeli, Orin’de TensorRT / cozunurluk dusumu isteyebilir

Bu yuzden simde egittiginiz “tam cozunurluk pipeline”ini Orin profiliyle ayri olcun. “Simde 30 FPS idi” Orin garantisi degildir; zaten bu yazida FPS garantisi de vermiyorum — olcun, kaydedin, karar verin.

Ortak paket duzeni

Onerilen ayirim:

  • usv_description — URDF/SDF, mesh
  • usv_gazebo — world, spawn, sim-only launch
  • usv_nav / usv_control — hem sim hem gercek
  • usv_bringupsim.launch.py vs orin.launch.py
  • usv_paramscommon.yaml, sim.yaml, orin.yaml

sim.yaml icinde mukemmel lokalizasyon; orin.yaml icinde gercek EKF gurultu kapilari. Kod if sim dolu olmasin; launch parametresi ile sectirin.

Container mi, native mi?

Iki yol da olur:

  • Native Humble JetPack uyumuyla: dusuk surtunme, ama surum kilitlenmesi
  • Docker/container: workstation ile ayni imaj; ama GPU/camera device mounting ozen ister

Takimda yeni uyeler coksa container tutarliligi kurtarır. Yarışma haftasinda “birinin laptop’unda farkli Python” krizini azaltır. Orin’de container kullanıyorsaniz zaman senkronu (/clock vs sistem saati) ve realtime onceliklerini bilinçli test edin.

Bag ve replay: gizli kahraman

Saha veya sim log’unu ros2 bag ile alin. Sonra Orin’de veya laptop’ta:

  • Algılama dugumunu replay uzerinde kosun
  • Nav/control’u ayri regress edin
  • “O gun bozulan” anı senaryo klasorune ekleyin

Bu, Gazebo world yazmaktan bazen daha degerlidir. Cunku gercek gurultu icerir. Sim ve bag birlikte kullanın; birini din haline getirmeyin.

CI’da simulasyon

Her PR’da tam Gazebo GUI beklemeyin. Yapilabilir olan:

  • URDF parse / check_urdf
  • Launch smoke (birkaç saniye ayakta kal)
  • Headless kisa world + “base_link TF yayinlaniyor mu?”
  • Python birim testleri (allocator, geofence)

Uzun fizik kosulari gece job’ina kalsin. CI’nin isi erken kirilma; sahanın yerini almak degil.

Tipik kopukluklar ve duzeltmeleri

Belirti Sik neden Ne yapmali
Simde duzgun, Orin’de osilasyon Farkli rate / gecikme Parametreleri ortama ayir, olc
TF agaci farkli Spawn/launch sirasi view_frames her ortamda
Kamera dugumu Orin’de dusuk FPS Cozunurluk + kopya Pipeline’i Orin’de profille
Bag saati kayik /use_sim_time karisikligi Launch’ta netlestir
Model “Orin’de yetismiyor” Sinirsiz sim varsayimi Model kucult / TRT / ROI

Guvenlik: simde de E-stop senaryosu

Simulasyonda E-stop’u “butonu unuttuk” diye gecmeyin. Yazilimsal kill switch’in komut zincirini kestigini simde gosterin. Orin imajina da ayni dugum girsin. Saha ilk gununde ogrenilen E-stop, pahali derstir.

Ornek gunluk rutin (takim)

Sabah: workstation’da dunku bag’den regress.
Oglen: Gazebo’da yeni keepout senaryosu.
Aksam: Orin’e flash/pull, liman kenari kisa test, log al.
Gece: log’dan bir smoke test daha.

Bu rutin, “bir kisi simde kahraman, bir kisi sahada yangın söndürür” modelinden iyidir.

Kapanis

Gazebo ile Jetson Orin arasindaki basarili is akisi, ayni FPS’i kovalamak degil; ayni yazilim kontratını iki ortamda yasatmaktır. Parametreleri ayırın, bag’i kutsal sayın, CI’yi hafif tutun, sahayı nihai hakem kabul edin. Otonom sistemlerde simulasyon riski azaltır — gercegi iptal etmez. Pusula tarzı ilerleme de budur: olc, kaydet, tekrarla.