APM新增一条新消息并在地面站missionplanner中的state中显示
一、使用mavlink generator生成器生成所要添加消息的头文件
mavlink generator 如何使用:https://blog.csdn.net/superrunner_wujin/article/details/68065893
1、需要在common.xlm中新增如下:
<message id="227" name="POLGHT">
<description>Thismessage is Po_aw</description>
<fieldtype="float" name="Po_aw">Pozed_aw</field>
</message>
二、APM代码修改
2.1common.h中:
使用使用mavlink generator生成器生成头文件(如何使用generator见http://blog.csdn.net/superrunner_wujin/article/details/64126008 和http://blog.csdn.net/superrunner_wujin/article/details/68065893),common.h文件也会发生相应的变化,直接用生成的common.h文件可能会存在好多不为认知的问题,因此我们仅仅修改原来的common.h修改仅需以下三步:
Step#1:#defineMAVLINK_MESSAGE_CRCS{ }中的参数用新生成的参数代替;
Step#2:#define MAVLINK_MESSAGE_INFO{}中的参数用新生成的参数代替;
Step#3:在common.h下的MESSAGEDEFINITIONS中增加#include "./mavlink_msg_POLGHT.h"
2.2GCS.h中:
step#1:在GCS.h的GCS_MAVLINK 类中增加voidsend_POLGHTdate(mavlink_channel_t chan);
step#2: 把MSG_POLGHT添加在GCS.h下的enum ap_message中;
2.3 在GCS_MAVLink.ino中
step#1:在GCS_MAVLink.ino中定义函数
void GCS_ MAVLINK::send_POLGHTdate(mavlink_channel_tchan)
{
mavlink_msg_POLGHT_send(chan, po.last_po);
}
step#2:在mavlink_try_send_message()中:
在switch(id)中添加我们所添加的消息;(通过 switch(id)选择要发送的消息)
case MSG_POLGHT:
CHECK_PAYLOAD_SIZE(POLGHT);
send_POLGHTdate(chan);
break;
step#3: 在void GCS_MAVLINK::data_stream_send(void)的最后添加send_message(MSG_POLGHT);
三 mission planner源代码修改记录
3.1 Mavlink.cs下
Step#1:定义一个消息
new message_info(227, "POLGHT",173, 4, 4, typeof( mavlink_POLGHT_t )),
step#2:将新消息POLGHT=227加入到publicenum MAVLINK_MSG_ID
{
POLGHT=227,
}
Step#3:在Mavlink.cs文件的最后定义mavlink_pozed_lih_sor_t
[StructLayout(LayoutKind.Sequential, Pack =1, Size = 4)]
public struct mavlink_pozed_lih_sor_t
{
/// <summary>Po_aw</summary>
public float Po_aw;
};
3.2 currentstate.cs下
Step#1:state中显示
[DisplayText("Po_aw(deg)")]
public float Po_aw{get;set;}
step#2:获取信息:
mavLinkMessage =MAV.getPacket((uint)MAVLink.MAVLINK_MSG_ID.POLGHT);
if (mavLinkMessage != null)
{
var _Po_aw =mavLinkMessage.ToStructure<MAVLink.mavlink_POLGHT_t>();
Po_aw = _Po_aw.Po_aw;
}
以上属于原创,不经作者同意,禁止转载。