文章目录
- 前言
- 一、使用步骤
前言
qgc版本:4.1.16
QT编译套件:5.13.2
ubuntu 18.04
一、使用步骤
在下面目录添加TestInfoFactGroup.cc
和TestInfoFactGroup.h
两个文件
在TestInfoFactGroup.h
中添加如下:
#pragma once
#include "FactGroup.h"
#include "QGCMAVLink.h"
class TestInfoFactGroup : public FactGroup
{
Q_OBJECT
public:
TestInfoFactGroup(QObject* parent = nullptr);
Q_PROPERTY(Fact* test1 READ test1 CONSTANT)
Q_PROPERTY(Fact* test2 READ test2 CONSTANT)
Q_PROPERTY(Fact* test3 READ test3 CONSTANT)
Q_PROPERTY(Fact* test4 READ test4 CONSTANT)
Fact* test1 () { return &_test1Fact; }
Fact* test2 () { return &_test2Fact; }
Fact* test3 () { return &_test3Fact; }
Fact* test4 () { return &_test4Fact; }
// Overrides from FactGroup
void handleMessage(Vehicle* vehicle,mavlink_message_t& message) override;
static const char* _test1FactName;
static const char* _test2FactName;
static const char* _test3FactName;
static const char* _test4FactName;
private:
Fact _test1Fact;
Fact _test2Fact;
Fact _test3Fact;
Fact _test4Fact;
};
在TestInfoFactGroup.cc
中添加如下:
#include "TestInfoFactGroup.h"
#include "Vehicle.h"
const char* TestInfoFactGroup::_test1FactName = "test1";
const char* TestInfoFactGroup::_test2FactName = "test2";
const char* TestInfoFactGroup::_test3FactName = "test3";
const char* TestInfoFactGroup::_test4FactName = "test4";
TestInfoFactGroup::TestInfoFactGroup(QObject* parent)
: FactGroup(1000, ":/json/Vehicle/TestInfoFact.json", parent)
, _test1Fact (0, _test1FactName, FactMetaData::valueTypeDouble)
, _test2Fact (0, _test2FactName, FactMetaData::valueTypeDouble)
, _test3Fact (0, _test3FactName, FactMetaData::valueTypeDouble)
, _test4Fact (0, _test4FactName, FactMetaData::valueTypeUint32)
{
_addFact(&_test1Fact, _test1FactName);
_addFact(&_test2Fact, _test2FactName);
_addFact(&_test3Fact, _test3FactName);
_addFact(&_test4Fact, _test4FactName);
// Start out as not available "--.--"
_test1Fact.setRawValue(qQNaN());
_test2Fact.setRawValue(qQNaN());
_test3Fact.setRawValue(qQNaN());
_test4Fact.setRawValue(qQNaN());
}
void TestInfoFactGroup::handleMessage(Vehicle*, mavlink_message_t& message)
{
if (message.msgid != MAVLINK_MSG_ID_ALTITUDE) {
return;
}
mavlink_altitude_t altitude;
mavlink_msg_altitude_decode(&message, &altitude);
test1()->setRawValue(altitude.altitude_relative);
_setTelemetryAvailable(true);
}
在qgroundcontrol.pro
中添加头文件和cc文件
在下图位置加上src/Vehicle/TestInfoFactGroup.h \
在下图位置加上:src/Vehicle/TestInfoFactGroup.cc \
修改Vehicle.h
在下面位置添加
#include "TestInfoFactGroup.h"
在下面位置加上
;
注意添加的位置,位置不对会报错
在下面位置加上
static const char* _testInfoFactGroupName;
在下面位置加上
FactGroup* testInfoFactGroup () { return &_testInfoFactGroup; }
在下面位置加上
Q_PROPERTY(FactGroup* testInfo READ testInfoFactGroup CONSTANT)
修改Vehicle.cc
在下面位置加上
const char* Vehicle::_testInfoFactGroupName = "testInfo";
在下面位置加上
, _testInfoFactGroup (this)
在下面位置加上
, _testInfoFactGroup (this)
在下面位置加上
_addFactGroup(&_testInfoFactGroup, _testInfoFactGroupName);
添加JSON文件
在srv/vehicle
中添加TestInfoFact.json
内容如下:
{
"version": 1,
"fileType": "FactMetaData",
"QGC.MetaData.Facts":
[
{
"name": "test1",
"shortDesc": "测试1",
"type": "double",
"decimalPlaces": 2,
"units": "v"
},
{
"name": "test2",
"shortDesc": "测试2",
"type": "double",
"decimalPlaces": 2,
"units": "v"
},
{
"name": "test3",
"shortDesc": "测试3",
"type": "double",
"decimalPlaces": 2,
"units": "v"
},
{
"name": "test4",
"shortDesc": "测试4",
"type": "uint32"
}
]
}
其中 “name”:对应程序中的名字
“shortDesc”: 对应页面中显示的名字
“type”: 对应类型
“decimalPlaces”: 对应小数点后几位
“units”: 对应单位
在qt上搜索并打开`qgroundcontrol.qrc`
点击下图“添加-》添加文件”添加json文件
选择之前建立的json文件并打开
设置其别名为:Vehicle/TestInfoFact.json
并回车
然后保存编译
插上飞控测试。
在飞行地图页面下方点击一个数字,设置为TestInfo的Test1,然后点击Close
正常的话会出现测试1
,其值和高度相同,精度为小数点后两位