📌 Hızlı Özet & Temel Çıkarım:
Otonom Sistemlerde Güvenlik ve Hata Toleransı, yazılımın çökeceği, işletim sisteminin kilitleneceği veya telemetrinin kopacağı varsayımı üzerine kurgulanan çok katmanlı savunma mimarisidir. Bağımsız bir donanımsal Watchdog Timer (WDT), telemetri nabız (heartbeat) denetleyicisi ve fail-safe röle devreleri sayesinde sistem, bir anormallik hissettiği anda itkiyi sıfırlar veya acil durum eve dönüş (Return-to-Home) sekansını devreye alır.
1. Otonomide Güvenlik Felsefesi: Hata Bir Seçenek Değildir
Açık denizde veya kontrolsüz bir sahada görev yapan bir otonom taşıtta yazılımsal bir kilitlenme yaşanması, kontrolsüz bir teknenin çevreye çarpması veya açık denizlere sürüklenip kaybolması anlamına gelir.
Bu nedenle güvenilirlik (reliability) algoritmaları tek bir katmanda çözülemez. Sistem katmanları şunlardır:
- Katman 0 (Donanımsal Acil Durdurma - Hard E-Stop): Fiziksel bir kablosuz acil durum butonuyla ana batarya kontaktörlerini doğrudan düşüren bağımsız RF alıcı devresi. Yazılımdan ve ana bilgisayardan tamamen izoledir.
- Katman 1 (Mikrodenetleyici Watchdog): STM32 / AVR mikrodenetleyicisi üzerinde çalışan donanımsal zamanlayıcı. Ana işlemci (Jetson/PC) 500 ms içinde nabız göndermezse motor PWM sinyallerini toprağa çeker.
- Katman 2 (ROS 2 Düğüm Seviyesi Fail-Safe): Sensör frekanslarını ve topik sağlığını sürekli gözetleyen durum makineleri.
2. Kalp Atışı (Heartbeat) Protokolü ve Durum Makinesi
Ana bilgisayar ile yer istasyonu ve motor sürücü kartı arasında sürekli bir “ben hayattayım” sinyali (heartbeat) akmalıdır.
Eğer 2 saniye boyunca sinyal alınamazsa sistem şu durum makinesini işletir:
[NORMAL SEYİR]
│
▼ (Telemetri Kaybı > 2.0 sn)
[BEKLE VE DİNLE (Holding Station)]
│
▼ (Sinyal Yok > 30.0 sn)
[ACİL EVE DÖNÜŞ (Return to Home - RTH)]
│
▼ (Kritik Düşük Voltaj < 21.0V)
[GÜVENLİ DEMİRLEME / MOTORLARI KES (Safe Shutdown)]
Aşağıdaki Python örneği, ROS 2 üzerinde çalışan ve telemetri kesintisinde acil durum eylemini tetikleyen güvenilir bir gözetmen (sentinel) düğümünü sergiler:
import rclpy
from rclpy.node import Node
from std_msgs.msg import Header
from geometry_msgs.msg import Twist
class SafetySentinelNode(Node):
def __init__(self):
super().__init__('safety_sentinel')
self.last_heartbeat_time = self.get_clock().now()
# Telemetri dinleyicisi
self.create_subscription(Header, '/telemetry/heartbeat', self.heartbeat_cb, 10)
# Guvenlik override yayincisi (yuksek oncelikli)
self.safe_cmd_pub = self.create_publisher(Twist, '/usv/cmd_vel_override', 1)
# 100 ms frekansinda sistem saglik kontrolu
self.timer = self.create_timer(0.1, self.check_safety_loop)
def heartbeat_cb(self, msg):
self.last_heartbeat_time = self.get_clock().now()
def check_safety_loop(self):
now = self.get_clock().now()
elapsed = (now - self.last_heartbeat_time).nanoseconds / 1e9
if elapsed > 2.0:
self.get_logger().error(f'Telemetri koptu! {elapsed:.1f} saniyedir sinyal yok. Fail-safe devrede!')
stop_msg = Twist()
stop_msg.linear.x = 0.0
stop_msg.angular.z = 0.0
self.safe_cmd_pub.publish(stop_msg)
def main():
rclpy.init()
node = SafetySentinelNode()
rclpy.spin(node)
3. Donanımsal Watchdog Entegrasyonu (Hardware WDT)
Yazılımsal zamanlayıcılar işletim sistemi çekirdeği (kernel panic) çöktüğünde çalışmayı durdurur. Bu açığı kapatmak için harici bir I2C veya GPIO tabanlı donanım zamanlayıcı entegresi (örneğin MAX6369) kullanılır.
Ana yazılım bu entegreye her 100 milisaniyede bir “pin toggle” sinyali göndermelidir. Eğer işletim sistemi kilitlenir ve bu pin 1 saniye boyunca değişmezse, donanım entegresi bilgisayarın reset pinini toprağa çeker veya acil durum sirenini devreye sokarak motor gücünü keser.
4. İlgili Konular ve İç Bağlantılar
- ROS 2 Humble ile USV Mimarisi Kurulumu — Güvenlik düğümlerinin entegre edildiği omurga.
- Nav2 ve COLREGs ile Otonom Seyrüsefer — Acil durum eve dönüş (RTH) rotasının yürütülmesi.
- Docker ve Linux Container Teknolojilerinde İzolasyon — Kritik servislerin çökmesini önleyen yazılım izolasyonu.
5. Sıkça Sorulan Sorular
Fail-safe modunda GPS de arızalanırsa ne yapılır?
Eğer hem telemetri hem de GPS kaybolursa araç “kör arıza” (blind failure) durumuna geçer. Motorlar tamamen susturulur, acil durum çakar lambaları (strobe lights) yakılır ve aracın sürüklenmesini yavaşlatmak için pasif deniz demiri (sea anchor) bırakılabilir.
Batarya voltajı ani düştüğünde sistem nasıl tepki verir?
BMS (Battery Management System), hücre voltajı kritik seviyeye (örneğin hücre başı 3.2V) indiğinde CAN veri yolu üzerinden alarm yayınlar. Rota planlayıcı o andaki konuma en yakın acil yanaşma koordinatını hesaplayarak aracı oraya yönlendirir.
6. Donanımsal Akım, Sıcaklık ve Batarya Güvenlik Katmanı (BMS Entegrasyonu)
Yazılımsal güvenlik algoritmalarının yanı sıra, deniz araçlarının lityum polimer (LiPo) veya lityum demir fosfat (LiFePO4) bataryaları zorlu koşullarda aşırı ısınma ve termal kaçak (thermal runaway) riski taşır.
Pusula USV güç dağıtım mimarisinde şu donanımsal korumalar uygulanmıştır:
- Hall Effect Akım Sensörleri (Allegro ACS770): Motor hatlarındaki anlık akım analog olarak okunur; bir pervaneye deniz yosunu veya misina dolandığında motor mili kilitlenir (stall current) ve akım aniden 120 Amperin üzerine fırlar.
- Hızlı Donanım Koruması (Hardware Interrupt): Yazılımın bunu fark etmesi 100 milisaniye alabilir. Bu gecikmeyi önlemek için op-amp tabanlı bir karşılaştırıcı (comparator) devresi, akım 110 Amperi aştığı anda 2 mikrosaniye içinde motor sürücünün
ENABLEpinini sıfıra çekerek MOSFET’lerin yanmasını engeller. - Opto-izole Röleler ile Bağımsız Bilgisayar Sıfırlama: Eğer ana bilgisayar 3 saniye boyunca yanıt vermezse, mikrodenetleyici üzerindeki bistable röle Jetson’ın güç hattını 2 saniye kesip yeniden açarak temiz bir soğuk yeniden başlatma (cold boot) tetikler.
7. Çift Yedekli (Dual-Redundant) Can Veri Yolu ve Sensör Karşılaştırma Mantığı
Kritik otonom deniz operasyonlarında tek bir sensörün bozulması kadar, “yanlış veri üreterek bozulması” da tehlikelidir (Bizans Hatası - Byzantine Fault). Örneğin pusula 90 derece dönmüş olmasına rağmen hala 0 derece gösteriyorsa tek bir sensöre bakarak arıza anlaşılamaz.
Pusula USV gövdesinde iki bağımsız IMU ve çift GPS modülü paralel çalışır.
Gözetleyici düğüm her döngüde iki sensör arasındaki farkı ($\Delta heta$) denetler:
- Eğer iki pusula arasındaki açı farkı 15 derecenin üzerindeyse,
- Sistem “Sensör Uyuşmazlığı” alarmı üretir,
- Her iki sensörü de devre dışı bırakarak optik kamera ufuk çizgisi takibine veya güvenli duraklama moduna geçer.