Обработка сообщений 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)
Вернуться к вашему вопросу:
- В libmavcon вы определяете аппаратный ресурс (последовательный порт, порт udp и т. Д.), Который будет отправлять / получать сообщения mavlink.
- Да, mavros выполнит преобразование между определением сообщения mavlink и определением сообщения ROS.
- mavros скомпилирует таблицу для идентификатора сообщения mavlink и связывающего его сообщения ROS. Там делается с помощью плагинов. Вы можете создать свой собственный плагин для покрытия пользовательских сообщений.
- сохранить как 3