1

我有一个项目,它涉及使用预定义的 MAVLink 和 ROS / MAVROS 消息的小子集与代理进行简单的串行通信。

我在自己的裸机嵌入式 ARM Cortex F4 硬件上运行,没有底层操作系统(除了我自己的支持串行通信和其他硬件 I/O 等的框架)。

关于此任务的 MAVLink 方面,该过程似乎相对简单。消息 ID 是预定义的,MAVLink 头文件(从 XML 生成)包含打包和序列化功能。我已经成功实现并测试了这方面。

但是,我正在努力实现与 ROS 和 MAVROS 相同的功能。

我注意到 MAVROS 发行版包含定义 MAVROS 消息和与 MAVLink 消息之间的转换的头文件。

以下要点概述了我试图理解的过程。

  • 收到一条消息作为 MAVLink 数据包,我如何确定它是否真的是 ROS / MAVROS 消息?我假设 MAVLink 消息 ID 与标准 MAVLink 消息不同,但我找不到任何有关此的信息。
  • 一旦我知道它是 ROS / MAVROS 消息,我可以使用 MAVROS 分发中定义的 MAVLink 到 MAVROS 转换代码(如上所述)将其转换。
  • 现在我有一条 MAVROS 消息,我如何确定实际的消息类型并解析和提取其有效负载?我假设这与第一个要点(识别 ROS / MAVROS 消息)有关。
  • 同样,我如何反转此过程以从特定 ROS 消息类型所需的有效负载构建 MAVROS 消息?如上所述,它随后转换为 MAVLink 和序列化很简单。

最终,我要做的就是序列化和反序列化一小部分 ROS / MAVROS 消息,而不需要大量的框架开销。虽然允许我使用 MAVLink 执行此操作的信息很容易获得且易于实现,但我找不到使用 ROS / MAVROS 消息实现相同功能所需的等效信息。

非常欢迎任何帮助或澄清!

非常感谢!

4

1 回答 1

0

我曾经与 pixhawk 合作过。我会尽力在这里提供帮助。据我所知,有关 mavros 的文档包括:

基本上,mavros 由两部分组成:

  • libmavcon
  • 马夫罗斯

libmovcon 是一个 mavlink 传输器,它从无线电/以太网/wifi 网络发送/接收消息,并将 ENCODED(仍为 MAVLINK 格式)消息发布/订阅到 ROS 消息分发系统。mavros 是发布/订阅消息的 ENCODED 版本并选择性地解码和翻译成 ROS 消息的粘合剂。(例如,mavlink 全局速度到 ROS geometry_msgs/TwistStamped)

回到你的问题:

  1. 在 libmavcon 中,您定义将发送/接收 mavlink 消息的硬件资源(串行端口、udp 端口​​等)。
  2. 是的,mavros 会做mavlink 消息定义和ROS 消息定义之间的转换。
  3. mavros 将编译一个表到 mavlink 消息 ID 和它的绑定 ROS 消息。有插件完成。您可以创建自己的插件来覆盖自定义消息。
  4. 另存为 3
于 2019-01-04T05:38:00.177 回答