Создание карты

Если нам необходима карта, то мы можем пойти "обычным" и понятным путем. Взять и нарисовать ее. Как мы говорили выше, карта это всего на всего рисунок, где один пиксель это, в зависимости от масштаба, определенный участок местности.

Мы можем взять линейку и нарисовать такой файл. Но у нас уже есть такая "линейка" на роботе - это лидар. Он может измерять расстояние.

Логично что мы захотим построить карту используя именно эту линейку, а не измерять все руками.

Алгоритмы построения карт

В рамках ROS, наиболее широкое распространение получили алгоритмы:

  • GMapping
  • Cartographer
  • Rtabmap

Gmapping создает карту благодаря данным с лидара и одометрии робота. Как правило, используется 2D лидар, способный сканировать окружающее пространство на 360 градусов вокруг. Далее, происходит сопоставление готовой карты и данных с лидара, в результате чего оценивается и корректируется местоположение робота.

Google Cartographer схож с GMapping в том, что может строить карту по 2D лидару и данных с одометрии. Однако, в отличие от Gmapping, он обладает бОльшим функционалом. Например, Cartographer умеет работать с 3D картами и RGB-D и стерео-камерами, что необходимо, например, для летающих роботов.

Cartographer – более гибкий в настройке, но более требовательный к ресурсам и более сложный в изучении.

Rtabmap еще более сложный алгоритм, основанный на поиске и сопоставлении визуальных данных.

Rtabmap обрабатывает каждое новое входящее 2D изображение, выделяя в нем основные особенности, которые могут быть использованы для сравнения данного изображения с прочими. Каждому такому изображению сопоставляются данные о местоположении и ориентации робота в пространстве в момент получения изображения. Таким образом составляется база данных визуальных образов и координат, в которых они были получены.

Gmapping – это базовый алгоритм работы с картами, не требующий высокой вычислительной мощности. Как следствие, его можно использовать для небольших роботов оборудованных 2D лидара.

В то же время, Cartographer и Rtabmap являются уже более ресурсоемкими пакетами и требуют соответствующей вычислительной мощности, а также наличие определенных сенсоров (камера для Rtabmap).

Для робота TurtleBro мы будем использовать Gmapping

Построение карты Gmapping

Все необходимое программное обеспечение уже установлено и настроено на роботе. Нам необходимо только запускать соответствующие программы.

Запустим ноду gmapping на роботе:

roslaunch turtlebro_navigation turtlebro_gmapping.launch open_rviz:=0

Проверим как поменялось состояние робота

rostopic list
====
/map
/map_metadata

Мы видим что появилось несколько новых топиков /map и /map_metadata

В топике /map находятся данные нашей карты в формате сообщения (nav_msgs/OccupancyGrid). Каждое значение массива, это одна точка карты.

Каждая точка это целое число [0 ~ 100]. Область, близкая к 0, представляет собой свободную область, определенную как незанятую область, тогда как 100 определяется как занятая область, а -1 особенно определен для неизвестной области.

Визуализация карты в rviz

Смотреть на цифры массива в топике /map познавательно, но не информативно. Визуализируем данные.

В rviz откроем конфигурационный файл с данными лидара, и добавим в него отображение карты:

Add->By Topic->/map->Map

Мы увидим карту которую нам построил gmapping:

Белым обозначена свободная зона, серым неизвестная, черным препятствия.

По умолчанию, один пиксель карты равен 5см реального помещения.

Мы видим, что карта заполнена только вокруг робота, а именно, только там куда "достают" лучи лидара. Для того чтобы построить карту всего помещения давайте начнем перемещать робота, чтобы он "отсканировал" все пространство помещения.

Построение карты помещения будет законченно, когда в контуре помещения не останется неизвестных мест. А все препятствия будут отмечены черным.

На качество построения карты, влияет скорость движения и вращения робота. Чем скорости меньше (особенно вращения) тем лучше качество построенной карты.

Для управления роботом, воспользуйтесь веб-интерфейсом робота. В веб-интерфейсе есть возможность изменить линейную и угловую скорости робота.

Для удобства построения и "чтения" карты, перед построением карты установите робота в точку помещения которую вы хотите обозначить как нулевая координата.

Далее необходимо "сбросить" данные о положении робота. Для этого на роботе можно нажать на кнопку "restart" или в терминале робота прописать команду "rosservice call reset". Далее запустите процесс построения карты. На экране rviz карта будет выстроена относительно этой точки.

results matching ""

    No results matching ""