Pixhawk--Mavlink协议之自定义消息接收处理

基本通讯介绍

Ardupilot中通讯部分是依赖Mavlink消息


代码结构

具体结构见下图:


自定义消息的发送与处理

Ardupilot中处理Mavlink的流程:

在主类Rover中,启动了两个频率为400Hz的任务线程,分别处理接收(update_receive)和发送(update_send)

接收部分:

在文件目录GCS__MAVLINK中

GCS_Common.cpp文件里面:

update_receiver()-->packetReceived()-->handleMessage(),此处的handleMessage只是个抽象方法,具体实现在GCS_Mavlink.cpp中

在Rover/ GCS_Mavlink.cpp中

以上就是目前Ardupilot中处理Mavlink的基本流程


定制自定义Mavlink消息

一、在文件:common.xml(路径 ardupilot/modules/mavlink/message_definitions/v1.0/common.xml)最底部,添加自定义消息体描述


二、在终端中编译该项目代码

./waf rover


三、此时在build的目录中,可以找到

路径:build/Pixhawk1/libraries/GCS_MAVLink/include/mavlink/v2.0/common/mavlink_msg_test_mavlink.h

ardupilot中包含mavgenerate工具,在编译过程中会自动编译和生成新增的自定义Mavlink消息体,过程自动化

里面一般会包含:

MAVLINK_MSG_ID_TEST_MAVLINK 消息ID

mavlink_test_mavlink_t 构造体

mavlink_msg_test_mavlink_send 发送方法

mavlink_msg_test_mavlink_decode 解析方法

mavlink_msg_test_mavlink_encode 组装方法

方便外部调用

四、新建对应的处理类,AP_ROVER_Mavlink

完成采集数据、Mavlink封装与解析等

五、整合

在Rover/GCS_Mavlink.cpp的handleMessage()方法中,添加该自定义Mavlink消息ID的识别和处理


libraries/GCS_MAVLink/GCS_Common.cpp中对应的方法:


最终的处理方法内容见下图:

QGC中发送和接收自定义Mavlink消息的相关推荐:

PX4实战之旅(二):通过自定义mavlink消息和QGC通信

MAVLINK消息在Ardupilot中的接收和发送过程

QGC添加自定义组件和发送自定义MAVLINK消息

ardupilot之mavlink消息--从飞控发出--单向

Ardupilot 如何处理 MAVLink 消息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容