QGC地面站二次开发(三)Qt 简洁地面站

目录

多机控制原理

多机控制实现

简洁地面站优化 

1. 飞机的飞行轨迹以不同的颜色区分

2. 控制所有的飞机

3. 将设定航线送给特定的飞机


多机控制原理

多机地面站支持 TCP、 UDP 和串口等三种连接方式,首先我们需要对这两种连接方式抽象出一个基类 LinkInterface,提供两个虚函数分别对应于数据接受和发送处理, 针对不同的连接方式实现 TCP、 UDP 和串口连接相对应的子类TCPLink、 UDPLink 和 SerialLink 并在该类中完成将输入写入 socket 和串口的操作。再实现一个 MAVLinkProtocol 类,它实现将所有接受到的数据统一汇总到MAVlink 的消息解析的接口中,实现消息的解包,每个飞机对应于唯一的system id,当出现不同的 system id 时,构造一个飞机类。该飞机 Vehicle 类实现对飞机的控制(如解锁、起飞、航点等操作)以及数据接受显示(如飞行轨迹绘制等等)。 这些多机通过 MultiVehicleManager 来多机的管理,其中多机管理中通过 activeVehicle 接口来选中当前活跃的飞机,进而实现对该飞机的单机控制。同样的,我们可以可以遍历连接的所有的飞机进而实现对所有飞机的控制
 

连接到多机构造的原理图
 

多机控制原理

多机控制实现

多机控制首先需要实现的是建立地面站和飞机之间的连接,将 TCP、 UDP 和串口通信抽象出一个LinkInterface 基类,实现父类 TCPLink、 UDPLink 和SerialLink 分别对应于 TCP、 UDP、 串口的数读入和写入操作。

接口 void _writeBytes(const QByteArray)
意义 将数据写入 TCP、 UDP 和串口等。
输入 const QByteArray 写入的字节流
输出
接口 void bytesReceived(LinkInterface* link, QByteArray data);
意义 将接受到的字节流通过信号发射出去
输入
LinkInterface* link  接受到数据的链接
QByteArray data 接受到的字节流

输出

将接受到的所有数据汇聚到 MAVLinkProtocol 的 receiveBytes 接口中进行通过MAVLink 的解析接口进行消息的解析。

接口 void receiveBytes(LinkInterface* link, QByteArray b)
意义 将地面站接受到的字节解析为 MAVlink 消息包,并通过信号
messageReceived(LinkInterface* link, mavlink_message_t
message)将解析出的 MAVLink 结构体发射出去。
输入
LinkInterface* link  接受到数据的链接
QByteArray data 接受到的字节流

输出

同时再 MAVLinkProtocol 解析到心跳包还会发射 vehicleHeartbeatInfo 信号,在MultiVehicleManager 类的的_vehicleHeartbeatIn

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chris_Brown

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值