Как создать 2D-карту комнаты с помощью LiDAR и ROS

Основные требования для сканирования комнаты
Вам понадобятся:
- Ноутбук или ПК с установленным Ubuntu Server (рекомендуется LTS-версия)
- Установленный ROS (в примерах — ROS Noetic)
- LiDAR (в примерах — RPLIDAR A1) и кабель USB
- Базовые навыки командной строки Linux
Важно: ROS Noetic совместим в основном с Ubuntu 20.04 LTS. Если вы используете другую версию Ubuntu, выбирайте релиз ROS, совместимый с вашей системой.
Что такое LiDAR — кратко и по делу
LiDAR (Light Detection and Ranging) — активный датчик дистанции, который посылает короткие оптические импульсы и измеряет время или фазу возврата отражённого сигнала, чтобы получить расстояние до объектов. Результат — набор дистанций по углам (в 2D) или точечное облако (в 3D). LiDAR полезен для построения карт, избегания препятствий и локализации.
Ключевые понятия:
- Импульс / частота сканирования — сколько раз в секунду датчик выдаёт полный обзор.
- Угловое разрешение — как часто измерение делается по углу (чем меньше — тем точнее профиль стены).
- Точность и дальность — зависят от модели LiDAR и условий отражения.

Почему ROS для такого проекта
ROS (Robot Operating System) — платформа с набором инструментов, пакетов и визуализаторов (Rviz, Gazebo и т. д.), которая упрощает работу с потоками данных от сенсоров. Основные преимущества:
- Архитектура на узлах (nodes) и каналах (topics) упрощает разделение логики.
- Большое сообщество: готовые пакеты для LiDAR (rplidar_ros), SLAM (hector_slam, gmapping), визуализации.
- Удобные инструменты для разработчика: roslaunch, rostopic, rviz.

Подключение и получение данных от LiDAR — общая схема
- Подключите LiDAR к USB порту компьютера.
- Система создаст узел устройства, например /dev/ttyUSB0.
- Запустите драйвер rplidar_ros для публикации данных в топик /scan.
- Отобразите данные в терминале (rostopic echo) или в Rviz.
Практические шаги и команды для проверки порта и устройства:
# посмотреть последние записи ядра при подключении устройства
dmesg | tail -n 50
# список USB-устройств
lsusb
# проверить доступные tty-устройства
ls -l /dev/ttyUSB*Если устройство не появилось, попробуйте другой порт/кабель и снова проверьте dmesg.
Шаг 1. Установка ROS
Обновите индекс пакетов и установите полный десктоп-пакет ROS (пример для Noetic):
sudo apt update
sudo apt install ros-noetic-desktop-fullПроверьте установку, запустив roscore в отдельном терминале:
roscoreЕсли roscore стартовал без ошибок, базовая инфраструктура ROS готова.
Шаг 2. Получаем первый скан LiDAR
- Установите пакет для RPLIDAR:
sudo apt-get install ros-noetic-rplidar-ros- Подключите LiDAR через USB и запустите драйвер:
roslaunch rplidar_ros rplidar.launch- В другом терминале посмотрите, что публикуется в топике /scan:
rostopic echo /scanВы увидите последовательность сообщений LaserScan с угловыми и дистанционными данными. Это «сырые» измерения.
- Для визуализации откройте Rviz в отдельном терминале:
rosrun rviz rvizВ Rviz:
- Установите Fixed Frame в значение, соответствующее вашему TF (часто это “laser” или “base_link”).
- Нажмите Add → LaserScan и в поле Topic укажите /scan.
После этого в визуализаторе появится реальный 2D-скан в режиме реального времени.


Разрешение проблем с правами на последовательный порт
Если драйвер не видит устройство или нет прав на /dev/ttyUSB0, возможны два пути:
- Временный (менее безопасный):
sudo chmod 666 /dev/ttyUSB0- Базовый и рекомендуемый: добавьте пользователя в группу dialout и/или создайте udev-правило:
sudo usermod -a -G dialout $USER
# затем перелогиньтесь, чтобы изменения вступили в силуПример простого udev-правила (файл /etc/udev/rules.d/99-rplidar.rules):
SUBSYSTEM=="tty", ATTRS{idVendor}=="F000", ATTRS{idProduct}=="EEEE", MODE:="0666", GROUP:="dialout"Замените idVendor/idProduct на значения вашего устройства (узнать через lsusb).
Important: Не давайте права 777 устройствам в долгосрочной эксплуатации; используйте udev-правила и группы для безопасного доступа.
Шаг 3. Запуск картографирования (SLAM)
Для создания 2D-карты удобно использовать hector_slam, который хорошо работает с 2D-лидарами и не требует одометра.
Установка:
sudo apt-get install ros-noetic-hector-slamОткройте launch-файл для настройки параметров (в пакете hector_slam обычно есть пакет hector_slam_launch):
roscd hector_slam_launch
nano tutorial.launchПроверьте параметры, отвечающие за:
- Топик сканов (scan topic) — должен совпадать с /scan
- frame_id сканера и base_frame
- Разрешение карты (map_resolution)
- Публикация траектории и включение tf
Если нужно, установите права для редактирования:
sudo chmod 664 tutorial.launchЗапустите SLAM:
roslaunch hector_slam tutorial.launchВо время работы медленно перемещайте LiDAR по комнате (или несите ноутбук с подключённым LiDAR): плавное движение улучшает качество сшивки и уменьшает шум в карте. В Rviz можно включить показ траектории (Trajectory) и карту (Map).



