1、实现思路
- 首先在通过前端页面的按钮或其他控件出发后端函数
- 其次后端函数应该获取已连接所有载具对象
- 再调用载具对象类对飞行模式设置的函数
- 返回切换结果(根据情况添加)
2、多机控制
2.1 QGC源码多机管理
在源码中有MultiVehicleManager这个类,负责管理多架载具的对象,其中声明了私有属性_vehicles来存放多架载具的类对象。可以通过循环的方式获取载具对象,进行相应的控制。
2.2 QGC载具控制
在源码中Vehicle类管理了一架载具的所有数据、以及相应的指令控制。其中包括设置飞行模式函数setFlightMode()。
2.3QGC前端页面
在源码FlightDisplayView.qml文件中,以及将多机载具控制对象MultiVehicleManager注册到前端页面,我们只需要使用Q_INVOKABLE关键字,即可在前端出发多机控制的函数。
3、实现代码
3.1 MultiVehicleManager.h
class MultiVehicleManager : public QGCTool
{
Q_OBJECT
public:
MultiVehicleManager(QGCApplication* app, QGCToolbox* toolbox);
/*一键切换增稳*/
Q_INVOKABLE void allToStabilized();
}
3.2 MultiVehicleManager.cc
void MultiVehicleManager::allToStabilized()
{
/*遍历_vehicles列表*/
for (int i=0; i< _vehicles.count(); i++) {
Vehicle* vehicle = qobject_cast<Vehicle*>(_vehicles[i]);
/*调用vehicle->setFlightMode函数*/
vehicle->setFlightMode(tr("Stabilized"));
}
}
3.3 FlightDisplayView.qml
{
name: qsTr("一键增稳"),
iconSource: "/res/action.svg",
buttonVisible: _anyActionAvailable,
action: -2
}
onClicked: {
if(index === 0) {
checklistDropPanel.open()
} else {
guidedActionsController.closeAll()
var action = model[index].action
if (action === -1) {
guidedActionList.model = _actionModel
guidedActionList.visible = true
} else if(action === -2)
{
QGroundControl.multiVehicleManager.vehicles.allToStabilized()
}
else {
_guidedController.confirmAction(action)
}
}
}