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協議幀
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章