目录

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;

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

  1. MP地面站二次开发教程(一)开发环境搭建和编译

    目录 基于Mavlink的上位机地面站开发教程 第一节 开发环境搭建 1.预编译 (源码尽量放到非中文目录下面) 2.初次编译 ​ 3.删除这个speech引用,重新引用这个speech包(每个人的环 ...

  2. MP地面站二次开发教程(五)简易地面站多机控制系统框架

    目录 一 .硬件框架 二.使用方式 三.软件框架 1.设备链表 没添加一个载具/飞机,就在链表里面添加一个实例化了的类(飞机/载具对象) 2.Device类包含了串口和TCP通讯的方法,添加一个新的载 ...

  3. MP地面站二次开发教程(三)Mavlink通讯协议(4)地面站数据显示调试及其指令填充

    目录 1.利用SimpleExample和Mavlink inspector的调试使用 2.Mavlink设置模式指令的填充 3.Mavlink控制指令的填充 4.MAV_CMD 在地面站做一些显示和 ...

  4. MP地面站二次开发教程(四)地面站优化及其功能测试

    目录 1.GMAP图片加载 2.实时路径显示与地图纠偏 3.指令发送的添加 前面章节已经描述清楚指令和航点的上传,有些优化和功能测试的工作在接下来的章节里面完成 1.GMAP图片加载 我们要实现上图所 ...

  5. QGC地面站二次开发(三)Qt 简洁地面站

    目录 多机控制原理 多机控制实现 简洁地面站优化 1. 飞机的飞行轨迹以不同的颜色区分 2. 控制所有的飞机 3. 将设定航线送给特定的飞机 多机控制原理 多机地面站支持 TCP. UDP 和串口等三 ...

  6. qgc开发文档_QGC地面站二次开发教程二

    上一次带大家进行了ubuntu下的Q Ground Control安装与编译,这次教大家对地面站的页面进行修改,对按钮或者页面进行删减,如何添加下次再说吧,我还没研究明白. 一开始打开qgroundc ...

  7. shopify二次开发教程_详细教程:如何将Shopify的Storefront API与React和Redux结合使用...

    shopify二次开发教程 by Chris Frewin 克里斯·弗里温(Chris Frewin) 详细教程:如何将Shopify的Storefront API与React和Redux结合使用 ( ...

  8. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  9. 来自damon的zencart二次开发教程-3.1开发自己的zencart模板

    转载自:http://www.yunxiu.org/blog/ 今天在网上FQ看到一篇老外写的,关于制作zencart模板的文章.<Creating a new Zen Cart Templat ...

最新文章

  1. python实现平衡二叉树_LeetCode 110. 平衡二叉树 | Python
  2. nginx安装包 linux,Linux(CentOS)环境下安装下载Nginx并配置
  3. 程序员正在消失!90%的人都不知道,写不出好代码,是输在了这点上!
  4. docker klee tutorial_在容器中安装新的程序
  5. Caffe应用篇----文件格式转换
  6. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名
  7. 按120分计算成绩 mysql_Mysql实用教程试卷B.doc
  8. 二、MyBatis系列:全局配置文件
  9. 5G加速向纵深发展 中国电信联合产业链开展“5G创新终端商用合作行动”
  10. 面经自己汇总(三维视觉算法机器学习深度学习)——持续更新
  11. AD域渗透 | PTHPTK哈希传递攻击手法
  12. 从实例来看DAO:权力分散的伟大尝试
  13. 外汇基础学习1:结售汇
  14. Windows11系统农业银行企业K宝无法正常使用的解决方法
  15. ROS雷达包出现:ERROR: cannot launch node of type: rplidar_ros
  16. java写100以内的素数_求出100以内的素数(java实现)
  17. loc,iloc,ix的区别
  18. 使用C语言+EasyX完成消灭星星游戏(2)
  19. 超棒的Google web字体查询工具 - Best Web Fonts
  20. 专访币印潘志彪:一直想把算力控制权交还矿工

热门文章

  1. 【三维点云】2-三维点云表征
  2. [python] 关于sum函数:sum(-1)、sum(1)、sum(0)以及keepdims=True的说明
  3. 基于tensorflow + Vgg16进行图像分类识别
  4. 『默哀』你的梦或许因为这个新闻而碎了【用你的程序语言 抛出一行异常】
  5. Unity UI带阴影的切图 某些角度出现黑边解决方案
  6. 高铝水泥与硅酸盐水泥或石灰混合使用
  7. 高精度定位成就智能物联|高精度定位的“智能化”进化史
  8. leetcode43(字符串相乘:模拟乘法竖式计算)
  9. JEEWX微信企业号管家,开源免费,1.0版本发布
  10. 求偏移量并且设置约束