最后更新:2022-02-21 16:15:39 手机定位技术交流文章
mavlink作为PX4以及APM两大开源飞控的通讯协议,应用非常广泛。在进行开源飞控二次开发时,增加自定义消息非常普遍。比如在offboard模式下,将视觉避障信息或者雷达信息发送给飞控,这时候就需要在mavlink中自定义一些消息了。
1 2 3 4 5 6 |
|
先自定义在mavlink/include/mavlink/v2.0/message_definitions/下创建自定义消息custom_message.xml文件,与ca_trajectory中结构一致,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
注意需要添加一个timestamp的成员,因为在编译时为了记录,会增加一个timestamp的成员。然后使用mavlink generator生成c语言源文件。
1.去git 官网上下载源码
git clone https://github.com/mavlink/mavlink.git
2.进入代码目录并更新子模块
cd mavlink
git submodule update --init --recursive
3.编译并运行python脚本
python -m mavgenerate
完成以上步骤即可。
XML文件定位可以直接定位到mavlink/include/mavlink/v2.0/message_definitions/custom_message.xml,Out目录定位到mavlink/include/mavlink/v2.0/common,注意语言选择C,协议选择2.0,如下图所示:

然后点击Generate即可生成c代码源文件。
1 2 |
|
注意添加到已有包含文件的尾部,否则编译时可能会出现类型为定义的错误。
创建自定义消息对应的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
|
注意该类的函数成员返回类型和MAVLink v1.0稍有不同,笔者发现下载到的master分支和stable分支的函数类型都有所不同,具体以下载代码为准,可以参考代码中已有的其他消息例子来编写。
在附加流类中添加该自定义项
1 2 3 4 5 |
|
1 |
|
1 2 |
|
1 |
|
在类Mavlink_Receiver中增加一个消息处理函数
1 |
|
在mavlink_receiver.cpp中加入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
在该函数中实现了对消息的解包及发布。
在 MavlinkReceiver::handle_message() 中调用消息处理函数
1 2 3 4 5 6 7 8 9 10 11 |
|
本文由 在线网速测试 整理编辑,转载请注明出处。