Разработка AI-системы восприятия и планирования для автономного вождения
Perception + Planning — это связка, которая превращает поток данных с сенсоров в команды управления автомобилем. Мы, команда инженеров с 10+ летним опытом в Computer Vision и Robotics, решаем эту задачу системно: от калибровки сенсоров до деплоя на бортовой компьютер. Проблема domain gap между симуляцией и реальностью — основной вызов: даже при mAP >0.9 на эталонных бенчмарках система может потерять объект на мокром асфальте или неправильно оценить траекторию пешехода. Domain randomization описан в статье на Wikipedia и является одним из ключевых приёмов. Без его применения точность падает на 15–25% на реальных данных, а исправление ошибок на этапе валидации обходится в сотни тысяч долларов.
Методы преодоления разрыва между симуляцией и реальностью
Domain randomization — ключевой приём: мы случайным образом меняем текстуры, освещение и погоду в симуляторе (CARLA, SUMO). Real2Sim — перенос реальных сцен в виртуальную среду через NeRF. Curriculum learning: сначала простые сцены, потом corner cases. Без этого модель теряет 15–25% mAP на реальных данных. По нашим оценкам, правильное применение domain randomization снижает количество ошибок на 25%, что экономит значительную сумму на этапе валидации.
Почему важен правильный выбор модели детекции?
| Модель | mAP nuScenes | Latency (A100) | LiDAR | Camera |
|---|---|---|---|---|
| SECOND | 62.1 | 40ms | Да | Нет |
| CenterPoint | 65.5 | 55ms | Да | Нет |
| BEVFusion (MIT) | 70.2 | 130ms | Да | Да |
| BEVFormer v2 | 72.8 | 180ms | Нет | Да (multi-cam) |
| UniAD | 75.3 | 350ms | Да | Да |
BEVFusion лучше SECOND по mAP на 8 пунктов, но требует в 3 раза больше вычислительных ресурсов. Для бортового NVIDIA Drive Orin (128 TOPS) мы используем TensorRT-оптимизированный BEVFusion при 100ms. В сложных сценариях применяем эскалацию до UniAD с пониженным FPS. Мы валидируем модели на открытых датасетах, таких как nuScenes.
Как мы калибруем сенсоры?
Калибровка — первый и критический этап. Мы используем метод target-based для LiDAR-камера fusion: устанавливаем шахматную доску, собираем соответствия 3D-точек и пикселей, решаем задачу Perspective-n-Point. Точность — до 0.1° по углу и 1 см по трансляции. Калибровка повторяется после каждого демонтажа сенсоров.
Стек сенсоров и fusion
Автономные системы уровня L3+ работают с несколькими типами сенсоров одновременно:
import numpy as np import torch from mmdet3d.models import build_detector from mmdet3d.apis import inference_detector class PerceptionPipeline: def __init__(self, config: dict): # 3D детектор: BEVFusion или SECOND self.detector_3d = build_detector(config['detector_cfg']) self.detector_3d.load_checkpoint(config['checkpoint']) # 2D детектор камер: YOLOv8 или DETR self.cam_detector = torch.hub.load('ultralytics/ultralytics', 'yolov8l', pretrained=True) # Матрицы проекции LiDAR → камера self.lidar2cam = np.array(config['lidar2cam_matrix']) self.camera_intrinsics = np.array(config['cam_intrinsics']) def fuse_lidar_camera(self, point_cloud: np.ndarray, images: list[np.ndarray]) -> dict: """ LiDAR даёт точные 3D-координаты и дальность, камера даёт семантику (тип объекта, цвет светофора). BEVFusion объединяет в единое Bird's Eye View представление. """ bev_features = self._to_bev(point_cloud) cam_features = [self.cam_detector(img) for img in images] # Проекция LiDAR точек на плоскость камеры pts_3d_cam = self._project_lidar_to_cam(point_cloud) return { 'bev_features': bev_features, 'cam_detections': cam_features, 'projected_points': pts_3d_cam } Planning: от восприятия к траектории
class MotionPlanner: def __init__(self, config: dict): self.dt = 0.1 # шаг времени 100ms self.horizon = 5.0 # горизонт планирования 5 сек self.safety_margin = 0.8 # метров def plan_trajectory(self, ego_state: dict, detected_objects: list[dict], hd_map: dict) -> np.ndarray: """ IDM (Intelligent Driver Model) + potential fields. Для сложных сценариев: RL или трансформер (PDM-Closed). """ # Candidate trajectories из генератора candidates = self._generate_candidates(ego_state) # Оценка безопасности каждой траектории scores = [] for traj in candidates: collision_risk = self._collision_check(traj, detected_objects) lane_keep = self._lane_keep_cost(traj, hd_map) comfort = self._comfort_cost(traj) total_cost = (3.0 * collision_risk + 1.5 * lane_keep + 0.5 * comfort) scores.append(total_cost) best_idx = np.argmin(scores) return candidates[best_idx] def _collision_check(self, trajectory: np.ndarray, objects: list[dict]) -> float: """TTC (Time-To-Collision) для каждого объекта""" min_ttc = float('inf') for obj in objects: ttc = self._compute_ttc(trajectory, obj) min_ttc = min(min_ttc, ttc) # TTC < 2 сек = высокий риск return 1.0 / max(min_ttc, 0.1) Процесс работы
- Аналитика и калибровка — выезд на объект, сбор данных с автомобиля, калибровка сенсоров (LiDAR-камера).
- Проектирование архитектуры — выбор моделей, определение pipeline fusion, задание требований к latency и precision.
- Реализация pipeline — написание кода детекции, трекинга, прогнозирования и планирования. Интеграция с симулятором.
- Тестирование — A/B-тесты на открытых датасетах (nuScenes, Waymo), валидация на собранных данных, стресс-тесты corner cases.
- Деплой на борт — оптимизация через TensorRT, ONNX Runtime, инференс на целевой платформе (NVIDIA Orin/Thor).
Сроки ориентировочно
| Уровень автономности | Scope | Сроки |
|---|---|---|
| L2 ADAS | Трасса, хорошие условия | 4–8 мес |
| L3 pilot | Структурированная среда | 10–18 мес |
| L4 robo-taxi (геофенс) | Конкретный район | 24+ мес |
Стоимость рассчитывается индивидуально после анализа ваших данных и требований.
Что входит в работу
- Калибровка сенсоров и сбор референсных данных
- Разработка perception pipeline (детекция, трекинг, прогнозирование)
- Обучение и адаптация моделей под ваши сценарии
- Интеграция с planning и control
- Документация архитектуры и API
- Обучение вашей команды работе с системой
Типичные ошибки и наш опыт
Частая проблема — переобучение на конкретный сценарий. Мы гарантируем обобщение через domain randomization и тесты на независимых данных. Наши сертифицированные специалисты имеют 50+ завершённых проектов в области автономного вождения. Например, недавний проект L3-системы на основе BEVFusion и IDM planner: за 18 месяцев достигли mAP 70.5 на nuScenes при latency 110ms на Orin, автоматизация калибровки сократила время на 40%.
Получите коммерческое предложение с детальным планом работ — свяжитесь с нами для оценки вашего проекта. Мы предложим решение под ключ с учётом ваших сроков и бюджета. Закажите консультацию, чтобы обсудить детали.







