QGroundControl 添加自定义FactGroup

news2024/11/15 10:29:19

基于QGC4.1.2版本进行添加,首先由于QGC的原来对FactGroup定义均写在Vehicle.h和Vehicle.cc两个文件中,个人感觉都写在Vehicle文件下回导致文件过大,所以将FactGroup定义进行分离,写在各自的.h和.cc文件下,然后在Vehicle中include。

进入正题,添加自定义的FactGroup有一下几步(以VehicleGPSFactGroup为例):

  1. 新建.h文件然后定义FactGroup类

#pragma once

#include "FactGroup.h"
#include "QGCMAVLink.h"

class VehicleGPSFactGroup : public FactGroup
{
    Q_OBJECT

public:
    VehicleGPSFactGroup(QObject* parent = nullptr);

    Q_PROPERTY(Fact* lat                READ lat                CONSTANT)
    Q_PROPERTY(Fact* lon                READ lon                CONSTANT)
    Q_PROPERTY(Fact* mgrs               READ mgrs               CONSTANT)
    Q_PROPERTY(Fact* hdop               READ hdop               CONSTANT)
    Q_PROPERTY(Fact* vdop               READ vdop               CONSTANT)
    Q_PROPERTY(Fact* courseOverGround   READ courseOverGround   CONSTANT)
    Q_PROPERTY(Fact* count              READ count              CONSTANT)
    Q_PROPERTY(Fact* lock               READ lock               CONSTANT)

    Fact* lat               () { return &_latFact; }
    Fact* lon               () { return &_lonFact; }
    Fact* mgrs              () { return &_mgrsFact; }
    Fact* hdop              () { return &_hdopFact; }
    Fact* vdop              () { return &_vdopFact; }
    Fact* courseOverGround  () { return &_courseOverGroundFact; }
    Fact* count             () { return &_countFact; }
    Fact* lock              () { return &_lockFact; }

    static const char* _latFactName;
    static const char* _lonFactName;
    static const char* _mgrsFactName;
    static const char* _hdopFactName;
    static const char* _vdopFactName;
    static const char* _courseOverGroundFactName;
    static const char* _countFactName;
    static const char* _lockFactName;

private:
    Fact        _latFact;
    Fact        _lonFact;
    Fact        _mgrsFact;
    Fact        _hdopFact;
    Fact        _vdopFact;
    Fact        _courseOverGroundFact;
    Fact        _countFact;
    Fact        _lockFact;
};

  1. 新建.cc文件,进行类的初始化(不太确定这个是不是叫初始化)

#include "VehicleGPSFactGroup.h"

const char* VehicleGPSFactGroup::_latFactName =                 "lat";
const char* VehicleGPSFactGroup::_lonFactName =                 "lon";
const char* VehicleGPSFactGroup::_mgrsFactName =                "mgrs";
const char* VehicleGPSFactGroup::_hdopFactName =                "hdop";
const char* VehicleGPSFactGroup::_vdopFactName =                "vdop";
const char* VehicleGPSFactGroup::_courseOverGroundFactName =    "courseOverGround";
const char* VehicleGPSFactGroup::_countFactName =               "count";
const char* VehicleGPSFactGroup::_lockFactName =                "lock";

VehicleGPSFactGroup::VehicleGPSFactGroup(QObject* parent)
    : FactGroup(1000, ":/json/Vehicle/GPSFact.json", parent)
    , _latFact              (0, _latFactName,               FactMetaData::valueTypeDouble)
    , _lonFact              (0, _lonFactName,               FactMetaData::valueTypeDouble)
    , _mgrsFact             (0, _mgrsFactName,              FactMetaData::valueTypeString)
    , _hdopFact             (0, _hdopFactName,              FactMetaData::valueTypeDouble)
    , _vdopFact             (0, _vdopFactName,              FactMetaData::valueTypeDouble)
    , _courseOverGroundFact (0, _courseOverGroundFactName,  FactMetaData::valueTypeDouble)
    , _countFact            (0, _countFactName,             FactMetaData::valueTypeInt32)
    , _lockFact             (0, _lockFactName,              FactMetaData::valueTypeInt32)
{
    _addFact(&_latFact,                 _latFactName);
    _addFact(&_lonFact,                 _lonFactName);
    _addFact(&_mgrsFact,                _mgrsFactName);
    _addFact(&_hdopFact,                _hdopFactName);
    _addFact(&_vdopFact,                _vdopFactName);
    _addFact(&_courseOverGroundFact,    _courseOverGroundFactName);
    _addFact(&_lockFact,                _lockFactName);
    _addFact(&_countFact,               _countFactName);

    _latFact.setRawValue(std::numeric_limits<float>::quiet_NaN());
    _lonFact.setRawValue(std::numeric_limits<float>::quiet_NaN());
    _mgrsFact.setRawValue("");
    _hdopFact.setRawValue(std::numeric_limits<float>::quiet_NaN());
    _vdopFact.setRawValue(std::numeric_limits<float>::quiet_NaN());
    _courseOverGroundFact.setRawValue(std::numeric_limits<float>::quiet_NaN());
}
  1. 添加对应的json文件,这一步有点问题,需要手动修改qgroundcontrol.qrc文件中文件别名

