AI-система для автономних суден: від perception до сертифікації

Уявіть: ваше судно йде в густому тумані, радар показує десятки цілей, але ви не знаєте, які з них — дрібні буї, а які — великі танкери. Кожна секунда затримки в розпізнаванні загрози — ризик зіткнення. Стандартні системи (радар + AIS) не вирішують проблему: вони не класифікують об'єкти, а людина за

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Уявіть: ваше судно йде в густому тумані, радар показує десятки цілей, але ви не знаєте, які з них — дрібні буї, а які — великі танкери. Кожна секунда затримки в розпізнаванні загрози — ризик зіткнення. Стандартні системи (радар + AIS) не вирішують проблему: вони не класифікують об'єкти, а людина за бортом залишається непоміченою до останнього. Ми створили AI-систему, яка об'єднує камери, LiDAR, радар та AIS в єдиний конвеєр сприйняття, автоматично застосовує правила COLREG та виявляє людину за бортом за секунди. За 5 років реалізовано більше 10 проєктів — від риболовних траулерів до контейнеровозів. Завдяки автоматизації, замовники скорочують витрати на екіпаж до 30%, а окупність системи становить 2–3 роки.

Чому морська автономія складніша за автомобільну?

У морі немає чітких смуг, розмітки та знаків. Натомість — хвилювання, бризки на лінзах, туман, сліпуче сонце на воді та нічні вогні. Камера може осліпнути, LiDAR — захлинутися в дощі, радар — дати хибні відлуння від хвиль. Потрібен мультисенсорний fusion з корекцією за часом і простором. Крім того, треба інтерпретувати вогні суден (МППСС-72) та передбачати їх маневри. Помилка в оцінці ситуації може коштувати мільйонів доларів і людських життів.

Як ми будуємо perception: сенсорний fusion

Використовуємо YOLOv8l, донавчений на морських даних, у зв'язці з радаром ARPA та AIS. LiDAR Ouster OS1-64 закриває ближню зону (до 120 м). Latency повного циклу perception — 150–250 мс. Під час туману система автоматично підвищує вагу радара та LiDAR, а камеру використовує для класифікації. Нижче — фрагмент конвеєра на Python.

import numpy as np import cv2 from ultralytics import YOLO class MarinePerceptionSystem: def __init__(self, config: dict): # Детектор суден і перешкод: YOLOv8l, донавчений на морських даних self.vessel_detector = YOLO(config['vessel_model']) # Радарні дані (ARPA/AIS) self.radar_parser = RadarARPAParser(config['radar_port']) self.ais_receiver = AISReceiver(config['ais_port']) # LiDAR (Ouster OS1) для ближньої зони < 100м self.lidar_processor = MarineLiDAR(config['lidar_config']) self.camera_matrix = np.array(config['cam_intrinsics']) def fuse_detections(self, frame: np.ndarray, radar_tracks: list, ais_contacts: list, lidar_points: np.ndarray) -> list[dict]: # Камера: виявлення суден, буїв, плавника, людей за бортом cam_dets = self.vessel_detector(frame, conf=0.4) fused_contacts = [] for det in cam_dets[0].boxes: cls = self.vessel_detector.model.names[int(det.cls)] bbox = list(map(int, det.xyxy[0])) bearing = self._bearing_from_bbox(bbox, frame.shape) # Дистанція з LiDAR (якщо є точки в секторі) distance = self._lidar_distance_in_sector(lidar_points, bearing) # Зіставлення з AIS (якщо є MMSI в тому напрямку) ais_match = self._match_ais(bearing, distance, ais_contacts) contact = { 'class': cls, 'bearing_deg': bearing, 'distance_m': distance, 'confidence': float(det.conf), 'bbox': bbox, 'ais_data': ais_match, 'source': 'camera+lidar' } # Доповнюємо радарним треком radar_match = self._match_radar(bearing, distance, radar_tracks) if radar_match: contact['cog'] = radar_match.get('cog') # курс contact['sog'] = radar_match.get('sog') # швидкість contact['tcpa'] = radar_match.get('tcpa') # час до CPA contact['cpa'] = radar_match.get('cpa') # мінімальна відстань fused_contacts.append(contact) return fused_contacts def _bearing_from_bbox(self, bbox: list, frame_shape: tuple) -> float: cx = (bbox[0] + bbox[2]) / 2 fov_h = 60 # градусів горизонтального огляду return (cx / frame_shape[1] - 0.5) * fov_h # відносно курсу 

Як забезпечується дотримання COLREG?

Вбудований COLREGPlanner аналізує ситуацію за правилами МППСС-72. Система визначає обгін, зустрічний курс або перетин та видає команду маневру. Враховуються tcpa та cpa для оцінки терміновості. В реальному проєкті для порома система знизила кількість хибних тривог на 70% порівняно з ручним плануванням.

