APM新增一条新消息并在地面站missionplanner中的state中显示

 

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;

          }

 

以上属于原创,不经作者同意,禁止转载。

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WJsuperrunner

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值