一. 生成自定义mavlink协议
具体操作参考之前文章->【QGroundControl二次开发】四.QGC自定义MAVLink消息
-------------------------下面为具体操作---------------------------
在mavlink源码下的mavlink-master\message_definitions\v1.0\common.xml加入自定义协议,格式如下:
<message id="20001" name="CUS_AI_HEARTBEAT">
<description>The heartbeat message shows AI Computer Status.</description>
<field type="uint8_t" name="type" enum="MAV_TYPE">Vehicle or component type. For a flight controller component the vehicle type (quadrotor, helicopter, etc.). For other components the component type (e.g. camera, gimbal, etc.). This should be used in preference to component id for identifying the component type.</field>
<field type="uint8_t" name="autopilot" enum="MAV_AUTOPILOT">Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.</field>
<field type="uint8_t" name="base_mode" enum="MAV_MODE_FLAG" display="bitmask">System mode bitmap.</field>
<field type="uint8_t" name="system_status" enum="MAV_STATE">System status flag.</field>
<field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version</field>
</message>
与之前介绍的不同的GGC地面站是C版本的MAVLINLK,所以这里是需要生成c版本的协议。
运行源码中的mavgenerate.py脚本。
在Generator中的XML框中选择修改完的commo.xml文件,Out中选择生成文件的位置。
生成的文件如下所示:
二. 修改QGC文件
两种方法选其一
2.1 省事做法
复制生成文件的common下的common.h和 mavlink_msg_cus_ai_heartbeat.h到 qgc的mavlink对应位置下。
一般是在qgroundcontrol\libs\mavlink\include\mavlink\v2.0\common下
2.2 手动修改
- 复制生成common.h中的多出来的crc校验字段加入到qgc中common.h的校验中。
MAVLINK_MESSAGE_CRCS{...}
- 在common.h两千多行的位置引入新协议的头文件
#include "./mavlink_msg_cus_ai_heartbeat.h"
- 修改common.h中的
MAVLINK_MESSAGE_INFO
.
# define MAVLINK_MESSAGE_INFO {..., MAVLINK_MESSAGE_INFO_CUS_AI_HEARTBEAT}
- 修改common.h中的
MAVLINK_MESSAGE_NAMES
# define MAVLINK_MESSAGE_NAMES {..., { "CUS_AI_HEARTBEAT", 20001 }}
重新编译,编译成功即无误。