Обработка сообщений ROS / MAVROS на железном железе

У меня есть проект, который включает в себя простую последовательную связь с прокси, используя предопределенное небольшое подмножество сообщений MAVLink и ROS / MAVROS.

Я работаю на своем собственном встроенном железе ARM Cortex F4 без какой-либо базовой операционной системы (кроме моей собственной инфраструктуры, поддерживающей последовательную связь и другой аппаратный ввод-вывод и т. Д.).

Что касается аспекта MAVLink этой задачи, процесс выглядит относительно простым. Идентификаторы сообщений предопределены, а файлы заголовков MAVLink (сгенерированные из XML) содержат функции упаковки и сериализации. Я успешно реализовал и протестировал этот аспект.

Тем не менее, я изо всех сил пытаюсь достичь той же функциональности с ROS и MAVROS.

Я заметил, что дистрибутив MAVROS содержит заголовочные файлы, которые определяют сообщения MAVROS и преобразование в / из сообщений MAVLink.

Следующие пункты обозначают процесс, который я пытаюсь понять.

  • Сообщение получено в виде пакета MAVLink. Как мне определить, действительно ли это сообщение ROS / MAVROS? Я предполагаю, что идентификатор сообщения MAVLink будет отличаться от стандартных сообщений MAVLink, но я не могу найти какую-либо информацию об этом.
  • Как только я узнаю, что это сообщение ROS / MAVROS, я могу преобразовать его, используя код преобразования MAVLink в MAVROS, определенный в дистрибутиве MAVROS (как упомянуто выше).
  • Теперь, когда у меня есть сообщение MAVROS, как я могу определить фактический тип сообщения, проанализировать и извлечь его полезную нагрузку? Я предполагаю, что это относится к первому пункту (идентифицирующему сообщения ROS / MAVROS).
  • Точно так же, как мне отменить этот процесс, чтобы создать сообщение MAVROS из требуемой полезной нагрузки для определенного типа сообщения ROS? Его последующее преобразование в MAVLink и сериализация просты, как описано выше.

В конечном итоге все, что я хочу сделать, - это сериализовать и десериализовать небольшое подмножество сообщений ROS / MAVROS без необходимости больших затрат на инфраструктуру. Хотя информация, позволяющая мне сделать это с помощью MAVLink, легко доступна и проста в реализации, я не могу найти эквивалентную информацию, необходимую для реализации той же функциональности с сообщениями ROS / MAVROS.

Любая помощь или разъяснение будет очень приветствоваться!

Большое спасибо!

1 ответ

Я работал с pixhawk некоторое время назад. Я сделаю все возможное, чтобы помочь здесь. Документация на Маврос, как мне известно, включает в себя:

По сути, Маврос состоит из двух частей:

  • libmavcon
  • Mavros

libmovcon - это передатчик mavlink, который отправляет / принимает сообщения из сети радио /ethernet/wifi и публикует / подписывает сообщение ENCODED (все еще в формате MAVLINK) в систему распространения сообщений ROS. mavros - это клей, который публикует / подписывается на ENCODED-версию сообщения и выборочно декодирует и переводит их в сообщения ROS. (например, глобальная скорость mavlink для ROS geometry_msgs/TwistStamped)

Вернуться к вашему вопросу:

  1. В libmavcon вы определяете аппаратный ресурс (последовательный порт, порт udp и т. Д.), Который будет отправлять / получать сообщения mavlink.
  2. Да, mavros выполнит преобразование между определением сообщения mavlink и определением сообщения ROS.
  3. mavros скомпилирует таблицу для идентификатора сообщения mavlink и связывающего его сообщения ROS. Там делается с помощью плагинов. Вы можете создать свой собственный плагин для покрытия пользовательских сообщений.
  4. сохранить как 3
Другие вопросы по тегам