PX4串口添加传感器—在QGC上添加串口数据显示

前言

因为项目要求,(在PX4上添加拉力传感器,并把数据显示在QGC的地图上),本人开始了苦皮的生活。从未接触飞控的我,一来就是开发。。烧脑掉发啊。。

但人生是无所畏惧的。在学习的路途中有幸遇见我的师傅,给了我极大地信心,虽然从未谋面,但热心,慷慨,睿智的身影历历在目,在他的博客里有很多知识,处处细心——老王机器人

学无止境,量心而行,持之以恒,心如磐石。

一、环境:

开发的源码版本:QGC版本4.2.3

源码编译,生成软件:QT编译套件5.15.2

开发平台:windows10

修改代码(很好用):

注:我的QGC开发是在windows上面的开发的,没有在ubuntu上面,在哪个系统上开发不影响,这只是桌子而已。而QGC版本和QT软件也只是碗而已,关键是碗里的菜(也就是修改后的东西)才是我们需要的。

环境搭建可以参考:windows下新版本QGC地面站环境搭建windows下新版本QGC地面站环境搭建

二、添加显示——修改QGC源码

可以参考:(27条消息) QGC4.1.6地图页面添加数据显示_老王机器人的博客-CSDN博客_qgc 地图

1、在下面目录添加TestInfoFactGroup.ccTestInfoFactGroup.h两个文件

PX4串口添加传感器—在QGC上添加串口数据显示_第1张图片

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);
  }
}

2、修改qgroundcontrol.pro文件

2.1添加.c文件地址

下图位置添加:

src/Vehicle/TestInfoFactGroup.cc \

PX4串口添加传感器—在QGC上添加串口数据显示_第2张图片

2.2添加.h文件地址

下图位置添加:

src/Vehicle/TestInfoFactGroup.h \

PX4串口添加传感器—在QGC上添加串口数据显示_第3张图片

 3修改vehicle.h文件

3.1添加我们定义的头文件。

下图位置添加:

#include "TestInfoFactGroup.h"

PX4串口添加传感器—在QGC上添加串口数据显示_第4张图片

 3.2关于显示的修改

下图位置添加:

    TestInfoFactGroup               _testInfoFactGroup;

注:添加的位置,要在 TerrainProtocolHandler* _terrainProtocolHandler = nullptr;下面,位置不对会报错

PX4串口添加传感器—在QGC上添加串口数据显示_第5张图片

3.3关于定义

下图位置添加:

static const char* _testInfoFactGroupName;

PX4串口添加传感器—在QGC上添加串口数据显示_第6张图片

3.4关于显示

下图位置添加:

FactGroup* testInfoFactGroup            () { return &_testInfoFactGroup; }

PX4串口添加传感器—在QGC上添加串口数据显示_第7张图片

3.5关于显示

 下图位置添加:

Q_PROPERTY(FactGroup*           testInfo        READ testInfoFactGroup         CONSTANT)

PX4串口添加传感器—在QGC上添加串口数据显示_第8张图片

 --4--修改Vehicle.cc

4.1 显示

下图位置添加:

const char* Vehicle::_testInfoFactGroupName =           "testInfo";

PX4串口添加传感器—在QGC上添加串口数据显示_第9张图片

4.2显示

 下图位置添加:

, _testInfoFactGroup            (this)

PX4串口添加传感器—在QGC上添加串口数据显示_第10张图片

4.3显示

 下图位置添加:

, _testInfoFactGroup                (this)

PX4串口添加传感器—在QGC上添加串口数据显示_第11张图片

4.4显示

 下图位置添加:

_addFactGroup(&_testInfoFactGroup,          _testInfoFactGroupName);

PX4串口添加传感器—在QGC上添加串口数据显示_第12张图片

5添加.json文件

5.1在srv/vehicle中创建TestInfoFact.json文件

如下图:

PX4串口添加传感器—在QGC上添加串口数据显示_第13张图片

 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

PX4串口添加传感器—在QGC上添加串口数据显示_第14张图片

6.2把刚刚创建的TestInfoFact.json添加到编译目录去

PX4串口添加传感器—在QGC上添加串口数据显示_第15张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第16张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第17张图片

Vehicle/TestInfoFact.json

然后点击文件——保存——编译

注:第一次编译可能会报错,这个时候,重新进入QT,再次编译。如果报错是警告,不用管。

7验证结果

PX4串口添加传感器—在QGC上添加串口数据显示_第18张图片

如果 编译成功会有很多文件

 ​PX4串口添加传感器—在QGC上添加串口数据显示_第19张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第20张图片

 

看到下面的黑方块没

PX4串口添加传感器—在QGC上添加串口数据显示_第21张图片

PX4串口添加传感器—在QGC上添加串口数据显示_第22张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第23张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第24张图片

 PX4串口添加传感器—在QGC上添加串口数据显示_第25张图片

 最终结果如下

PX4串口添加传感器—在QGC上添加串口数据显示_第26张图片

好了这一步(QGC上面添加显示)算是完成了。

但是问题是怎么去它诶,让测试1234有数据显示?

8使用方法

8.1 修改区域

PX4串口添加传感器—在QGC上添加串口数据显示_第27张图片

8.2 保存-编译-结果

没有加上PX4飞控,就会出现下面的页面

PX4串口添加传感器—在QGC上添加串口数据显示_第28张图片

 接上飞控后显示如下:

PX4串口添加传感器—在QGC上添加串口数据显示_第29张图片

你可能感兴趣的:(PX4二次开发,qt,开发语言)