Параметры, на которые стоит обратить внимание
- map_resolution — влияет на детализацию и размер карты в памяти;
- update_rate — частота обновления карты;
- map_size — максимальный покрываемый размер (в некоторых реализациях устанавливается вручную);
- max_range / min_range — пороги для отсечения ложных измерений.
Шаг 4. Сохранение и экспорт карты
После завершения сканирования и того, как карта выглядит корректно в Rviz, сохраните карту.
Простой способ через map_server (если установлен):
rosrun map_server map_saver -f scannedMapЭто создаст файлы scannedMap.pgm и scannedMap.yaml. В исходной инструкции использовали команду публикации syscommand — это зависит от конкретного конфига hector_slam и может приводить к созданию GeoTIFF. Альтернативный вариант — использовать imagemagick для конвертации:
sudo apt-get install imagemagick
convert scannedMap.pgm MyPngMap.pngФайл YAML содержит метаданные (размер пикселя, ориентация), которые важны для последующей работы с картой (локализация, планирование маршрутов).
Полезные практики и нюансы
- Двигайтесь медленно и равномерно, держите датчик примерно на одном уровне от пола.
- Избегайте бликов и зеркальных поверхностей: они дают ложные или прерывистые отражения.
- Если карта выглядит «дрожащей», проверьте значения tf между base_link и лазером и синхронизацию времён.
- Для больших пространств объединяйте маршруты и используйте дополнительные сенсоры (IMU, одометр).
Когда LiDAR не подходит — ограничения и контрпримеры
- Прозрачные или зеркальные поверхности (стекло, вода) дают некорректные показания.
- Очень малые объекты ниже углового разрешения LiDAR могут не детектироваться.
- В условиях плотного пыли или сильного дождя/тумана лазерные импульсы могут рассеиваться.
Если вам нужна цветная информация или плотный 3D-меш в интерьере, рассмотрите глубинную камеру (RGB-D) или 3D LiDAR.
Альтернативные подходы
- RGB-D (Kinect, RealSense) — даёт цвет и глубину, удобен для интерьера, но дальность и точность уступают LiDAR.
- Стерео-визия — дешёвая, но чувствительна к текстуре и требует вычислений для дальности.
- 3D LiDAR — дорогие, но дают полноценное 3D-точечное облако для больших пространств.
Мини-методология сканирования (быстрый SOP)
- Подготовьте систему: обновления, ROS и пакеты rplidar_ros, hector_slam, map_server.
- Подключите датчик и проверьте /dev/ttyUSB* и права доступа.
- Запустите драйвер rplidar (roslaunch rplidar_ros rplidar.launch).
- Откройте Rviz, подпишите тему /scan и убедитесь в корректности TF.
- Запустите SLAM (roslaunch hector_slam tutorial.launch), медленно обойдите область.
- Сохраните карту (rosrun map_server map_saver -f mymap) и экспортируйте в PNG при необходимости.
Рольные чек-листы
- Полевая инженерия (Field Technician): проверить кабели, порт USB, плотность батареи (если мобильный), видимые препятствия.
- Разработчик ROS: убедиться в корректности launch-файлов, TF, подписок на топики, логов roscpp/rospy.
- Инженер картографии: оценить map_resolution, удалить артефакты, объединить сегменты карт.
Критерии приёмки
- Карта покрывает всю требуемую область без существенных пропусков.
- Стены и крупные объекты отображаются с консистентной геометрией (нет «дублирующихся» стен).
- Файл карты (PGM + YAML) корректно загружается в map_server и используется для локализации.
1‑строчная глоссарий
- LaserScan: ROS-сообщение с углами и расстояниями;
- TF: трансформации между координатными рамками;
- SLAM: одновременная локализация и картографирование.
Интеграция и улучшения (что можно добавить дальше)
- Интегрировать одометр и IMU для снижения дрейфа при движении.
- Объединять LiDAR с RGB-D для цветной 3D-реконструкции.
- Использовать более мощные SLAM-алгоритмы (Cartographer, ORB-SLAM2 для камер) при специфических задачах.
Примеры частых ошибок и как их исправить
- Лазер крутится, но в /scan пусто: проверьте порт, права доступа, roslaunch вывод на ошибки.
- В Rviz ничего не видно: проверьте Fixed Frame и топик LaserScan.
- Карта «растёт» с ошибками при быстром перемещении: уменьшите скорость движения, проверьте параметры map_resolution и update_rate.
Краткое резюме
Используя доступный LiDAR и ROS, вы можете быстро получить 2D-карту помещения: подключите устройство, запустите rplidar_ros, визуализируйте в Rviz, используйте hector_slam для построения карты и сохраните результат через map_server. Для устойчивых и масштабных решений добавляйте сенсорную синергию (IMU, одометр, RGB‑D) и применяйте udev-правила для безопасного доступа к устройству.
Экспортируйте и документируйте метаданные карты (yaml), чтобы затем использовать её для навигации мобильных роботов или для анализа пространства.
FAQ
Q: Нужен ли мне именно RPLIDAR A1?
A: Нет — A1 приведён как недорогой пример. Подойдёт любой 2D LiDAR с ROS-драйвером.
Q: Как выбрать map_resolution?
A: Чем меньше значение, тем больше деталей, но выше нагрузка по памяти и CPU. Выбирайте компромисс по размеру комнаты и задачам.
Q: Как объединить данные от LiDAR и RGB-D?
A: Делают по времени и по TF: синхронизируют сообщения, трансформируют в единую систему координат и объединяют облака точек.
Похожие материалы
Popcorn Time — безопасность и советы по использованию
Настройка Wake on LAN в Windows 10/11
Устранение потерь пакетов в Discord
Списки Amazon: как создать, управлять и делиться
Установка WordPress локально на Windows