在最新的APM代码中添加MAVLINK消息和教程中介绍的有些出入。
请对照“]Pixhawk源码笔记十一:增加新的MAVLink消息”进行添加
首先在common.xml或ardupilotmega.xml文件中添加你的信息的定义声明。
这2个文件的实际位置和笔记十一是不同的。实际是在“Modules/mavlink/message_definitions/v1.0”之中
然后可以在common.xml中仿造添加一条消息,例如我测试的是在文件最后结尾处加入
<message id="255" name="TEMP">
<description>send temperature to gcs</description>
<field type="int16_t" name="temperature1">Raw Temperature measurement (raw)</field>
<field type="int16_t" name="temperature2">Raw Temperature measurement (raw)</field>
<field type="int16_t" name="temperature3">Raw Temperature measurement (raw)</field>
<field type="int16_t" name="temperature4">Raw Temperature measurement (raw)</field>
</message>
添加后保存文件,编译。
会发现在Build.ArduCopter/libraries/GCS_MAVLink/include/mavlink/v1.0/common文件下 会多出来新的文件mavlink_msg_temp.h
然后在
GCS.h中的class GCS_MAVLINK
中增加新成员void send_temp(void);
然后在GCS_Common.cpp中加入函数实体
// 发送温度数据//
void GCS_MAVLINK::send_temp(void)
{
mavlink_msg_temp_send(chan, 0x0a,0x0b,0x0c,0x0d);//四个变量,测试使用。方便在串口助手里面找到。
}
最后将这个命令加入到发送循环当中。
例如在GCS_Mavlink.cpp当中的红色的部分。
bool GCS_MAVLINK::try_send_message(enum ap_message id)
{
.....................................
case MSG_RAW_IMU2:
CHECK_PAYLOAD_SIZE(SCALED_PRESSURE);
copter.gcs[chan-MAVLINK_COMM_0].send_scaled_pressure(copter.barometer);
copter.gcs[chan-MAVLINK_COMM_0].send_temp();//
.......................................................................
}
然后在电脑端利用串口助手链接PIXHAWK,你会发现可以接收到数据,但是接收不到加的这组数据。
因为你要打开MissionPlanner激活一下。然后关闭MP,打开串口助手就可以查找到
FE 08 42 01 01 FF 0A 00 0B 00 0C 00 0D 00 38 96
这组命令
以上是我自己添加mavlink的步骤和方法,内容比较少,都是干货。中间涉及的步骤和C++语言结构等等内容
希望大家帮一起补充全。