Обработка сообщений ROS / MAVROS на железном железе - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть проект, который включает в себя простую последовательную связь с прокси-сервером с использованием предопределенного небольшого подмножества сообщений 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 Ответ

0 голосов
/ 04 января 2019

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

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

  • 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
...