在裸机硬件上处理ROS / MAVROS消息

时间:2018-12-18 15:54:48

标签: ros mavlink px4

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

我正在运行我自己的,没有基础操作系统的裸机嵌入式ARM Cortex F4硬件(除了我自己的支持串行通讯和其他硬件I / O的框架以外)。

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

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

我注意到MAVROS分发包含一些头文件,这些头文件定义了MAVROS消息以及从MAVLink消息到/从MAVLink消息的转换。

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

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

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

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

mavros基本上由两部分组成:

  • libmavcon
  • mavros

libmovcon是mavlink收发器,它从无线电/以太网/ wifi网络发送/接收消息,并将已编码(仍为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