ros #gazebo-simu
#ros #gazebo-simu
Вопрос:
У меня есть квадрокоптер, и я хочу прочитать его положение в (x, y, z), используя hector_gazebo_plugin и python. На данный момент я использую libhector_gazebo_ros_gps.so файл, чтобы получить широту и долготу квадрокоптера.
Но я хотел бы иметь положение квадрокоптера.
Как мне это сделать?
Комментарии:
1. Что вы подразумеваете под желанием получить позицию (x, y, z)? (лат, лон, альт) — это то же самое, только в другом кадре. Какой frame_id вы хотите?
2. @BTables Мне нужны декартовы координаты (x, y, z). Я новичок в ROS. Не могли бы вы сказать мне, что такое frame_id avalaible?
3. идентификаторы кадров абсолютно произвольны по имени. Здесь вы можете сказать, что (широта, долгота) будет
gps
фреймом, поскольку все координаты gps будут согласованы относительно друг друга. Декартово значение определяет только координаты относительно некоторого начала координат. В этом контексте вы должны определить, что это за источник; то есть начальная поза, которая является относительной, или абсолютная поза, такая как GPS. В ROS то, о чем вы спрашиваете, обычно называетсяodom
фреймом.
Ответ №1:
В ros есть несколько разных фреймов, до которых пытался добраться BTables. Если вы пытаетесь получить оценку положения по данным датчиков, используя пакет robot_localization, ознакомьтесь с различными типами фреймов и типами сообщений / данных ros, которые входят и выходят из этого процесса.
Обычно в ros есть 3 основных фрейма: map -> odom -> base_link. Базовая ссылка — это точка на роботе, которая ее представляет. Кадр odom отслеживает обновления встроенного датчика скорости / ускорения, чтобы иметь непрерывное положение; его начало обычно находится там, где загружается робот. Рамка карты — это местоположение робота в «реальном мире». Для этого требуется исходное положение и отклонение, потому что в противном случае это произвольно.
В вашем случае кажется, что вы хотите привязать робота к системе координат долготы / широты. Моя рекомендация по-прежнему заключается в том, чтобы выбрать источник в вашей среде, если вы можете, в противном случае вы можете использовать местоположение загрузки в качестве источника.
Итак, чтобы сделать это, я предполагаю, что ваше преобразование odom-> base_link является узлом EKF или UKF (из robot_localization), используя данные IMU с вашего квадрокоптера. Тогда ваше преобразование map-> odom — это другой EKF или UKF, который также занимает абсолютную позицию в вашем фрейме карты в качестве обновления. (См. Пример файла запуска (navsat notes) и конфигурационный файл yaml (navsat notes) и многое другое на github). Затем вы можете использовать свой fix
раздел (sensor_msgs / NavSatFix) из плагина hector gazebo gps с navsat_transform_node, чтобы получить обновление местоположения для вашего оценщика выше и преобразовать карту в глобальную систему координат или utm.
Если вы не заботитесь о своем положении по отношению к выходящему миру, это становится немного проще, в противном случае у этого также есть функции, позволяющие сообщать о вашем положении обратно в широту / длину.