[
{
    "name":             "lat",
    "shortDescription": "Latitude",
    "type":             "double",
    "decimalPlaces":    7
},
{
    "name":             "lon",
    "shortDescription": "Longitude",
    "type":             "double",
    "decimalPlaces":    7
},
{
    "name":             "mgrs",
    "shortDescription": "MGRS Position",
    "type":             "string"
},
{
    "name":             "hdop",
    "shortDescription": "HDOP",
    "type":             "double",
    "decimalPlaces":    1
},
{
    "name":             "vdop",
    "shortDescription": "VDOP",
    "type":             "double",
    "decimalPlaces":    1
},
{
    "name":             "courseOverGround",
    "shortDescription": "Course Over Ground",
    "type":             "double",
    "decimalPlaces":    1,
    "units":            "deg"
},
{
    "name":             "lock",
    "shortDescription": "GPS Lock",
    "type":             "uint32",
    "enumStrings":      "None,None,2D Lock,3D Lock,3D DGPS Lock,3D RTK GPS Lock (float),3D RTK GPS Lock (fixed),Static (fixed)",
    "enumValues":       "0,1,2,3,4,5,6,7",
    "decimalPlaces":    0
},
{
    "name":             "count",
    "shortDescription": "Sat Count",
    "type":             "uint32"
}
]
  1. 在CMakeList.txt文件中添加新建的类文件,文件路径:qgroundcontrol\src\Vehicle

以上准备好之后开始在Vehicle.h和Vehicle.cc中添加FactGroup

  1. 在Vehicle.h文件中include FactGroup.h

  1. 在Vehicle.h文件中声明FactGroup

  1. 在Vehicle.h文件中添加FactGrounp对应的Q_PROPERTY,在qml读取数据使用

  1. 在Vehicle.h文件中定义Q_PROPERTY对应的READ 函数

  1. 在Vehicle.h中定义FactGroup对应的FactGroupName

  1. 在Vehicle.cc中初始化FactGroupName

  1. 在Vehicle.cc中Vehicle类初始化部分添加FactGroup

  1. 在Vehicle.cc中_commonInit函数中添加_addFactGroup()

  1. 对FactGroup成员赋值

完成以上内容后即完成了FactGroup 的添加,就可以在显示页面进行数据显示了。同时添加FactGroup后程序会将数据保存,和其他FactGroup存储在csv中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运动无线耳机哪个品牌比较好、运动效果最好的运动耳机推荐

近几年&#xff0c;运动耳机愈发获得消费者的认可。它拥有着更牢固的佩戴方式&#xff0c;即便是长时间佩戴、也拥有更舒适的体验。因此&#xff0c;运动耳机也受到运动、健身人群的喜爱。但是不少小伙伴跟我反映如何选择一款体验出色的运动耳机&#xff0c;也成为了当前不少运…

计算机sci期刊拒稿两次,重新投稿接受的概率大吗? - 易智编译EaseEditing

重新投稿需要修改的幅度很大&#xff0c;而且就算能接受&#xff0c;时间也会非常久。 要是不着急用可以试试&#xff1a; 根据审稿意见一条条的来修改&#xff1b; 增加新的参考文献&#xff1b; 如果是“修改后重投”&#xff0c;可能需要注意以下问题&#xff1a; 1. 与…

数据可视化,2022A股正式收官,这么特别的一年,你挣钱了吗?

“A股年线止步三连阳&#xff01;深成指全年累计下跌25.85&#xff05;&#xff1b;创业板指全年累计下跌累计29.37&#xff05;&#xff1b;上证50指数累计下跌19.52&#xff05;&#xff1b;科创50指数累计下跌31.35&#xff05;。其中&#xff0c;创业板指、深成指仅跑赢俄罗…

循环神经网络-高级篇RNN Classifier

循环神经网络-高级篇RNN Classifier 本篇实现一个循环神经网络的分类器RNN Classifier 我们使用一个数据集包含Name&#xff0c;Country&#xff0c;其中名字有几千个&#xff0c;来自18个不同的国家&#xff0c;我们的目标是训练一个模型&#xff0c;可以实现输入一个名字&a…

cad绘图:AutoCAD 2023 中文

Autodesk AutoCAD 2023是计算机辅助设计(CAD)软件&#xff0c;是世界领先的2D和3D CAD工具。它将允许您使用其强大而灵活的功能来设计和塑造您周围的世界。在3D中加速文档制作&#xff0c;无缝地分享想法&#xff0c;更直观地探索想法。AutoCAD使用户能够从桌面、Web和移动设备…

http 模块

1、什么是 http 模块 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的http.createServer() 方法&#xff0c;就能方便的把一台普通的电脑&#xff0c;变成一台 Web 服务器&#xff0c;从而对外提供Web 资源服务。 如果要希望使用 http 模块…

