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

运行结果

相关推荐
派阿喵搞电子3 小时前
在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
c++·qt·ubuntu·ui
C++ 老炮儿的技术栈4 小时前
UDP 与 TCP 的区别是什么?
开发语言·c++·windows·算法·visual studio
wgslucky4 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
whyeekkk4 小时前
python打卡第48天
开发语言·python
DougLiang5 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
mochensage5 小时前
CSP信奥赛C++常用系统函数汇总
c++·信奥
mochensage5 小时前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
fpcc5 小时前
跟我学c++中级篇——多线程中的文件处理
c++
全职计算机毕业设计6 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
5:006 小时前
云备份项目
linux·开发语言·c++