AI-система восприятия и планирования для автономного вождения
Perception + Planning — это связка, которая превращает поток данных с сенсоров в команды управления автомобилем. Perception отвечает на вопрос «что вокруг меня», Planning — «куда и как ехать». Разрыв между лабораторным демо и дорожными испытаниями здесь катастрофический: система с mAP 0.92 на nuScenes может провалиться на первом же незнакомом перекрёстке в дождь.
Стек сенсоров и 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
}
Модели детекции 3D объектов
| Модель | 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 | Да | Да |
Выбор модели зависит от бюджета latency: для бортового NVIDIA Drive Orin (128 TOPS) реально держать BEVFusion при 100ms с TensorRT-оптимизацией.
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)
Тестирование: симуляция vs реальные данные
Разрыв между симуляцией (CARLA, SUMO) и реальностью — одна из главных проблем. Модель, обученная только на CARLA, теряет 15–25% mAP на реальных данных из-за domain gap (освещение, текстуры, поведение агентов).
Стратегия уменьшения domain gap:
- Domain randomization: случайные текстуры, освещение, погода в симуляторе
- Real2Sim: перенос реальных сцен в CARLA через NeRF или Gaussian Splatting
- Curriculum learning: сначала простые сцены, потом corner cases
Ключевые компоненты системы
- Локализация: HDMap + LiDAR SLAM (LOAM, LIO-SAM) с точностью 10–20 см
- Prediction: прогноз траекторий агентов (HiVT, MTR) на 5 сек
- Карта: HD Map (Lanelet2) с разметкой, знаками, правилами
- Safety monitor: независимый watchdog, проверяет физическую реализуемость команд
| Уровень автономности | Scope | Срок |
|---|---|---|
| L2 ассистент (ADAS) | Трасса, хорошие условия | 4–8 мес |
| L3 pilot | Структурированная среда | 10–18 мес |
| L4 robo-taxi (геофенс) | Конкретный район | 24+ мес |







