我有一个项目,它涉及使用预定义的 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 消息实现相同功能所需的等效信息。
非常欢迎任何帮助或澄清!
非常感谢!