6003.mavlink协议自定义消息编程

mavlink 自定义消息编程

 紧接着上一篇的操作方法,根据自定义的xml生成基于mavlink协议形式的消息。将其添加到工程中,并且调用起来的示例demo
 
 代码如下:
  • 将生成自定义消息目录拷贝到工程下
#include <iostream>
#include <mavlink.h>
#include <string>
//#include "SerialPort.hpp"

using namespace std;

int main(int argc , char * argv[]) {
    std::cout << "Hello mavlink !" << std::endl;

    uint8_t system_id = 1;
    uint8_t component_id = 1;

    //定义mavlink标准消息结构体
    mavlink_message_t msg;
    uint8_t buffer[MAVLINK_MAX_PACKET_LEN] = {};

    //上传航线包,初始化信息1
    mavlink_upload_route_t packet_in = {
            963497464,963497672,963497880,1,1
    };

    //上传航线包,初始化信息2
    mavlink_upload_route_t packet1, packet2;
    memset(&packet1, 0, sizeof(packet1));
    packet1.lon = packet_in.lon;
    packet1.lat = packet_in.lat;
    packet1.alt = packet_in.alt;
    packet1.route_id = packet_in.route_id;
    packet1.point_id = packet_in.point_id;

    memset(&packet2, 0, sizeof(packet2));

    //将packet1 打包成 msg 格式, 加上mavlink协议头. 编码
    mavlink_msg_upload_route_encode(system_id, component_id, &msg, &packet1);

    //将mavlink协议包转换为自定义消息包, 解码
    mavlink_msg_upload_route_decode(&msg, &packet2);
    MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);

    //输出packet2
    cout << "route_id:" << to_string(packet2.route_id)  << " point_id:" << to_string(packet2.point_id) << " lon:" << packet2.lon << " lat:" << packet2.lat << " alt:" << packet2.alt << endl;

    //将标准协议格式包转换成buffer字节流形式存储在数组中,准备好进行发送,可以通过串口或者网络
    mavlink_msg_to_send_buffer(buffer, &msg);

    //输出buffer与协议表进行对比.
    for (int j = 0; j < MAVLINK_MAX_PACKET_LEN; ++j) {
        printf("%x ", buffer[j]);
        if(j!=0  && j%100 == 0){
            putchar(10);
        }
    }
    putchar(10);

   //程序输出数据如下,f4,b8即为校验码 
   //fd e 0 0 0 1 1 c 0 0 f8 cd 6d 39 c8 ce 6d 39 98 cf 6d 39 1 1 f4 b8

    //1 如果是网络发送,参考此形式进行发送即可.当然这之前需要一些网络初始化代码,本文略.
    //bytes_sent = sendto(sock, buf, len, 0, (struct sockaddr*)&gcAddr, sizeof (struct sockaddr_in));

    //2 如果是串口发送,那么采用以下形式即可.
    //write() 写串口即可
    
    return 0;
}

  • mavlink协议帧
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章