因为项目要求,(在PX4上添加拉力传感器,并把数据显示在QGC的地图上),本人开始了苦皮的生活。从未接触飞控的我,一来就是开发。。烧脑掉发啊。。
但人生是无所畏惧的。在学习的路途中有幸遇见我的师傅,给了我极大地信心,虽然从未谋面,但热心,慷慨,睿智的身影历历在目,在他的博客里有很多知识,处处细心——老王机器人
学无止境,量心而行,持之以恒,心如磐石。
开发的源码版本:QGC版本4.2.3
源码编译,生成软件:QT编译套件5.15.2
开发平台:windows10
注:我的QGC开发是在windows上面的开发的,没有在ubuntu上面,在哪个系统上开发不影响,这只是桌子而已。而QGC版本和QT软件也只是碗而已,关键是碗里的菜(也就是修改后的东西)才是我们需要的。
环境搭建可以参考:windows下新版本QGC地面站环境搭建windows下新版本QGC地面站环境搭建
可以参考:(27条消息) QGC4.1.6地图页面添加数据显示_老王机器人的博客-CSDN博客_qgc 地图
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 _mavlinkMessageReceived(LinkInterface* link, mavlink_message_t message)
void TestInfoFactGroup::handleMessage(Vehicle*, mavlink_message_t& message)
{
test3()->setRawValue(1805);
test4()->setRawValue(2640);
if (message.msgid == MAVLINK_MSG_ID_ALTITUDE)
{
mavlink_altitude_t altitude;
mavlink_msg_altitude_decode(&message, &altitude);
test1()->setRawValue(altitude.altitude_relative);
test2()->setRawValue(99);
}
}
qgroundcontrol.pro文件
下图位置添加:
src/Vehicle/TestInfoFactGroup.cc \
下图位置添加:
src/Vehicle/TestInfoFactGroup.h \
3.1添加我们定义的头文件。
下图位置添加:
#include "TestInfoFactGroup.h"
3.2关于显示的修改
下图位置添加:
TestInfoFactGroup _testInfoFactGroup;
注:添加的位置,要在 TerrainProtocolHandler* _terrainProtocolHandler = nullptr;
下面,位置不对会报错
3.3关于定义
下图位置添加:
static const char* _testInfoFactGroupName;
3.4关于显示
下图位置添加:
FactGroup* testInfoFactGroup () { return &_testInfoFactGroup; }
3.5关于显示
下图位置添加:
Q_PROPERTY(FactGroup* testInfo READ testInfoFactGroup CONSTANT)
--4--修改Vehicle.cc
4.1 显示
下图位置添加:
const char* Vehicle::_testInfoFactGroupName = "testInfo";
4.2显示
下图位置添加:
, _testInfoFactGroup (this)
4.3显示
下图位置添加:
, _testInfoFactGroup (this)
4.4显示
下图位置添加:
_addFactGroup(&_testInfoFactGroup, _testInfoFactGroupName);
5添加.json文件
5.1在srv/vehicle
中创建TestInfoFact.json文件
如下图:
5.2添加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”: 对应单位
6在QT的编译目录上添加编译文件
6.1在QT上搜索并打开qgroundcontrol.qrc
6.2把刚刚创建的TestInfoFact.json添加到编译目录去
Vehicle/TestInfoFact.json
然后点击文件——保存——编译
注:第一次编译可能会报错,这个时候,重新进入QT,再次编译。如果报错是警告,不用管。
7验证结果
如果 编译成功会有很多文件
看到下面的黑方块没
最终结果如下
好了这一步(QGC上面添加显示)算是完成了。
但是问题是怎么去它诶,让测试1234有数据显示?
8.1 修改区域
8.2 保存-编译-结果
没有加上PX4飞控,就会出现下面的页面
接上飞控后显示如下: