MavLink简单使用

2023-05-16

参考连接: https://mavlink.io/zh/

整体说明

本文不探究mavlink协议的具体内容,只说明如何简单使用。环境: win10 c/c++

MAVLink仓库clone

我们其实clone的是一个工具,此工具可以帮我们把定义文件转成代码。发送端和接收端使用相同的代码,对数据进行打包和解包。

使用命令行:
git clone https://github.com/mavlink/mavlink.git --recursive

或者小乌龟:
在这里插入图片描述

定义文件在:mavlink\message_definitions\v1.0文件夹下。打开test.xml,看看内容,应该就知道怎么写定义文件了。

在这里插入图片描述

如何打开这个工具?

此工具是用Python写的,所以需要安装python,我们去官网下载最新的即可。官网

安装时,需要把python加入到环境变量(勾选下图红框选项)。默认安装即可(Install Now)
在这里插入图片描述

安装python的future模块
用命令行安装
在这里插入图片描述
鼠标双击mavlink\mavgenerate.py文件,工具就打开了。
在这里插入图片描述

如何使用这个工具?

首先需要选择一个定义文件。
本例中,将mavlink\message_definitions\v1.0\test.xml复制一份重命名为mavlinktest.xml。

在这里插入图片描述
用记事本打开,将消息的名字改成MY_MAV。其它内容不变。要注意的是:定义文件中定义的数组长度都是3。写代码的时候得保持一致。
在这里插入图片描述

然后使用工具将这份定义文件变成代码。
在这里插入图片描述
生成的文件如下图所示。实际应用时,将生成的文件放到工程里,并包含一个头文件#include “mavlinktest/mavlink.h”。
从生成文件可以得知:mavlinktest文件夹的名字是定义文件的名字。
在这里插入图片描述

简单的代码示例

用vs2019新建一个控制台应用程序MavlinkTest。将生成的代码复制到工程里去。目录结构如下
在这里插入图片描述
主函数如下

// MavlinkTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

#include "mavlinktest/mavlink.h"