Centos8/linux下载、安装、配置、连接MySQL5.7(rpm方式)

目录 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 下载&#xff1a; 安装&#xff1a; 配置&#xff1a; 连接&#xff1a; 拓展 问题现象&#xff1a; 今天在使用Centos8 安装MySQL5.7的rpm包时&#xff0c;出现如下报错&#xff1a; 仓库 "…

【ROS】—— ROS运行管理 ——元功能包与launch文件(八)

文章目录前言1. 元功能包1.1 应用场景1.2 概念1.3 实现2. ROS节点运行管理launch文件2.1 launch文件标签之launch2.2 launch文件标签之node2.3 launch文件标签之include2.4 launch文件标签之remap2.5 launch文件标签之param2.6 launch文件标签之rosparam2.7 launch文件标签之gr…

2023年伊凡最新整理简单方法之为hbuilderx配置node环境实现可npm install

本文优雅草伊凡投稿一颗优雅草科技&#xff0c;欢迎其他朋友们来投稿&#xff08;一定会详细署名&#xff09;&#xff0c;好直接开始&#xff0c;由于伊凡的电脑实在太卡了因此重装了一下系统所有环境全没了可能要一步步做环境了&#xff0c;后续可能会发关于flutter&#xff…

ModStartBlog v6.5.0 后台多页面升级,支持Laravel9

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装会…

DCDC直流非隔离负高电压输出电源模块12V24V转0-负50v/-150v/-200v/-250v/-300v/-400v/-500v

特点● 效率高达70%以上● 1*2英寸标准封装● 单电压负输出● 价格低● 电压控制,输出电压随控制电压变化线性变化● 工作温度: -40℃~85℃● 阻燃封装&#xff0c;满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输…

linux系统中C++的基本原理与实现

大家好&#xff0c;今天主要和大家分享一下&#xff0c;QT中进行C编程带来的优势和方便的地方&#xff0c;主要是为了更好的理解QT中C的语法&#xff0c;方便在QT中理解其中的内容。 目录 第一&#xff1a;C语言新特性 第二&#xff1a;C之命令空间namespace 第三&#xff1…

SQL基本操作

select 查询user表中的所有数据 select * from user查询user表中的所有username和password数据 select username,password from userinsert into 表名 (字段名,…) values (字段值,…) 在user表中插入username为tony stark|password为098123的数据 insert into user (usernam…

【关于C++中----继承】

文章目录一、继承的概念和意义二、基类和派生类对象复制转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承八、继承的总结和反思一、继承的概念和意义 继承(inheritance)机制是面向对象程序设计使代码可以复用…

【自学Java】Java语言数组

Java语言数组 Java语言数组教程 Java 语言 的数组是一个由固定长度的特定类型元素组成的集合。它们的数据类型必须相同&#xff0c;声明变量的时候&#xff0c;必须要指定参数类型。 Java语言数组定义 语法 数据类型 数组名[] null; //声明一个一维数组 数组名 new 数据…

连接直流开关的固态继电器

介绍 在基于MOSFET的继电器中&#xff0c;交流和直流信号都可以被切换。输出利用了两个n通道类型的mosfet。当控制交流负载时&#xff0c;其中一个MOSFET用于切换交流循环的正相&#xff0c;而另一个用于切换负相。当控制直流负载时&#xff0c;只需要一个MOSFET&#xff0c;…

第四十讲:神州防火墙的基本知识

一、认识防火墙的外观特征&#xff1a; DCFW-1800S-H-V2硬件防火墙属于神州数码DCFW-1800系列安全网关家族中的一员&#xff0c;外型尺寸为442mm240.7mm44.0mm&#xff0c;可以安装在19英寸标准机柜中使用&#xff0c;也可以独立卧式使用。 前面板介绍 DCFW-1800S-H-V2安全网…

How we redesigned the NSQ- 其他特性及未来计划

在系列文章前面几篇中&#xff0c;介绍了NSQ改造的过程和几个基础特性&#xff0c;本文中我们继续介绍几个高级特性及其使用场景&#xff0c;这些都是结合有赞业务场景总结提炼出来的重要功能。 NSQ拓展消息格式的设计 有赞中间件在NSQ中引入了支持拓展内容的消息格式&#x…

SAP 【ABAP】采购申请审批增强Demo <转载> (BADI : ME_REQ_POSTED )

原文链接&#xff1a;https://saper.blog.csdn.net/article/details/128121798?spm1001.2014.3001.5502 需求&#xff1a;将审批通过后的采购申请信息推送至外部系统。 分析&#xff1a;当前SAP中有外部系统调用自定义函数审批的情况&#xff0c;也有手动单个/批量审批的情况…

技术分享 | 新手如何调试 OceanBase

作者&#xff1a;郭奥门 爱可生 DBLE 研发成员&#xff0c;负责分布式数据库中间件的新功能开发&#xff0c;回答社区/客户/内部提出的一般性问题。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注…