Занятие № 5. Navigation_stack

В среде ROS существует набор пакетов, описывающих поведение роботов, выполняющих задачу SLAM. На самом деле робот решает некоторые дополнительные задачи, как то:

считывает информацию с датчиков;

передаёт информацию двигателям;

обрабатывает входные сигналы управляющего воздействия; и так далее

Набор пакетов navigation_stack выполняет все эти действия. На самом деле цель этого пакета в том, чтобы упростить перенос ПО, связанного со SLAM, на реальных роботов. navigation_stack использует строгую иерархию топиков и сообщений. Таким образом, каждый компонент может быть заменён на аналогичный, если только он поддерживает такую же структуру топиков, на которые он подписан и в которые он пишет. Полная структура пакетов, входящих в navigation_stack представлена на вики http://wiki.ros.org/navigation

Для того, чтобы воспользоваться рабочей версией, необходимо воспользоваться инструкцией, представленной на гитхабе. Скачав все требуемые пакеты и выполнив catkin_make в созданной директории catkin_ws/, можно запустить симулятор командой

roslaunch map_merger test_one.launch

откроется несколько окон, среди которых будут:

rviz rviz

sage sage

консли console

Если сделать активным окно teleop_twist_keyboard.py, то клавишами, указанными в консоли, можно управлять роботом. При этом в rviz будет нарисована карта, какой себе её представляет робот после проделывания алгоритма SLAM (в данном случае используется алгоритм, который называется gmapping). В sage нарисована карта и реальное перемещение робота по ней. Карта располагается в файле /catkin_ws/src/aau_multi_robot/map_merger/world/small_world.pgm

Пакеты, используемые в данном симуляторе можно увидеть, посмотрев на rqt_graph: rqt_graph

На схеме видно, что ключевую роль в этом симуляторе играет slam_gmapping. Как было сказано выше, на этом месте может быть любой SLAM. Перемещая робота с использованием клавиатуры можно наблюдать, что gmapping ощутимо корректирует данные одометрии, выстраивая карту, похожую на введённую. Построенная карта всё же имеет погрешности. Эти погрешности возникают из-за несовершенства реализации предложенного алгоритма SLAM.

Названия топиков достаточно красноречиво говорят об их предназначении, однако всегда можно узнать содержимое этих топиков с помощью команды rostopic echo. Но необходимо помнить, что почти в каждый топик сообщения посылаются с очень высокой частотой.