Гид по технологиям

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

7 min read Робототехника Обновлено 02 Apr 2026
2D‑карта комнаты с LiDAR и ROS
2D‑карта комнаты с LiDAR и ROS

Lидарный сканер, установленный на ноутбуке

Основные требования для сканирования комнаты

Вам понадобятся:

  • Ноутбук или ПК с установленным 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.

Архитектура Robot Operating System и концепция узлов и топиков

Подключение и получение данных от LiDAR — общая схема

  1. Подключите LiDAR к USB порту компьютера.
  2. Система создаст узел устройства, например /dev/ttyUSB0.
  3. Запустите драйвер rplidar_ros для публикации данных в топик /scan.
  4. Отобразите данные в терминале (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

  1. Установите пакет для RPLIDAR:
sudo apt-get install ros-noetic-rplidar-ros
  1. Подключите LiDAR через USB и запустите драйвер:
roslaunch rplidar_ros rplidar.launch
  1. В другом терминале посмотрите, что публикуется в топике /scan:
rostopic echo /scan

Вы увидите последовательность сообщений LaserScan с угловыми и дистанционными данными. Это «сырые» измерения.

  1. Для визуализации откройте Rviz в отдельном терминале:
rosrun rviz rviz

В Rviz:

  • Установите Fixed Frame в значение, соответствующее вашему TF (часто это “laser” или “base_link”).
  • Нажмите Add → LaserScan и в поле Topic укажите /scan.

После этого в визуализаторе появится реальный 2D-скан в режиме реального времени.

Сырые данные LiDAR, визуализированные через rostopic echo в терминале

Результат визуализации реального времени в Rviz

Разрешение проблем с правами на последовательный порт

Если драйвер не видит устройство или нет прав на /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).

Редактирование launch-файла для hector_slam

Изменения в launch-файле для корректной работы SLAM

Результат сканирования комнаты в Rviz после запуска SLAM

Параметры, на которые стоит обратить внимание

  • 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)

  1. Подготовьте систему: обновления, ROS и пакеты rplidar_ros, hector_slam, map_server.
  2. Подключите датчик и проверьте /dev/ttyUSB* и права доступа.
  3. Запустите драйвер rplidar (roslaunch rplidar_ros rplidar.launch).
  4. Откройте Rviz, подпишите тему /scan и убедитесь в корректности TF.
  5. Запустите SLAM (roslaunch hector_slam tutorial.launch), медленно обойдите область.
  6. Сохраните карту (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: синхронизируют сообщения, трансформируют в единую систему координат и объединяют облака точек.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Popcorn Time — безопасность и советы по использованию
Безопасность

Popcorn Time — безопасность и советы по использованию

Настройка Wake on LAN в Windows 10/11
Windows

Настройка Wake on LAN в Windows 10/11

Устранение потерь пакетов в Discord
Сеть

Устранение потерь пакетов в Discord

Списки Amazon: как создать, управлять и делиться
Покупки

Списки Amazon: как создать, управлять и делиться

Установка WordPress локально на Windows
WordPress

Установка WordPress локально на Windows

Как подключить Bluetooth‑наушники к Fire TV Stick
Руководство

Как подключить Bluetooth‑наушники к Fire TV Stick