由于最近项目可能需要对qgroundcontrol地面进行一个定制化开发,因此开始对QGC地面站软件增加一些新的功能。
由于我们需要将qgc地面站接收到的无人机MAVLink信息转发到我们的MQTT服务器上,因此需要在qgc地面站软件上增加消息转发到MQTT服务器上功能。
首先,第一步。在qgc的界面中添加一栏新的选项卡,用来配置消息流转到MQTT服务器的地址以及Topic。在打开的QGC源码中,参考MAVLink Forwarding的选项卡代码(qml代码) ,我在其下方增加了一个新的选项卡,用来配置MQTT服务器。
添加的qml代码如下:
SettingsGroupLayout {
Layout.fillWidth: true
heading: qsTr("MQTT Server")
FactCheckBoxSlider {
Layout.fillWidth: true
text: qsTr("Enable")
fact: _appSettings.mqttServer
visible: fact.visible
}
LabelledFactTextField {
Layout.fillWidth: true
textFieldPreferredWidth: ScreenTools.defaultFontPixelWidth * 20
label: qsTr("MqttServer name")
fact: _appSettings.mqttHostName
visible: fact.visible
enabled: _appSettings.mqttServer.rawValue
}
LabelledFactTextField {
Layout.fillWidth: true
textFieldPreferredWidth: ScreenTools.defaultFontPixelWidth * 20
label: qsTr("Topic")
fact: _appSettings.mqttTopic
visible: fact.visible
enabled: _appSettings.mqttServer.rawValue
}
}
上面的代码需要注意的地方是,_appSettings.mqttServer、_appSettings.mqttHostName、_appSettings.mqttTopic这三个值需要在App.SettingsGroup.json中添加。我添加的内容如下:
{
"name": "mqttServer",
"shortDesc": "Enable mqtt server",
"longDesc": "Enable mqtt server",
"type": "bool",
"default": false
},
{
"name": "mqttHostName",
"shortDesc": "Host name",
"longDesc": "Host name to mqtt server. i.e: localhost:14445",
"type": "string",
"default": "localhost:14445",
"qgcRebootRequired": true
},
{
"name": "mqttTopic",
"shortDesc": "Topic name",
"longDesc": "Topic name to mqtt server. i.e: /pubTopic",
"type": "string",
"default": "/pubTopic",
"qgcRebootRequired": true
},
这个文件是是一个配置文件,用于存储应用程序的设置。这个文件通常包含一组设置项,这些设置项可以被用户在QGC的用户界面中修改,并且可以在应用程序重启后保持不变。
这添加了配置文件后,还是需要在配置其他地方才可以正常使用的。同时还要在AppSettings.cc和AppSettings.h文件中添加引用代码。
在AppSettings.cc的代码中间添加如下代码:
DECLARE_SETTINGSFACT(AppSettings, mqttServer)
DECLARE_SETTINGSFACT(AppSettings, mqttHostName)
DECLARE_SETTINGSFACT(AppSettings, mqttTopic)
在AppSettings.h中
这样设置后,就可以在qml文件中访问这些值了。同时也可以在QGC中展示我需要的MQTT服务的选项卡。如下图所示: