基本通讯介绍
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通信