写在前面
最近要学习了解一下Qgroundcontrol中所使用的一些与无人机载体通讯的一些方式,所以在这里记录一下学习的过程。
参考学习资源
QGroundControl用户指南
【无人机开发】通讯协议MavLink详解
MavLink 地面站QGC与飞控PX4/APM外挂设备的通信实现
MAVLink协议通信分析——(二)消息结构
MAVLink
通过 USB、遥测无线电或 WiFi 将车辆连接到地面站设备。
其中,MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)之间通讯,以及无人飞行器之间通讯最常用的协议。它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。
消息结构
发送消息
#define SYS_ID 2
#define COMP_ID 8
m_pkg_t pkg;
uint8_t data[sizeof(m_pkg_t)];
memcpy(data,&pkg,sizeof (m_pkg_t));
auto vehicles = qgcApp()->toolbox()->multiVehicleManager()->vehicles();
for(int i=0;i<vehicles->count();i++)
{
Vehicle* vehicle = qobject_cast<Vehicle*>((vehicles->get(i)));
if(vehicle==nullptr || !vehicle->parameterManager()->parametersReady())
continue;
mavlink_message_t msg;
mavlink_msg_serial_control_pack_chan(
SYS_ID,
COMP_ID,
vehicle->priorityLink()->mavlinkChannel(),
&msg,
SERIAL_CONTROL_DEV_ENUM_END,
HELMET_DATA_UP_FLAGE,
0,
0,
sizeof(m_pkg_t),
data);
vehicle->sendMessageOnLink(vehicle->priorityLink(), msg);
}
接收数据
参考MAVLINK_MSG_SERIAL_CONTROL消息在src/Vehicle/Vehicle.h中申明信号的函数根。
signals:
void mavlinkSerialControl(uint8_t device, uint8_t flags, uint16_t timeout, uint32_t baudrate, QByteArray data);
void rawSerialDataReceived(QByteArray data);
在src/Vehicle/Vehicle.cc中过滤MAVLINK_MSG_ID_RTX_UAV2GCS消息,并发射rawSerialDataReceived信号
case MAVLINK_MSG_ID_SERIAL_CONTROL:
{
mavlink_serial_control_t ser;
mavlink_msg_serial_control_decode(&message, &ser);
if(ser.device == SERIAL_CONTROL_DEV_ENUM_END)
{
emit rawSerialDataReceived(QByteArray(reinterpret_cast<const char*>(ser.data), ser.count));
}
else
{
emit mavlinkSerialControl(ser.device, ser.flags, ser.timeout, ser.baudrate, QByteArray(reinterpret_cast<const char*>(ser.data), ser.count));
}
}
在需要处理的位置连接信号完成消息接收处理
connect(_vehicle, &Vehicle::rawSerialDataReceived, this, &XXXX::_receiveData);
void XXXX::_receiveData(QByteArray data)
{
if(data.count()==)sizeof(m_pkg_t)
{
m_pkg_t pkg;
memcpy(&pkg,data.data(),sizeof(m_pkg_t));
}
}
还在学习中,未完待续~~~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)