QGC地图页面添加数据显示
文章目录前言一、修改Vehicle.h二、修改Vehicle.cc三、添加json文件前言Ubuntu 18.04Qt5。13。2qgc 4。0在下图的页面处添加自己的数据显示一、修改Vehicle.h打开Vehicle.h仿照类VehicleVibrationFactGroup添加类SenserInfoFactGroup如下,类名和里面的成员可以根据自己需要修改class SenserInfoF
前言
Ubuntu 18.04
Qt5。13。2
qgc 4。0
在下图的页面处添加自己的数据显示
一、修改Vehicle.h
打开Vehicle.h
仿照类VehicleVibrationFactGroup
添加类TestInfoFactGroup
如下,类名和里面的成员可以根据自己需要修改
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; }
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;
};
如下图
在下图位置添加
Q_PROPERTY(FactGroup* testInfo READ testInfoFactGroup CONSTANT)
在下图位置添加
FactGroup* testInfoFactGroup () { return &_testInfoFactGroup; }
在下图位置添加mavlink接收处理函数
void _handleTestInfo (mavlink_message_t& message);
函数名可以自己定义
在下图位置实例化一个对象:
TestInfoFactGroup _testInfoFactGroup;
在下图位置添加:
static const char* _testInfoFactGroupName;
二、修改Vehicle.cc
在下图位置添加
const char* Vehicle::_testInfoFactGroupName = "testInfo";
在下图位置加上
, _testInfoFactGroup(this)
在下图位置加上
, _testInfoFactGroup(this)
在下图位置加上
_addFactGroup(&_testInfoFactGroup, _testInfoFactGroupName);
添加mavlink接收处理函数
将需要显示的数据解析并显示
在下图位置添加:
我这里直接借用的高度数据处理函数,显示高度数据,实际中具体根据需要显示的mavlink消息的msgid决定,可以是现成的,也可以是自定义的,case自己对应的msgid即可。
在下图位置添加:
_handleTestInfo(message);
实现消息处理函数
添加如下:
void Vehicle::_handleTestInfo(mavlink_message_t& message)
{
mavlink_altitude_t altitude;
mavlink_msg_altitude_decode(&message, &altitude);
if (!_globalPositionIntMessageAvailable) {
_testInfoFactGroup.test1()->setRawValue(altitude.altitude_relative);
if (!_gpsRawIntMessageAvailable) {
_testInfoFactGroup.test1()->setRawValue(altitude.altitude_amsl);
}
}
}
如下图
里面根据msgid调用解包函数,我这里直接复制的上面的解包函数,实际的根据msgid调整。setRawValue()里面即是要显示的值
仿照VehicleVibrationFactGroup
在下图位置添加如下:
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);
}
如图:
三、添加json文件
在src/Vehicle中添加TestInfoFact.json
内容如下:
[
{
"name": "test1", //程序中的名字
"shortDescription": "测试1",//页面中显示的名字
"type": "double", //类型
"decimalPlaces": 2, //小数点后几位
"units": "v" //单位
},
{
"name": "test2",
"shortDescription": "测试2",
"type": "double",
"decimalPlaces": 2,
"units": "v"
},
{
"name": "test3",
"shortDescription": "测试3",
"type": "double",
"decimalPlaces": 2,
"units": "v"
},
{
"name": "test4",
"shortDescription": "测试4",
"type": "uint32"
}
]
在qt上搜索并打开qgroundcontrol.qrc
点击下图“添加-》添加文件”添加json文件
选择之前建立的json文件并打开
设置其别名为:Vehicle/TestInfoFact.json
并回车
然后保存编译
插上飞控测试。
点击飞行视图的这个按钮
选中需要显示的数据并
正常的话“测试1”会显示高度数据,但是更新频率稍微慢一点

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)