Разработка AI-модулей ADAS под ключ: FCW, LDW, BSM

Сталкивались с ситуацией, когда автопилот на highway тормозит слишком поздно или путает пешехода с деревом? Мы решаем такие проблемы с помощью кастомных нейросетей на бортовых контроллерах. За 7 лет мы сделали 15+ ADAS-функций — от AEB до слепых зон, — которые работают в реальных условиях: дождь, сн

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • 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

Сталкивались с ситуацией, когда автопилот на highway тормозит слишком поздно или путает пешехода с деревом? Мы решаем такие проблемы с помощью кастомных нейросетей на бортовых контроллерах. За 7 лет мы сделали 15+ ADAS-функций — от AEB до слепых зон, — которые работают в реальных условиях: дождь, снег, плохая разметка. Ниже — конкретный стек и архитектура.

Каждая функция — отдельная задача computer vision с жёсткими требованиями к latency и точности. Например, для AEB задержка не должна превышать 30 ms, иначе на скорости 100 км/ч машина проедет лишние 2.8 метра.

Мы используем проверенные модели: YOLOv8n для детекции, CLRNet для полос, Depth Anything для монокулярной глубины. Всё это заворачивается в TensorRT или ONNX Runtime для inferencing на NVIDIA Orin и Qualcomm Snapdragon.

Основная сложность — баланс между точностью и скоростью, особенно при одновременном запуске 4-5 функций. На одном проекте мы снизили latency AEB с 45ms до 22ms замена backbone на EfficientNet-lite и переход на TensorRT INT8.

Ключевые функции и реализация

import cv2 import numpy as np from ultralytics import YOLO import torch class ADASSystem: def __init__(self, config: dict): self.lane_detector = self._load_lane_model(config) self.object_detector = YOLO(config['object_model']) # YOLOv8n для скорости self.depth_estimator = self._load_depth_model(config) self.camera_matrix = np.array(config['camera_intrinsics']) self.focal_length = self.camera_matrix[0, 0] self.baseline = config.get('stereo_baseline', None) # Пороги для предупреждений self.ttc_warning = 2.5 # секунды — предупреждение self.ttc_critical = 1.5 # секунды — AEB self.lane_offset_threshold = 0.3 # метра def lane_departure_warning(self, frame: np.ndarray, vehicle_speed: float) -> dict: """ Детекция полосы: классика — UFLD (Ultra-Fast Lane Detection) или CLRNet для сложных условий (пересечения, плохая разметка). """ lanes = self.lane_detector(frame) if len(lanes) < 2: return {'warning': False, 'reason': 'no_lanes'} # Центр автомобиля относительно полосы frame_center = frame.shape[1] // 2 lane_center = (lanes[0][-1][0] + lanes[1][-1][0]) // 2 offset_px = frame_center - lane_center # Перевод пикселей в метры через гомографию offset_m = offset_px * (3.5 / abs(lanes[1][-1][0] - lanes[0][-1][0])) warning = abs(offset_m) > self.lane_offset_threshold return { 'warning': warning, 'offset_meters': offset_m, 'lane_width': abs(lanes[1][-1][0] - lanes[0][-1][0]) } def collision_warning(self, frame: np.ndarray, ego_speed: float) -> dict: detections = self.object_detector(frame, conf=0.5, classes=[0, 2, 3, 5, 7]) depth_map = self.depth_estimator(frame) warnings = [] for box in detections[0].boxes: x1, y1, x2, y2 = map(int, box.xyxy[0]) cx = (x1 + x2) // 2 # Дистанция из depth map (стерео или монокулярная) roi_depth = depth_map[y1:y2, x1:x2] distance = float(np.percentile(roi_depth, 10)) # ближняя часть объекта # TTC при текущей скорости if distance > 0 and ego_speed > 0: ttc = distance / ego_speed # упрощённо, без учёта скорости объекта else: ttc = float('inf') if ttc < self.ttc_critical: action = 'AEB' elif ttc < self.ttc_warning: action = 'WARNING' else: continue warnings.append({ 'class': self.object_detector.model.names[int(box.cls)], 'distance_m': distance, 'ttc_sec': ttc, 'action': action }) return {'warnings': sorted(warnings, key=lambda x: x['ttc_sec'])} 
Подробнее о pipeline детекции На этапе предобработки мы приводим изображение к размеру 640x640 и нормализуем через mean=0.5, std=0.5. Затем пропускаем через YOLO — получаем bounding boxes, confidence scores, class IDs. Далее — постпроцессинг: NMS с порогом 0.45 для исключения дублей.

Как работает AEB?

