Windows下搭建MavLink通信协议环境,并用C++程序测试

搭建环境

git克隆

shell 复制代码
git clone https://github.com/mavlink/mavlink.git --recursive

安装python的future库

shell 复制代码
pip install future

使用可视化工具生成mavlink库

  • XML是选择消息格式,也可以自定义
  • Out是输出路径
  • Language是生成的语言,我这里是C++
  • Protocol是协议版本
    点击generate生成对应的头文件。

测试

MavLinkLibrary

是刚才生成的mavlink库

CMakeLists.txt

python 复制代码
cmake_minimum_required(VERSION 3.15)
project(MAVLINKTEST)
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread -g")
# 当前cmakelist文件所在的目录
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
# 项目cmakelist文件所在的目录
message(STATUS "CMAKE_SOURCE_DIR: " ${CMAKE_SOURCE_DIR})

# 添加include文件
set(MAVLINK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/MavLinkLibrary)

include_directories(${MAVLINK_INCLUDE_DIRS})

add_executable(test test.cpp)

test.cpp

cpp 复制代码
 
#include "MavLinkLibrary/common/mavlink.h"
#include "MavLinkLibrary/common/mavlink_msg_local_position_ned.h"
#include "MavLinkLibrary/common/mavlink_msg_sys_status.h"
#include<iostream>
using namespace std;
#define BUFFER_LENGTH                                                          \
  2041 // minimum buffer size that can be used with qnx (I don't know why)
 
int main(int argc, char *argv[]) {
 
  mavlink_system_t mavlink_system = {
      1, // System ID (1-255)
      1  // Component ID (a MAV_COMPONENT value)
  };
  char help[] = "--help";
 
  char target_ip[100];
 
  float position[6] = {};
 
  uint8_t buf[BUFFER_LENGTH];
  ssize_t recsize;
  // socklen_t fromlen = sizeof(gcAddr);
  int bytes_sent;
  mavlink_message_t msg2;
 
  // mavlink_message_t msg;
  mavlink_status_t status;
 
  uint16_t len;
  int i = 0;
  unsigned int temp = 0;
  {
    mavlink_msg_local_position_ned_pack(1, 200, &msg2, 123, 2, 33, 35, 43, 52,
                                        62);
    len = mavlink_msg_to_send_buffer(buf, &msg2);
    if(len){
        std::cout<<"message send success!"<<endl;
    }
    for (i = 0; i < len; i++)
      printf("%x ", buf[i]);
    printf("\n--------------------------------------------------------\n");
    mavlink_message_t msg;
    for (i = 0; i < len; i++) {
      temp = buf[i];
      printf("%02x ", (unsigned char)temp);
      if (mavlink_parse_char(12, buf[i], &msg, &status)) {
        // Packet received
        printf("\nReceived --packet: SYS: %d, COMP: %d, LEN: %d, MSG ID: %d\n",
               msg.sysid, msg.compid, msg.len, msg.msgid);
        if (msg.msgid == 32) {
          mavlink_local_position_ned_t local_position_ned;
          mavlink_msg_local_position_ned_decode(&msg, &local_position_ned);
          printf("ned x %f, y%f, z%f\nned vx %f, vy%f, vz%f\n",
                 local_position_ned.x, local_position_ned.y,
                 local_position_ned.z, local_position_ned.vx,
                 local_position_ned.vy, local_position_ned.vz);
        }
      }
    }
 
  }
}

编译

shell 复制代码
mkdir build
shell 复制代码
cd build
shell 复制代码
cmake .. -G "MinGW Makefiles"
shell 复制代码
mingw32-make.exe

运行结果

相关推荐
苹果酱05678 分钟前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
Eoneanyna9 分钟前
QT设置git仓库
开发语言·git·qt
shuxianshrng11 分钟前
大气网格化精细化监管监测系统
大数据·服务器·windows·经验分享
小鹿( ﹡ˆoˆ﹡ )14 分钟前
Python中的树与图:构建复杂数据结构的艺术
开发语言·python
qmx_0717 分钟前
MFC-基础架构
c++·mfc
万象.18 分钟前
STL_vector实现及干货以及vector迭代器失效问题
c++
想变成自大狂20 分钟前
C++中的异构容器
开发语言·c++
qq_1728055920 分钟前
GO GIN 推荐的库
开发语言·golang·gin
小米里的大麦23 分钟前
【C++】深入理解引用:从基础到进阶详解
c++·经验分享·笔记·引用·引用和指针
friklogff27 分钟前
【C#生态园】构建你的C#操作系统:框架选择与实践
服务器·开发语言·c#