Розробка 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%.
Отримайте комерційну пропозицію з детальним планом робіт — зв'яжіться з нами для оцінки вашого проєкту. Ми запропонуємо рішення під ключ з урахуванням ваших строків та бюджету. Замовте консультацію, щоб обговорити деталі.







