Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class AbstractMav: public QObject
{
Q_OBJECT
public:
AbstractMav(QObject* parent = nullptr, AbstractLink* link);
public slots:
void sendHeartbeat(unit8_t compid);
void arm();
void disarm();
...
signals:
void messageReady(const mavlink_message_t& message, const AbstractLink* link);
void heartheatReceived(unit8_t compid);
void imuReceived(unit8_t compid, uint64_t timestamp,
const QVector3D& accel, const QVector3D& gyro, const QVector3D& mag,
double pressure, double temperature);
...
private slots:
void processMessage(const mavlink_message_t& message);
private:
void commandLong(uint8_t compid,
uint16_t command,
uint8_t confirmation,
float param1, float param2, float param3, float param4,
float param5, float param6, float param7 );
...
uint8_t m_sysid;
AbstractLink* m_link;
};
void AbstractMav::processMessage(const mavlink_message_t& message) {
if (message.sysid != m_sysid) {
return;
}
switch(message.msgid) {
case MAVLINK_MSG_ID_HEARTBEAT: {
emit heartheatReceived(message.compid);
break;
}
case MAVLINK_MSG_ID_HIGHRES_IMU: {
...
}
}
}
void AbstractMav::sendHeartbeat(unit8_t compid) {
mavlink_message_t message;
mavlink_heartbeat_t heartbeat;
mavlink_msg_heartbeat_encode(m_sysd, compid, &message, &heartbeat);
emit messageReady(message, m_link)
}
if (message.sysid != m_sysid) {
return;
}
void HeartbeatHandler::processMessage(const mavlink_message_t& message)
{
if (message.msgid != MAVLINK_MSG_ID_HEARTBEAT) return;
Vehicle* vehicle = m_vehicleService->requestVehicle(message.sysid);
mavlink_heartbeat_t heartbeat;
mavlink_msg_heartbeat_decode(&message, &heartbeat);
vehicle->setType(::vehicleTypeFromMavLinkType(heartbeat.type));
vehicle->setState(::vehicleStateFromMavLinkSystemStatus(heartbeat.system_status));
// ...
}
Сейчас уже лучше писать про версию 2.0, т.к. она совместима с 1.0 (выбирается через флаги).
2.0 уже поддерживается APM'ом и PX4. QGC пока в процессе перехода.
И еще, генератор поддерживает куда больше языков: Java, JavaScript, C#, Python, Object C, Swift.
А для C++ мне надоели неудобства C-lib и я написал C++11 генератор (вот только не знаю когда замержат).
Не уверен, что APM 2.6 (что на atmega) уже поддерживает, проверь свежайшую прошивку.
https://github.com/mavlink/mavlink/tree/mavlink2-cxx11 но его нужно теперь переносить в pymavlink и слить в 3-4 коммита.
del
Разбираемся в MAVLink. Часть 1