class COLREGPlanner: """ Правила МППСС-72 (COLREG): визначаємо тип ситуації і обов'язковий маневр. """ def assess_situation(self, own_vessel: dict, target: dict) -> dict: bearing_to_target = target['bearing_deg'] tcpa = target.get('tcpa', float('inf')) cpa = target.get('cpa', float('inf')) situation = 'safe' action = 'none' # COLREG Rule 13: обгін if -22.5 <= bearing_to_target <= 22.5 and tcpa < 12 * 60: situation = 'overtaking' # Ми обганяємо: поступаємося дорогою action = 'alter_course_starboard' # COLREG Rule 14: курси назустріч elif abs(bearing_to_target) < 5: situation = 'head_on' action = 'alter_course_starboard' # COLREG Rule 15: перетин курсів elif 0 < bearing_to_target < 112.5: situation = 'crossing_give_way' action = 'alter_course_starboard_or_reduce_speed' elif -112.5 < bearing_to_target < 0: situation = 'crossing_stand_on' action = 'maintain_course_and_speed' return { 'situation': situation, 'action': action, 'tcpa_minutes': tcpa / 60, 'cpa_meters': cpa, 'urgency': 'HIGH' if cpa < 500 and tcpa < 5 * 60 else 'MEDIUM' if cpa < 1000 else 'LOW' } 

Що робити при виявленні людини за бортом?

MOBDetector — критична функція. Людина у воді — невеликий об'єкт (30×40 px на 50 м), може бути прихований хвилями. Наш MOBDetector використовує донавчений YOLO для RGB та тепловізор для ночі, фільтруючи хибні спрацьовування по горизонту. В одному з випробувань система засікла MOB на дистанції 200 м при хвилюванні 3 бали, тоді як вахтовий помітив його лише через 40 секунд.

class MOBDetector: def __init__(self): self.detector = YOLO('yolov8m_mob.pt') # донавчений на морських людях self.thermal_model = ThermalPersonDetector() # для ночі def detect(self, frame: np.ndarray, thermal_frame: np.ndarray = None) -> list: # RGB детекція rgb_dets = self.detector(frame, conf=0.35, classes=[0]) # person dets = list(rgb_dets[0].boxes) # Вночі або при поганій видимості — тепловізор if thermal_frame is not None: thermal_dets = self.thermal_model.detect(thermal_frame) dets.extend(thermal_dets) # Фільтр: людина у воді має bbox близько до горизонту horizon_y = frame.shape[0] * 0.4 # приблизно mob_candidates = [] for det in dets: bbox = list(map(int, det.xyxy[0])) if bbox[1] > horizon_y: # нижче горизонту = у воді mob_candidates.append({ 'bbox': bbox, 'confidence': float(det.conf) }) return mob_candidates 

Порівняння: наша система vs традиційний підхід

Параметр Традиційний (радар + AIS) Наш AI-підхід
Виявлення малих об'єктів (MOB, буї) Низьке Високе (CV + LiDAR) в 5 разів краще
Розпізнавання типів суден Немає Є (YOLO)
COLREG-compliance Ручний Автоматичний
Latency >1 с <250 мс (в 4 рази швидше)
Нічна робота Обмежено Тепловізор + LiDAR

Типові помилки при впровадженні морської автономії

  • Використання автомобільних моделей без донавчання на морських даних — вони дають 70% хибних спрацьовувань на хвилях.
  • Нехтування калібруванням сенсорів: зміщення в 1 градус дає помилку 30 м на дистанції 2 км.
  • Відсутність fail-safe режиму при втраті GPS або AIS — судно повинно переходити в безпечний дрейф.
  • Ігнорування вимог класифікаційних товариств (DNV, Lloyd's) на етапі проектування.

Процес роботи

  1. Аналітика — аудит судна, збір вимог, узгодження KPI (наприклад, ймовірність виявлення MOB > 95% при хвилюванні 4 бали).
  2. Проектування — архітектура системи, вибір стеку (PyTorch, ONNX, Triton Inference Server).
  3. Реалізація — навчання моделей, написання pipeline, інтеграція з NMEA 2000 та CAN bus.
  4. Тестування — модульне, інтеграційне, в басейні та на морі.
  5. Деплой — встановлення, налаштування, здача документації та навчання екіпажу.

Що входить в роботу над проектом?

  • Архітектурна документація — детальний опис сенсорної конфігурації, обчислювальних модулів та алгоритмів.
  • Навчені моделі — для детекції суден, буїв, MOB, сегментації горизонту та класифікації вогнів.
  • Pipeline інтеграції — зв'язка з бортовими системами (NMEA 2000, CAN bus, ARPA, AIS).
  • Тестовий стенд — можливість відпрацювання сценаріїв на симуляторі.
  • Навчання екіпажу — 3–5 днів на борту, включаючи практику з інтерфейсом та аварійними сценаріями.
  • Сертифікаційна документація — пакет для класифікаційного товариства.
  • Підтримка — 12 місяців технічної підтримки з гарантією оновлень моделей.

Характеристики системи

Параметр Значення
Дальність виявлення суден (камера) До 3 км (ясна погода)
Дальність LiDAR (Ouster OS1-64) До 120 м
Latency повного циклу perception 150–250 мс
Підтримувані типи об'єктів Суда, буї, плавник, MOB
Інтеграція NMEA 2000, CAN bus, ARPA радар

Терміни виконання

Тип проекту Термін
Система сприйняття (perception only) 3–5 місяців
Perception + COLREG planning 6–10 місяців
Повна автономна система з сертифікацією 18–36 місяців

Зв'яжіться з нами для аудиту вашого судна — ми підберемо оптимальну конфігурацію сенсорів та обчислювачів. Замовте консультацію, щоб оцінити застосовність AI-автономії для вашого судна. Отримайте детальний аналіз та комерційну пропозицію.