QGroundControl深度开发(2)-关于mavlinks你需要知道的

mavlinks是一个非常好的协议形式,能够快速构建各种你需要的协议,一方面你可以用mavlinks已经定义好的各种协议,另外一方面你可以非常方便的自定义协议。之前觉得mavlinks太繁琐,就自己写了几个协议,后来发现用mavlinks的自定义协议比自己写协议还方便。

关于mavlinks你需要知道:

(1)所有协议都包含在.h文件里,而.h文件都是工具生成,而生成工具是根据.xml文件进行generate的。

(2)自定义协议很简单,在.xml里面仿照前面的message申明,增加新的消息类型即可。然后用工具generate后即可看到新的.h文件。但是自定义协议crc校验需要特别注意,看第(5)点。

(3).h文件的使用其实非常方便,一般而言主要用两个函数,第一个和最后一个。第一个函数式XXXpack()函数,最后一个是XXXdecode()函数。第一个函数是把数据(struct类型)打包进message类。最后一个函数是从message中把数据提取出来。此外,还需要mavlink_msg_to_send_buffer函数,它把message最终打包成可以发送出去buffer字节组。

(4)也就是说,发送消息的时候,把数据放到你的结构体里,然后调用对应消息的XXXpack函数打包进message,然后用mavlink_msg_to_send_buffer把message打包进buffer(主要是添加header),然后用你的通信口把buffer发出去就可以了。接收的时候就更简单了,用mavlink_parse_char进行解析,把message从字符中提取出来,然后decode就得到对应的结构体数据了。

(5)在上述过程中,会包含crc校验。其中qgc接收数据进行crc校验的时候,会使用一个MAVLINK_MESSAGE_CRCS,我对此也不太清楚。对于自定义的消息文件,需要在MAVLINK_MESSAGE_CRCS中添加对应内容,否则crc校验会出错,就搜不到消息。可以参考px4自定义mavlink收不到消息的问题_飞控 mavlink 不返回-CSDN博客

QGC中对应添加位置是\libs\mavlink\include\mavlink\v2.0\all\all.h里。

(6)mavlink还可以定义不定长度的消息,可以搜一下关键词:Variable length payload。我看协议文件没看明白它是如何实现的,但是发消息的时候,发不定长度的消息,qgc确实是能parse的。

(7)调试过程可以多看看console里面的内容,自己可以添加一些调试信息,便于找到问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值