MP地面站二次开发教程(三)Mavlink通讯协议(3)地面站数据填充与显示

目录

1、界面布局​

2、基本参数的显示

3、UI初步设计​

4 、数传端口打开

5、GPS卫星数据显示

6、电量显示

7、飞控模式状态显示​

8、飞控数据报错显示


1、界面布局

 这边是参考了拓攻地面站的布局,但是基本上还是不一样的,删除MP地面站原本的冗余模式。只保留基本的信息显示和重要的消息和控制指令。飞机在目前的课程上这个地面站上是无法完成校准和参数设置的。这一阶段的地面站只考虑基本的功能,也是方便用户使用的地面站。目标是简洁,易于使用。因为要考虑到多机控制,所以该地面站设计有一个多机控制界面,多机控制界面是另外一个菜单界面,和这个界面还是有很大的不同。在多机控制那一章节会有介绍,这里不做讨论。

2、基本参数的显示

基本参数采用的是TabControl控件完成的菜单切换功能,里面是一些基本的数据信息和一些控制指令,显示高度,距离,空速,飞行时间等等。在基本操作里面是对飞控的一般的控制指令,前后左右方向,开伞,或者直接控制舵机的一些指令

3、UI初步设计

 UI的设计第一点是布局的设计,这部分如果是大型软件,都是有专门的UI设计工程师来完成。包含人机交互,设计美学功底,甚至要有使用工程师的高度参与。这也是为什么不同的地面站,外观差别很大。这和软件的设计理念有很大关系,向MP的地面站,因为是考虑给研发调试人员用的,所以有比较丰富调试接口。但是这样就给实际使用带来了冗余,也导致了软件会有BUG,带来了软件的不稳定性。单纯从使用功能上讲地面站软件不是一个非常复杂的软件,是一个中等规模的软件。这也是我们设计软件的出发点,功能尽量简洁够用,然后逐步细化,优化。长期维护一个相对比较简洁到的地面站。如果对于界面的UI设计,有特殊要求的,可以修改,包括HUD界面都是底层的绘图操作,还是比较简单的。市场上也有很多提供现成航空UI控件,可以授权购买,也很方便。适配屏幕的dock操作也是重点

4 、数传端口打开

数传端口主要是设计打开数传连接和关闭数传连接,涉及到连接成功的检查,还有数传连接的信号强度设计显示。 理解:

 dv1 = new Device()类

  dv1.Start();//start函数完成的功能

  异步显示反馈对话框 ProgressReporterDialogue

  连接寻找心跳包的委托  FrmProgressReporterDoWorkNOParams

5、GPS卫星数据显示

Gps_nmulabel.Text = MAV.cs.satcount.ToString();//显示GPS卫星数量
 CurrentState 重点是这个状态类的理解,里面存放了飞控的所有状态,是一个飞控mavlink消息的缓冲区。

6、电量显示

系统状态包里面是显示系统电量的,系统电量的显示,要校准飞控测量出的电压和真实电量电压,得出校准偏移量。

 public struct mavlink_sys_status_t
{
    /// <summary> Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR MAV_SYS_STATUS_SENSOR</summary>
    public  /*MAV_SYS_STATUS_SENSOR*/uint onboard_control_sensors_present;
        /// <summary> Bitmask showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR MAV_SYS_STATUS_SENSOR</summary>
    public  /*MAV_SYS_STATUS_SENSOR*/uint onboard_control_sensors_enabled;
        /// <summary> Bitmask showing which onboard controllers and sensors are operational or have an error:  Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR MAV_SYS_STATUS_SENSOR</summary>
    public  /*MAV_SYS_STATUS_SENSOR*/uint onboard_control_sensors_health;
        /// <summary> Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 </summary>
    public  ushort load;
        /// <summary> Battery voltage, in millivolts (1 = 1 millivolt) </summary>
    public  ushort voltage_battery;
        /// <summary> Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current </summary>
    public  short current_battery;
        /// <summary> Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) </summary>
    public  ushort drop_rate_comm;
        /// <summary> Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) </summary>
    public  ushort errors_comm;
        /// <summary> Autopilot-specific errors </summary>
    public  ushort errors_count1;
        /// <summary> Autopilot-specific errors </summary>
    public  ushort errors_count2;
        /// <summary> Autopilot-specific errors </summary>
    public  ushort errors_count3;
        /// <summary> Autopilot-specific errors </summary>
    public  ushort errors_count4;
        /// <summary> Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery </summary>
    public  byte battery_remaining;

};

7、飞控模式状态显示

System_modelabel.Text = MAV.cs.mode;//mode飞机当前模式状态

    Firmware_label.Text = MAV.cs.firmware.ToString();//固件类型

8、飞控数据报错显示

messageHight为系统报错的成员,系统的一些报错在里这里面显示。注意:这个成员函数对于Ardupilot固件是有效的,PX4的系统报错显示不是用的这个消息成员。这个变量在PX4固件里面是没法打印出来的,需要根据PX4源码的mavlink部分来调试解析,因为这个MAVLINK库是从Missionplanner处剥离出来的,所以有一部分代码是对PX4的兼容性不是很好,我们需要分析PX4的源码来修改一些地方。这个源码框架我也比较建议是不同固件做不同的编写,比如四旋翼是四
旋翼的地面站,固定翼是固定翼专门的地面站,PX4是专门的地面站。不在一个地面站里面做所有机型,飞控的兼容性配置,这样会极大的降低地面站编写的复杂程度。

 if (massag_error != MAV.cs.messageHigh)//如果这次的报错和上次的不一样,就更新本次的报错内容,防止textbox重复循环打印报错
 {
     Error_box.AppendText("错误/警告:" + dv1.comPort.MAV.cs.messageHigh + "\r\n");
 }

 massag_error = MAV.cs.messageHigh;

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chris_Brown

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值