Робототехника
LiDAR и Point Clouds
2005 год. DARPA Grand Challenge. Стэнфорд Stanley побеждает: 5 LiDAR на крыше, 131 миля по Мохаве без водителя. Velodyne HDL-64E - 64 лазерных луча, 1.3 млн точек в секунду. Начало эпохи. LiDAR превратил автономное вождение из лабораторного эксперимента в реальность.
- Waymo One: 5 Velodyne Alpha Prime LiDAR + real-time segmentation при 100 км/ч - 20 млн миль с пассажирами в США
- Boston Dynamics Spot: 5 stereo depth cameras + LiDAR для indoor SLAM в промышленных объектах и шахтах
- Apple iPhone 12 Pro: solid-state LiDAR для AR face mesh и room scanning - 40 млн устройств с LiDAR в кармане
- HERE Technologies: мобильное картографирование LiDAR-фургонами - 3D HD maps 110 стран для autonomous driving
Исторический контекст
В 2005 году команда Себастьяна Трана из Стэнфорда выиграла DARPA Grand Challenge - первое в истории автономное прохождение 132 миль пустыни Мохаве. Пять LiDAR на крыше Stanford Stanley были нестандартным решением: большинство команд делали ставку на камеры и радар. Velodyne, основанный Дэвидом Холлом в гараже в 2005 году, разработал HDL-64E специально для DARPA. Эта победа определила архитектуру автономных автомобилей на следующие 15 лет. В 2007 году команда CMU (Boss) выиграла DARPA Urban Challenge - уже в городских условиях с другими машинами.
LiDAR: принцип работы и типы сенсоров
**2005 год. DARPA Grand Challenge. Стэнфорд Stanley побеждает: 5 LiDAR на крыше, 131 миля по Мохаве без водителя.** Velodyne HDL-64E - 64 лазерных луча, 1.3 млн точек в секунду. Начало эпохи автономного вождения. LiDAR (Light Detection And Ranging) - это не одна технология, а семейство сенсоров с разной физикой и архитектурой.
**TOF vs FMCW:** Time of Flight (TOF) измеряет время `t` между отправкой и получением импульса. Расстояние `d = c * t / 2`, где `c` - скорость света. FMCW (Frequency Modulated Continuous Wave) излучает непрерывную волну с модуляцией частоты и вычисляет расстояние из частотного сдвига эхо. FMCW даёт скорость объекта (Doppler) без дополнительных измерений и лучше работает в солнечный день.
| Тип | Пример | Лучи | Точек/сек | Цена | Особенность |
|---|---|---|---|---|---|
| Mechanical (rotating) | Velodyne HDL-64E | 64 | 1.3 млн | $75K+ | 360° FOV, проверен годами |
| Mechanical (rotating) | Ouster OS1-128 | 128 | 2.6 млн | $8K | Компактный, ROS 2 ready |
| Solid-state (MEMS) | Livox Mid-360 | non-uniform | 240K | $600 | Без вращения, долговечный |
| Solid-state (Flash) | Luminar Iris | scan pattern | 300K | $500 (авто) | Дальность 250 м, FMCW |
LiDAR TOF сенсор отправляет импульс. Эхо возвращается через 100 нс (наносекунд). Чему равно расстояние до объекта? (скорость света = 3*10^8 м/с)
Структура облака точек и обработка
**Point cloud - это не 3D модель. Это набор точек в пространстве без связей между ними.** Каждая точка - кортеж `(x, y, z, intensity, ring, timestamp)`. Нет нормалей, нет треугольников, нет топологии. PointNet не знает что точки соседние. Алгоритмы должны строить связи явно - через k-NN, voxel grid или KD-дерево.
**Coordinate frames:** в роботике критически важно различать фреймы. `sensor_frame` - начало в центре LiDAR. `base_link` - начало в центре робота. `map` - глобальный фрейм. Трансформации между фреймами хранит TF2 дерево в ROS 2. Путаница фреймов - частый источник багов в навигации.
**Open3D vs PCL:** Open3D (Python/C++) - современный выбор для прототипирования и ML интеграции. PCL (C++) - промышленный стандарт с богатой библиотекой алгоритмов, лучшая производительность для embedded. В ROS 2 оба доступны: `pcl_ros` для PCL, `open3d_ros_helper` для Open3D.
Voxel downsampling с voxel_size=0.1 м применяется к point cloud из 1 млн точек. Что происходит с точностью геометрии мелких объектов?
Регистрация: ICP, NDT и LiDAR SLAM
**Waymo строит HD карты с точностью до 5 см - основа их флота в 5 городах.** Регистрация (registration) - задача выравнивания двух point clouds. ICP (Iterative Closest Point): находим соответствия между точками -> вычисляем трансформацию -> применяем -> повторяем до сходимости. LiDAR SLAM расширяет это до онлайн построения карты с одновременной локализацией.
**LOAM и LIO-SAM:** LOAM (Lidar Odometry and Mapping) выделяет edge и planar features из point cloud вместо работы с полным облаком - в 10x быстрее полного ICP. LIO-SAM добавляет IMU тесно связанным способом и GPS для глобальной коррекции. Это стандартные алгоритмы в Waymo и Apollo для построения HD карт.
ICP сошёлся к трансформации с fitness=0.3 (30% соответствий). Стоит ли доверять результату?
Сегментация: от RANSAC до PointPillars
**Tesla использует только камеры. Waymo - 5 LiDAR + 29 камер + 6 радаров. Разница: Tesla реконструирует 3D из 2D пикселей. Waymo получает 3D напрямую. Два философских лагеря.** Сегментация point cloud - разделение на семантические классы: земля, дорога, пешеход, автомобиль. Каждый подход даёт разный trade-off скорость/точность/robustness.
**SemanticKITTI и IoU:** стандартный benchmark - SemanticKITTI (KITTI sequences с per-point метками). Метрика - mean IoU по 19 классам. RandLA-Net (2020): random sampling + Local Feature Aggregation, 77.4 mIoU. PointPillars (детекция объектов): 62.7 AP на KITTI Car. Для оценки качества своей модели - использовать IoU per class, не accuracy (классовый дисбаланс: земля >> пешеходы).
**LiDAR слепнет в снег:** капли дождя и снежинки отражают лазер как объекты - ложные точки везде. Камеры теряют чёткость. Радар работает в любую погоду, но низкое разрешение. Надёжная система - sensor fusion всех трёх. Именно поэтому Waymo не отказывается от LiDAR несмотря на цену.
Deep learning для point clouds требует фиксированного числа точек на входе
PointNet++ и современные архитектуры (RandLA-Net, PointPillars) нативно работают с переменным числом точек через симметричные операции агрегации
PointNet использует per-point MLP + global max pooling - симметричная функция инвариантна к порядку и числу точек. Max pooling по N точкам даёт вектор фиксированного размера независимо от N. PointPillars делит пространство на pillars и aggregates точки внутри каждого - число точек на pillar разное, но результат всегда одного размера. Ограничение по числу точек есть только если явно добавить padding/truncation для batch processing.
RANSAC plane fitting для ground removal использует distance_threshold=0.2 м. На ровной дороге это даёт хорошие результаты. Что произойдёт на наклонном склоне (угол 15°)?
LiDAR и Point Clouds: главное
- LiDAR TOF: d = c * t / 2. Mechanical (360° FOV, дорого) vs Solid-state (нет вращения, дешевле). FMCW даёт скорость объекта
- Point cloud = (x,y,z,intensity,ring,timestamp) без топологии. Voxel downsampling + statistical outlier removal - стандартный препроцессинг
- ICP регистрация: соответствия -> трансформация -> итерация. Зависит от инициализации. NDT быстрее для крупных облаков. LOAM/LIO-SAM для SLAM
- Ground removal (RANSAC plane) + Euclidean clustering -> объекты. PointPillars: BEV pseudo-image + 2D CNN, 50+ FPS
LiDAR в контексте курса
LiDAR - центральный сенсор восприятия, соединяющий фильтрацию сенсоров, детекцию объектов и планирование движения. Point clouds питают SLAM, который питает occupancy grid, который питает path planning.
- LiDAR одометрия — основа для планирования движения в rob-06: 3D occupancy grid из point cloud
- Sensor fusion — LiDAR + камера + радар в rob-03: расширенный фильтр Калмана для объединения источников
- 3D object detection — PointPillars выходы - 3D bbox для трекинга объектов в rob-07
Вопросы для размышления
- Tesla и Waymo представляют два философских лагеря: vision-only vs LiDAR+fusion. LiDAR слепнет в снег, камеры теряют детали в дожде, радар работает всегда но с низким разрешением. Какая комбинация сенсоров и в каком сценарии (городской трафик, загородное шоссе, зимние условия) даёт наилучший баланс надёжности и стоимости?