QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍

目录

QGC界面显示框架

页面介绍 

飞行页面

Application Setting页面

General

Offline map 

连接

Vehicle Setup页面

Plan页面

航点和航测 

​电子围栏  ​

Rally

Analyse页面


QGC的界面由三大部分组成:

  • 1 菜单栏(File和Widget两项):其中File包含一个是否使能日志回放功能以及手动退出操作。Widget则包含了HIL和MAVLInk Inspector等功能控件。
  • 2 任务栏:实现将地面站的日志文件回放。
  • 3 主显示区域,该部分将支持的功能分类按照不同的页面进行展示。为方便大家将页面和代码对应我们先了解一下QGC界面显示的整体框架。QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第1张图片

QGC界面显示框架

地面站的UI界面是通过MainWindow类实现开始调用的,其中MainWindow.ui是GUI控件页面,同时该类中开始加载了qml文件,通过一些定制化的qml控件完成整个界面。下面根据代码来进行详细讲解:

1、MainWindow的构造函数中,通过加载了MainWindowHybrid.qml文件,相关代码如下:

 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
    _mainQmlWidgetHolder->setContextPropertyObject("controller", this);
    _mainQmlWidgetHolder->setContextPropertyObject("debugMessageModel", AppMessages::getModel());
    _mainQmlWidgetHolder->setSource(QUrl::fromUserInput("qrc:qml/MainWindowHybrid.qml"));

2、在MainWindowHybrid.qml,在该文件中通过一个Loader加载了MainWindowInner.qml.

Loader {
        id:             mainWindowInner
        anchors.fill:   parent
        source:         "MainWindowInner.qml"
            ...
    }

3 MainWindowInner.qml主要的控制页面的切换和加载。

  • MainToolBar:显示页面切换按钮栏
  • AppSettings.qml : Application Setting页面
  • SetupView.qml:Setup页面
  • PlanView.qml:Plan页面
  • FlightDisplayView:飞行页面
  • AnalyzeView.qml: Analyze页面

页面介绍 

在第一张图中左上角的第一个红框显示了地面站的五个主页面,点击可以实现页面切换。下面对这五个页面进行讲解。

飞行页面

QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第2张图片

上图时一副连接飞机之后的显示界面,我们按照从上到下、从左到右的顺序一一描述:

  • 页面切换按钮的右侧有一排图标显示飞机的状态数据,可以点击查看更详细的信息,例如电池状态
  • 电池状态的右边是飞行模式切换按钮,点击会下拉出支持操作的飞行模式。
  • 页面切换按钮的下方有一个Fly开头的按钮区域,该区域对应于飞机的控制操作。相较于之前的版本该版本引入了飞行前检查项,右方的List对应于检查项,完成此项检查则点击确认。
  • Fly操作区域平行的右侧有一个姿态显示仪表盘以及飞机详细数据展示,大家可以点击左上角的设置图标选中关注的数据进行更多数据显示操作。
  • 页面的左下角是视频显示区域

该页面对应的QML文件是FlightDisplayView.qml。 

Application Setting页面

General

可以进行显示单位、配色、字体大小、地图设置等等

QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第3张图片

Offline map 

可以进行离线地图的下载

连接

可以选择通过串口、UDP、TCP、Mock以及日志回放方式和地面站建立连接 QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第4张图片

模拟一个飞机和地面站进行通信。

QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第5张图片

 该页面位于AppSettings.qml文件,

Vehicle Setup页面

QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第6张图片

 整体的页面规划位于SetupView.qml,该页面包含一系列的子页面,其中Summary和Firmware是无论连接或者不连接飞机都可以看到,而其他的控件是否可见以及状态取决于您的飞机的状态,QGC在根据飞机心跳中的固件类型构造PX4AutoPilotPlugin类或者APMAutoPilotPlugin类,该类中的vehicleComponents定制了统一的接口实现name、ico、Summary部件和详情页面。下面以PX4AutoPilotPlugin来详细描述:

  • Summary:参看showSummaryPanel函数,其根据目前的状态显示不同的页面。
  • FirmwareUpgrade.qml:Firmware页面
控件名称 详情页面 Summary
Airframe AirframeComponent.qml AirframeComponentSummary.qml
Sensors SensorsComponent.qml SensorsComponentSummary.qml
Radio RadioComponent.qml PX4RadioComponentSummary.qml
Flight Modes PX4FlightModes.qml FlightModesComponentSummary.qml
Power PowerComponent.qml PowerComponentSummary.qml
Safety SafetyComponent.qml SafetyComponentSummary.qml
Tuning 机型相关

Plan页面

 该页面的实现位于PlanView.qml,可以实现Mission、电子围栏、Rally的操作,在通过PlanMasterController类实现和C++的数据交互,在其中构造:

  • MissionController:实现普通航点和测绘的操作交互
  • GeoFenceController:实现电子围栏操作交互
  • RallyPointController:实现Rally操作交互

航点和航测 

电子围栏  

Rally

Analyse页面

QGC地面站二次开发(一)地面站介绍以及软件框架(1)地面站使用介绍和接口介绍_第7张图片

该页面实现位于AnalyzeView.qml文件,其中包含一些子页面,下面我用表格展示一下子页面控件名称、qml、后端C++类之间对应关系:

子页面 qml C++类
Log Download LogDownloadPage.qml LogDownloadController
GeoTag Images GeoTagPage.qml GeoTagController
Mavlink Console MavlinkConsolePage.qml MavlinkConsoleController

 

你可能感兴趣的:(嵌入式,物联网,qt,ui,c++)