int main() {
  /*发送方:*/
  // 第一步,打包msg
  mavlink_message_t msg;
  // 数组的长度是在定义文件里定义的
  uint8_t uint8_t_array[3] = {0, 1, 2}; 
  uint16_t uint16_t_array[3] = {0, 1, 2};
  uint32_t uint32_t_array[3] = {0, 1, 2};
  uint64_t uint64_t_array[3] = {0, 1, 2};
  int8_t int8_t_array[3] = {0, 1, 2};
  int16_t int16_t_array[3] = {0, 1, 2};
  int32_t int32_t_array[3] = {0, 1, 2};
  int64_t int64_t_array[3] = {0, 1, 2};
  float float_array[3] = {0, 1, 2};
  double double_array[3] = {0, 1, 2};
  // 可代替的函数 mavlink_msg_my_mav_pack 或 mavlink_msg_my_mav_encode_chan
  mavlink_msg_my_mav_pack_chan(
      0, 0, 0, &msg, 'a', "hello world!", 1, 1, 1, 1,
      1, 1, 1, 1, 1.1, 1.1, uint8_t_array,
      uint16_t_array, uint32_t_array, uint64_t_array,
      int8_t_array, int16_t_array, int32_t_array,
      int64_t_array, float_array, double_array);

  // 第二步,将msg转成uint8_t的数组,注意数组的长度一定要够长
  uint8_t buf[512] = {0};
  uint16_t rlen = mavlink_msg_to_send_buffer(buf, &msg);

  // 第三步,通过网口、串口等其它的方式发送数组
  // ...................



  /*接收方:*/
  //第一步,通过网口、串口等其它的方式将接收到的数据转成uint8_t[]
  // ...................

  // 第二步,逐字符解析
  for (int i = 0; i < rlen; i++) {
    mavlink_status_t rstatus;
    mavlink_message_t rmsg;
    //解析的状态, 在解析出问题时可以根据这个状态进行问题的跟踪
    // std::cout << rstatus.parse_state;
    if (mavlink_parse_char(0, (uint8_t)(buf[i]), &rmsg, &rstatus) == 1) {
      switch (rmsg.msgid) {
        case MAVLINK_MSG_ID_MY_MAV:
          mavlink_my_mav_t my_mav;
          mavlink_msg_my_mav_decode(&rmsg, &my_mav);
          std::cout << my_mav.c;
          break;
        default:
          break;
      }
    }
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MavLink简单使用 的相关文章

  • Win10系统下安装CAA二次开发程序,VS界面上不出现CAA菜单栏或菜单栏为灰色的

    问题描述 xff1a Win10系统下安装了CATIA CAA V5R19和V4R24两个版本 xff0c 其中V5R19版本安装完成后VS2005中没有出现CAA菜单栏 xff0c V5R24安装完成后VS2008中出现部分集成菜单且为灰
  • 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一 内网透传即内网映射 xff0c 内网IP端口映射外网连接访问过程的实现 内网透传通信实现过程又有以下几种区别 xff1a 1 xff09 路由器映射 适合自己本地路由有公网IP网络环境 xff0
  • RoboCup智能机器人足球教程(二)

    RoboCup智能机器人足球教程 xff08 二 xff09 运行方式 RoboCup2D仿真平台通过一个服务端 xff0c 若干客户端联系而成 xff0c 同时通过监视器进行画面播放 当启动服务端后 xff0c 客户端通过改写程序内部的c
  • RoboCup智能机器人足球教程(三)

    RoboCup智能机器人足球教程 xff08 三 xff09 实现守门员代码 守门员逻辑实现比较容易 xff0c 但是最好开始的时候画好流程图 xff0c 理顺逻辑 xff0c 守门员一直盯着球 xff0c 当球距离守门员够近的时候 xff
  • 嵌入式工作一年总结

    其实这是去年2017年11月份写的 xff0c 现在想把这个发出来 xff0c 为后来的同学或者迷茫的一些同学的一些建议吧 xff01 刚入行回忆 刚开始进入公司的能力很差 xff0c 可以说什么都不会吧 xff0c wifi拼成wife
  • CVPR 2019 | 旷视研究院提出新型损失函数:改善边界框模糊问题

    全球计算机视觉三大顶会之一 CVPR 2019 xff08 IEEE Conference on Computer Visionand Pattern Recognition xff09 将于 6 月 16 20 在美国洛杉矶如期而至 届时
  • ros中使用opencv处理图像

    cv bridge toCvCopy xff1a ROS下的sensor msgs ImageConstPtr xff0c 和图像压缩类型 xff08 例如 xff1a sensor msgs image encodings RGB8 xf
  • PX4飞行日志分析与.ulg文件格式转换

    文章目录 一 FlightPlot安装及使用二 ulg文件格式转换 xff08 windows环境 xff09 一 FlightPlot安装及使用 span class token number 1 span xff09 下载FlightP
  • 【深入理解Java虚拟机 笔记】Java的类加载过程

    类加载的过程如下图所示 xff1a 一 加载阶段 注意 xff1a 这里的 加载 阶段是整个 类加载 过程的一个阶段 xff0c 两个词的含义是不一样的 这个阶段主要做3件事 xff1a 1 通过类的全限定名获取二进制字节流 xff1b 2
  • 【深入理解Java虚拟机 笔记】垃圾回收算法

    前言 当前垃圾回收集器大多都是遵循分代收集理论进行设计的 xff0c 先聊聊什么是分代收集 xff1a xff08 1 xff09 弱分代假说 xff1a 绝大多数对象都是朝生夕灭的 xff1b xff08 2 xff09 强分代假说 xf
  • 【日记 2021-05-01】 leetcode练习&& Linux修改文件权限

    题目 xff1a 1335 工作计划的最低难度 题目内容 xff1a 你需要制定一份 d 天的工作计划表 工作之间存在依赖 xff0c 要想执行第 i 项工作 xff0c 你必须完成全部 j 项工作 xff08 0 lt 61 j lt i
  • 【Leetcode 刷题笔记】16. 3Sum Closest

    题目 方案一 xff1a 穷举法 o n 3 span class token keyword class span span class token class name Solution span span class token pu
  • 【Debugging】SpringSecurity iframe 页面不显示

    问题描述 如下图所示 xff0c 配置了SpringSecurity后 xff0c 网页就加载不出来了 xff0c 多次检查代码都没有问题 xff0c 折腾了好久 xff01 xff01 xff01 解决方案 在SpringSecurity
  • 【日记 2021-05-14】树莓派获取环境亮度(光照度)

    什么是亮度 xff1f 光照度指被照射物体单位面积上所接受可见光的光通量 xff0c 单位是勒克斯 Lux 或流明每平方米 lm m2 xff0c 是用来描述光的亮度的 我们平时最关心的我家灯到底够不够亮 xff0c 具体数值可以用照度计测
  • 【Java】语法糖

    什么是语法糖 xff1f 语法糖就是指 java 编译器把 java 源码编译为 class 字节码的过程中 xff0c 自动生成和转换的一些代码 有哪些语法糖 xff1f 默认构造函数 xff1a 当一个类没有显式的提供构造函数时 xff
  • 【Java多线程】FutureTask的使用示例

    炎热的夏天 xff0c 一位少侠到客栈吃杯茶 xff0c 客栈准备茶水有如下两种方式 xff1a 单线程 先擦桌子 xff0c 花费3秒 xff1b 再准备茶水 xff0c 花费3秒 xff1b 共花费6秒 xff01 多线程 擦桌子和准备
  • 旷视研究院博士图鉴|Be that challenger

    图为旷视研究院日常工作一景 旷视研究院有这样一批挑战者 他们是 PhD xff0c 更是 Researcher 他们 深入探索科技发展的前沿阵地 笃信自己的科研价值 渴望见证一行行代码的快速落地 期待与同样优秀的人碰撞思维 做自己所爱的事
  • 【Java多线程】CompletableFuture的使用示例

    刘备 关羽和张飞三兄弟在家吧喝酒 xff0c 突然发现忘带钱了 xff0c 于是差下人回去取钱 为了不影响三兄弟喝酒的气氛 xff0c 刘备吩咐下人钱取来后交给旁边侍候的赵云即可 span class token keyword publi
  • 【Java基础】Arrays.sort()使用示例

    狗有名字 体重和年龄3个属性 xff1a span class token keyword public span span class token keyword class span span class token class nam
  • 【Spring】aop的使用示例

    场景 去饭店吃饭的时候 xff0c 在进入饭店时门卫会为你开门 xff0c 并问候说 欢迎光临 xff0c 当你吃完离开时 xff0c 门卫会说 请慢走 xff0c 欢迎下次光临 此场景下涉及如下两个角色 xff1a 顾客 xff08 cu

随机推荐

  • 关于从Github上下载历史版本

    第一步 打开一个仓库 xff0c 可以看到此时在主分支下 xff0c 点击1位置查看历史版本 第二步 现在可以查看到所有的版本 xff08 提交 xff09 信息 xff0c 单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步
  • 数据结构——结构体

    结构体是一种复合数据类型 xff0c 定义了一组变量列表 xff0c 这些变量将放在一个内存块中的名称下 它允许通过使用指向结构的一个指针来访问不同的变量 struct structure name data type member1 da
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • ROS学习笔记—— rospy

    所有资料均来自于 https www icourse163 org learn ISCAS 1002580008 learn announce 和 https github com DroidAITech ROS Academy for B
  • XCOM(串口监视器,无单片机)+ESP8266显示心知天气天气信息

    XCOM xff08 串口监视器 xff0c 无单片机 xff09 43 ESP8266显示心知天气天气信息 ESP8266 AT指令显示 这是第一次写博客 xff0c 写的内容尽量通俗易懂贴近生活 PS 写的不好务必不要打我 ESP826
  • Linux编程——交叉编译器基本指令介绍

    Linux编程 交叉编译器基本指令介绍 arm span class token operator span linux span class token operator span gnueabihf span class token o
  • 马尔可夫链蒙特卡洛采样(MCMC)

    首先我们要明确的是马尔可夫链蒙特卡洛采样以下简称MCMC xff0c 它首先是个采样方法 1 采样的目的 采样作为任务 xff0c 用于生成新的样本求和 求积分 比如我们知道样本z的后验分布 我们经常会有一个需求 xff0c 得到目标函数f
  • dlang语法的简单整理

    dlang整理 为什么使用dlang 优点 xff1a 快速 xff0c 开发高效的 xff0c 方便 xff0c 无虚拟机的 xff0c 快速的 xff0c 高性能的 垃圾回收 缺点 xff1a 语法较为复杂 xff0c 支持gc 曾经很
  • docker 搭建基于prometheus的监控体系

    Prometheus是一个时间序列数据库 但是 xff0c 它不仅仅是一个时间序列数据库 它涵盖了可以绑定的整个生态系统工具集及其功能 Prometheus主要用于对基础设施的监控 包括服务器 xff0c 数据库 xff0c VPS xff
  • React回退上个页面及跳转下个页面

    回退上个页面 React 不保存数据 span class token keyword this span span class token punctuation span props span class token punctuati
  • Linux上jar包运行,但是接口测试Connect超时

    工作过程中遇到的 xff0c 这个异常就是连接超时 引起连接超时的问题有很多 xff0c 因为是feign调用超时 xff0c 我第一时间没怀疑是不是我的程序无法访问 xff0c 我一直怀疑是feigin那部分出错了 xff0c 什么跨服务
  • 网络调试助手(pc端)+ESP8266指令

    一 所需软件 链接 xff1a https pan baidu com s 1ycyOSZJOsiIocY3umrG7 g 提取码 xff1a 38f2 链接 xff1a https pan baidu com s 1EUuXUKcvf A
  • AD、PADS、allegro 哪个好用?

    AD PADS allegro 哪个好用 xff1f 用哪个都没问题 xff0c 都能完成任务 xff0c 主要看公司的选择了 AD是元老级的软件了 xff0c 也是PCB设计最先出的软件 xff0c 使用最为广范 在很多操作上都非常的人性
  • 基于python+pyqt5的串口助手

    基于python 43 pyqt5的串口助手 环境 xff1a pycharm python3 8 xff0c pyqt5 xff0c pyserial xff08 需要该节的工程文件 请私信 xff0c 或加VX xff1a Crazzy
  • STM32F4四轴飞行器总结

    xff08 菜鸡一枚 xff0c 记录一些学习的体会 xff0c 并记录了学习时提出的问题 xff0c 便于自己再次查阅 xff0c 若有错误之处 xff0c 希望大佬们指正 xff0c 谢谢 xff09 四旋翼简介 xff1a 嵌入式芯片
  • 详解RTK,RTD,SBAS,WAAS,PPP,PPK,广域差分等技术之间的关系与区别

    RTK与RTD的区别 xff0c 一个是载波相位差分 一个是码差分 xff0c 并且RTK的定位精度要高一些 RTK与PPK的区别 xff0c 一个是实时提供数据信息 xff0c 一个是事后处理 WAAS是SBAS系统一个具体的实例 xff
  • c实现set集合

    集合有点编程语言会带有 xff0c 有的没有 但是我想redis的集合set你一定听说过或者用过 下面咱们用链表来实现set 相信有了前面的基础我们可以很容易的实现set集合 需要引入我的链表的list c和list h 头文件 span
  • 实时单目物体SLAM Real-time Monocular Object SLAM

    2015 摘要 xff1a 我们提出了一个基于对象的实时SLAM系统 xff0c 该系统利用了迄今为止最大的对象数据库 我们的方法包括两个主要部分 xff1a 1 xff09 利用对象刚性约束改进地图并找到其真实比例的单目SLAM算法 xf
  • linux下多线程服务器编程

    前言 xff1a 整个程序的架构就是一开始创建一个线程 xff0c 在这个线程里面做下面几个操作 xff1a 1 调用socket xff0c 创建监听客户端的socket 2 设置socket属性 xff0c 端口可以重用 3 调用bin
  • MavLink简单使用

    参考连接 xff1a https mavlink io zh 整体说明 本文不探究mavlink协议的具体内容 xff0c 只说明如何简单使用 环境 xff1a win10 c c 43 43 MAVLink仓库clone 我们其实clon