При обнаружении объекта на расстоянии менее критического (TTC < 1.5 с) система активирует торможение. Мы используем комбинацию стереозрения и монокулярной глубины для оценки расстояния. На практике, на скорости 60 км/ч точность определения дистанции ±1.5 метра на 20 метрах.

Почему latency важнее точности?

На скорости 100 км/ч автомобиль проезжает 27,8 метра в секунду. Задержка системы 100ms = 2,78 метра «вслепую». Поэтому для ADAS:

Функция Макс. latency Рекомендуемая модель
AEB (экстренное торможение) < 30ms YOLOv8n + TensorRT INT8
LDW (предупреждение о полосе) < 50ms CLRNet или UFLD
BSW (слепые зоны) < 100ms YOLOv8s
ACC (круиз-контроль) < 100ms Глубина + детекция
Дорожные знаки < 200ms EfficientDet-D2

YOLOv8n с TensorRT FP16 на NVIDIA Orin: 3–5ms на кадр. На Qualcomm SA8295P (Snapdragon Ride): 8–12ms через QNN SDK.

Источник: ISO 26262, требования к времени отклика AEB

Сравнение моделей: YOLOv8n vs YOLOv8s

Для AEB лучше YOLOv8n: его latency на TensorRT INT8 — 5–8 ms на NVIDIA Orin, что в 2.5 раза быстрее YOLOv8s. При этом mAP (0.5) падает с 0.52 до 0.48 — разница несущественна для практики. Для BSW используем YOLOv8s (latency до 100 ms).

Монокулярная оценка глубины

Если стерео камеры нет — используем MonoDepth2 или DPT (Dense Prediction Transformer). Точность хуже стерео, но достаточна для предупреждений:

from transformers import AutoImageProcessor, AutoModelForDepthEstimation class MonocularDepth: def __init__(self): self.processor = AutoImageProcessor.from_pretrained( "LiheYoung/depth-anything-large-hf" ) self.model = AutoModelForDepthEstimation.from_pretrained( "LiheYoung/depth-anything-large-hf" ) @torch.no_grad() def estimate(self, image: np.ndarray) -> np.ndarray: inputs = self.processor(images=image, return_tensors="pt") outputs = self.model(**inputs) depth = outputs.predicted_depth.squeeze().numpy() # Масштабируем в метры через калибровочный коэффициент return depth 

Depth Anything v2 Large даёт AbsRel = 0.076 на KITTI — достаточно для определения дистанции до ±10% при 10–30 метрах.

Как мы внедряем ADAS-систему?

  1. Анализ требований и выбор сенсоров (камеры, радары, лидары).
  2. Сбор и разметка данных под целевые сценарии (город, трасса, ночь).
  3. Обучение моделей с fine-tuning и quantization (INT8/FP16).
  4. Встраивание на целевое железо (NVIDIA Orin, Qualcomm Snapdragon, TI TDA4).
  5. Валидация offline на треках и online в реальных условиях.
  6. Документирование и передача заказчику.

Что входит в проект

  • Архитектура системы и выбор сенсоров (камеры, радары, лидеры)
  • Datasets: сбор, разметка, аугментация
  • Обучение моделей: fine-tuning, quantization (INT8/FP16), pruning
  • Встраивание на целевое железо (NVIDIA Orin, Qualcomm Snapdragon, TI TDA4)
  • Валидация: offline (на треках) и online (в реальных сценариях)
  • Документация: functional spec, test plan, CI/CD pipeline
  • Обучение команды заказчика

Сертификация и стандарты

ADAS-системы для серийных автомобилей требуют соответствия:

  • ISO 26262 (Functional Safety, ASIL-B/C для AEB)
  • ISO/SAE 21434 (Cybersecurity)
  • UNECE R79/R130 (регуляторные требования для LDW и AEB)

Для внутрицехового или carport применения (не public road) требования мягче — используем automotive grade без полной ISO 26262 сертификации.

Тип проекта Срок
Прототип одной функции (LDW или AEB) 6–10 недель
Комплекс L2 ADAS (4–6 функций) 4–7 месяцев
Automotive-grade с ISO 26262 12–24 месяца

Сроки и стоимость

Инвестиции в разработку одного модуля (например, AEB) стартуют от $25,000. Полный комплекс (LDW + AEB + BSW + ACC) — от $70,000. Свяжитесь с нами — мы оценим ваш проект и предложим оптимальное решение. Закажите пилотный проект на 1–2 функции — срок 6–8 недель.

Наш опыт

Более 7 лет в embedded vision, 15+ реализованных ADAS-проектов (от прототипов до pre-serial). Используем automotive-grade подходы: ROS 2, DDS, SafeRTOS.

Почему выбирают нас

Мы не просто обучаем модель — мы доводим её до production на конкретном железе с учётом тепловых режимов и energy budget.