Я начинаю серий статей о ROS, где планирую раскрыть в деталях и рассказать о возможных подводных камнях при работе с основными компонентами, из которых состоит платформа для разработки робототехники ROS. Я буду делиться информацией, которую получил на основе собственного опыта работы с ROS. Статьи будут представлены в виде небольших заметок. Надеюсь статьи будут полезны читателям Хабра.
Трансформации являются одним из ключевых понятий в робототехнике и в ROS. Это обусловлено тем, что робототехнические системы являются по определению сложными и состоят из большого числа взаимосвязанных физических компонентов. Для мобильных роботов это могут быть основная база ("тележка", на которой располагается основной вычислительный модуль), оси колес, различные сенсоры (камеры, лидары), другие подвижные части (н-р, манипуляторы, подвижная "голова"). Для промышленных роботов это различные суставы которые способны поворачиваться друг относительно друга.
Для эффективного управления роботом нужно знать обо всех системах координат и трансформациях между ними.
Координатные системы (также называются фреймами) в ROS определяют точку начала координат и направлений осей x, y и z в мире. Каждый фрейм имеет свой собственный frame_id. Самый базовый фрейм обычно называется world или map и он является референсом для всех остальных фреймов. Как правило основа робота имеет свой собственный фрейм под названием base_link.
Вот пример различных систем координат двух роботов - промышленного манипулятора и популярного робота-гуманоида PR2.
Красным цветом обозначается направление по оси x, голубым y и зеленым - z.
Трансформация определяет сдвиг и поворот необходимые чтобы попасть из исходного фрейма source в целевой (target). Все возможные трансформации между всему доступными в системе фреймами образуют дерево трансформаций (transform tree). Наличие дерева трансформаций позволяет получить необходимую трансформацию между любыми двумя несвязанными напрямую фреймами через цепочку трансформаций.
Инструменты для работы с трансформациями в ROS
В ROS для работы с трансформациями есть специальный пакет tf. Пакет предоставляет удобные средства для взаимодействия с деревом трансформаций.
В tf есть несколько полезных утилит для получения информации о дереве трансформаций.
Первая утилита это tf_monitor.
Запустим команду:
rosrun tf tf_monitor
У вас будет примерно такой результат в терминале (в случае работы SLAM алгоритма)
Вторая - tf_echo.
Получим информацию о трансформации между двумя системами координат:
rosrun tf tf_echo /map /odom
Вывод будет такой:
..
Еще одна полезная утилита - static_transform_publisher. static_transform_publisher позволяет публиковать статическую трансформацию в tf.
Ее синтаксис такой
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
Например:
rosrun tf static_transform_publisher x_val y_val z_val yaw_val pitch_val roll_val base_link base_laser period_hz
static_transform_publisher можно также использовать в launch файле.
И наконец view_frames
rosrun tf view_frames
Эта команда собирает информацию о дереве трансформаций и сохраняет ее в удобной графическом виде в файле frames.pdf.
Откроем файл frames.pdf и увидим что-то подобное:
Пример программы для работы с tf
Автор: vladpriv