Я начинаю серию статей о ROS, где планирую показать в деталях работу с основными компонентами, из которых состоит робототехническая платформа ROS и рассказать о возможных подводных камнях, с которыми можно столкнуться при работе с ними. Я буду делиться информацией, которую получил на основе собственного опыта работы с ROS. Статьи будут представлены в виде небольших заметок. Надеюсь статьи будут полезны читателям Хабра.
Трансформации являются одним из ключевых понятий в робототехнике и в ROS. Это обусловлено тем, что робототехнические системы являются по определению сложными и состоят из большого числа взаимосвязанных физических компонентов. Для мобильных роботов это могут быть основная база («тележка», на которой располагается основной вычислительный модуль), оси колес, различные сенсоры (камеры, лидары), другие подвижные части (н-р, манипуляторы, подвижная «голова»). Для промышленных роботов это различные суставы которые способны поворачиваться друг относительно друга.
Для эффективного управления роботом нужно знать обо всех системах координат и трансформациях между ними.
Координатные системы (также называются фреймами) в ROS определяют точку начала координат и направлений осей x, y и z в мире. Каждый фрейм имеет свой собственный frame_id. Самый базовый фрейм обычно называется world или map и он является референсом для всех остальных фреймов. Как правило основа робота имеет свой собственный фрейм под названием base_link.
Вот пример различных систем координат двух роботов — промышленного манипулятора (слева) и популярного робота-гуманоида PR2 (справа):
Если робот выполняет задачу поиска объектов в сцене, то каждый найденный объект в сцене также обладает своим собственным фреймом. В таком случае важно точно определять положение объектов в сцене относительно робота (трансформация между фреймами объекта и робота) чтобы выполнять задачи манипуляции с объектами.
Трансформация определяет сдвиг (translation) и поворот (rotation), необходимые чтобы попасть из исходного фрейма source в целевой (target). Все возможные трансформации между всему доступными в системе фреймами образуют дерево трансформаций (transform tree). Наличие дерева трансформаций позволяет получить необходимую трансформацию между любыми двумя несвязанными напрямую фреймами через цепочку трансформаций.
Инструменты для работы с трансформациями в ROS
В ROS для работы с трансформациями есть специальный пакет tf. Пакет предоставляет удобные средства для взаимодействия с деревом трансформаций.
В tf есть несколько полезных утилит для получения информации о дереве трансформаций.
Первая утилита это tf_monitor.
Запустим команду:
rosrun tf tf_monitor
У вас будет примерно такой результат в терминале (в случае работы SLAM алгоритма)
Здесь unknown_publisher публикует трансформацию в фрейм vo_pose.
Вторая полезная утилита это tf_echo.
Получим информацию о трансформации между двумя системами координат:
rosrun tf tf_echo /openni_camera /openni_depth_optical_frame
Результат может быть такой:
Другая утилита static_transform_publisher позволяет публиковать (или другими словами применить) статическую трансформацию для определенного фрейма. Синтаксис команды такой:
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
Здесь x/y/z задают сдвиг в метрах вдоль соответствующих осей, yaw/pitch/roll в радианах (yaw это поворот вокруг оси Z, pitch — поворот вокруг оси Y, and roll — поворот вокруг оси X). period_in_ms — это период в мс, который определяет частоту публикации трансформации.
static_transform_publisher можно также использовать в launch файле:
<launch> <node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" /> </launch>
И наконец последняя полезная утилита view_frames
rosrun tf view_frames
Эта команда сформирует информацию о дереве трансформаций в графическом виде и сохранит ее в файле frames.pdf.
Откроем файл frames.pdf
Я рассказал вкратце о том, что такое трансформации и как с ними работать в ROS.
На официальном сайте есть серия туториалов по работе с tf. Там можно более глубоко погрузиться в эту тему и попробовать работу с tf на практических примерах.
ссылка на оригинал статьи https://habr.com/ru/articles/840894/
Добавить комментарий