Лидар¶
RPLidar C1¶
Рисунок 1 — RPLidar C1¶
RPLidar C1 — это 2D-лидар для кругового сканирования окружающего пространства (см. рисунок 1). Он последовательно измеряет расстояния в разных направлениях и формирует набор точек вокруг датчика в диапазоне 360°.
Принцип работы¶
Лидар испускает короткий инфракрасный лазерный сигнал в одном направлении. Луч отражается от ближайшего объекта и возвращается обратно в датчик. По отражённому сигналу электроника лидара вычисляет расстояние до объекта.
Одного измерения недостаточно, чтобы получить картину вокруг дрона. Поэтому измерительный модуль, похожий на небольшой лазерный дальномер, постоянно вращается и выполняет множество таких измерений под разными углами. В результате один полный оборот превращается в набор точек: для каждой точки известны угол и расстояние.
Пример одного измерения:
угол: 45°
расстояние: 1,8 м.
Если рядом нет объекта или отражённый сигнал слишком слабый, измерение может быть некорректным. Такие значения обычно игнорируются алгоритмами навигации и построения карты.
Рисунок 2 — Определение системы координат данных сканирования RPLidar C1¶
Механическая система¶
Сканирующий модуль RPLidar C1 вращается по часовой стрелке. Обычная частота сканирования — 10 Гц, то есть лидар делает около 10 полных круговых сканов в секунду.
Система координат лидара¶
Данные лидара удобно представить в полярной системе координат (см. рисунок 2):
начало координат находится в центре лидара;
направление задаётся углом;
дальность задаётся расстоянием от центра лидара до препятствия.
Ось X — это начальное направление сканирования. От него лидар отсчитывает угол до каждой измеренной точки. Угол увеличивается по часовой стрелке по мере вращения сканирующего модуля.
Данные в ROS 2¶
В ROS 2 данные лидара публикуются в виде сообщения sensor_msgs/msg/LaserScan, обычно в топик /scan. Это сообщение содержит параметры одного кругового скана и массив расстояний.
Основные поля LaserScan:
Поле |
Описание |
|---|---|
|
Имя системы координат лидара, например |
|
Начало и конец углового диапазона сканирования. |
|
Угловой шаг между соседними измерениями. |
|
Минимальная и максимальная допустимая дальность. |
|
Массив расстояний в метрах. |
Каждый элемент массива ranges соответствует одному направлению луча:
angle = angle_min + i * angle_increment
distance = ranges[i]
При частоте 10 Гц RPLidar C1 обновляет такой массив примерно 10 раз в секунду. Эти данные можно использовать для обнаружения препятствий, навигации и построения карты.
Установка RPLidar C1¶
Установите RPLidar C1 на монтажную деку из поликарбоната при помощи винтов M2.5x6 (см. рисунок 3).
Рисунок 3 — Установка RPLidar C1¶
Установите алюминиевые стойки 40 мм на монтажную деку из поликарбоната при помощи винтов M3х6 (см. рисунок 4).
Рисунок 4 — Установка алюминиевых стоек¶
Установите подготовленный RPLidar на алюминиевые стойки с помощью винтов M3х6 (см. рисунок 5).
Рисунок 5 — Установка RPLidar C1 на алюминиевые стойки¶
Подключите RPLidar к Raspberry Pi 5 через порт USB с помощью комплектного провода с переходником.
Зафиксируйте подключенный провод с помощью стяжек таким образом, чтобы он не попадал в область вращения пропеллеров.
Использование¶
Запуск через clover2-settings¶
Чтобы включить лидар в Клевере, откройте clover2-settings, перейдите в раздел additional_sensors и включите настройку 2d_lidar.
Затем необходимо перезапустить сервис clover2:
sudo systemctl restart clover2
После успешного запуска лидар начнёт вращаться, а драйвер будет публиковать данные в топик /scan с типом сообщения sensor_msgs/msg/LaserScan.
Во втором терминале проверьте, что топик появился:
ros2 topic list | grep scan
ros2 topic info /scan
Ожидаемый тип топика:
Type: sensor_msgs/msg/LaserScan
Проверьте частоту публикации:
ros2 topic hz /scan
Для RPLidar C1 в режиме Standard нормальная частота сканирования составляет 10 Гц.
Для просмотра одного сообщения:
ros2 topic echo --once /scan
Если нужно проверить только массив расстояний:
ros2 topic echo --once /scan --field ranges
Если /scan публикуется с ненулевой частотой, а поле ranges содержит массив расстояний в метрах, лидар работает корректно.
Ручной запуск лидара¶
В первом терминале запустите драйвер RPLidar C1:
ros2 run rplidar_ros rplidar_composition --ros-args \
-p serial_port:=/dev/rplidar \
-p serial_baudrate:=460800 \
-p frame_id:=laser \
-p inverted:=false \
-p angle_compensate:=true \
-p scan_mode:=Standard \
-p topic_name:=scan
При успешном запуске в терминале появится лог:
RPLidar running on ROS2 package rplidar_ros. RPLIDAR SDK Version:2.1.0
RPLidar health status : OK.
current scan mode: Standard, sample rate: 5 Khz, max_distance: 16.0 m, scan frequency:10.0 Hz