Mavlink任务协议

2023-05-16

联系作者QQ 843230304
本文翻译自 https://mavlink.io/en/services/mission.html#mission-protocol

Mavlink任务协议

任务子协议允许GCS或开发人员API 在无人机/组件上管理任务(飞行计划),地理围栏和安全点信息。

该协议涵盖:

  • 上传,下载和清除任务,设置/获取当前任务项目编号以及在当前任务项目发生更改时获得通知的操作。
  • 用于交换任务项目的消息类型。
  • 大多数自动驾驶仪/ GCS通用的MAVLink命令。

该协议遵循客户端/服务器模式,其中操作(和大多数命令)由GCS /开发人员API(客户端)发起,并由自动驾驶仪(服务器)确认。

该协议支持重新请求尚未到达的消息,从而可以通过有损链路可靠地传输任务。

任务类型

MAVLink 2支持三种类型的“任务”:

  • 飞行计划 MAV_MISSION_TYPE_MISSION
  • 地理围栏 MAV_MISSION_TYPE_FENCE
  • 集会/安全点 MAV_MISSION_TYPE_RALLY

该协议对所有类型都使用相同的操作顺序(尽管任务类型不同)。任务类型必须分别/独立存储和处理。

任务协议消息包括mission_type相关任务的类型(MAVLink 2消息扩展名)。
该字段采用MAV_MISSION_TYPE枚举值之一:
MAV_MISSION_TYPE_MISSION,
MAV_MISSION_TYPE_FENCE,
MAV_MISSION_TYPE_RALLY。

MAVLink 1仅支持“常规”飞行计划任务MAV_MISSION_TYPE_MISSION

任务项目(MAVLink命令)

MAV_CMD枚举中定义了所有任务类型的任务项目。

MAV_CMD用于定义可以在任务中使用的命令(“任务项”)和可以在任务上下文之外发送的命令(使用命令协议)。有些MAV_CMD可以与任务和命令协议一起使用。并非所有系统(或所有飞行模式)都支持所有命令/任务项目。

使用简单的名称前缀约定来标识不同类型任务的项目:

  • 飞行计划

    • MAV_CMD_NAV_*用于导航/移动的NAV命令()(例如MAV_CMD_NAV_WAYPOINT,MAV_CMD_NAV_LAND)
    • DO命令(MAV_CMD_DO_*)用于立即采取措施,例如更改速度或激活伺服器(例如MAV_CMD_DO_CHANGE_SPEED)。
    • CONDITION命令(MAV_CMD_CONDITION_*),用于根据条件更改任务的执行-例如,在执行下一个命令(MAV_CMD_CONDITION_DELAY)之前暂停任务一段时间。
  • 地理围栏

    • 带有前缀MAV_CMD_NAV_FENCE_(例如MAV_CMD_NAV_FENCE_RETURN_POINT)。
  • 集会/安全点

    • 只有一个 MAV_CMD:MAV_CMD_NAV_RALLY_POINT

命令在MISSION_ITEMMISSION_ITEM_INT消息中传输/编码。这些消息包括用于标识所需任务项目(命令ID)的字段以及最多7个特定于命令的参数。

前四个参数可用于任何目的(取决于特定命令)。最后三个参数(x,y,z)用于NAV命令中的位置信息,但可以在其他命令中用于任何目的。
消息中特定于命令的字段如下所示:

名称类型取值描述
commanduint16_tMAV_CMD命令ID,如MAV_CMD中所定义
param1float参数#1
param2float参数#2
param3float参数#3
param4float参数#4
float/int32_t导航命令的X坐标(局部坐标系)或纬度(全局坐标系)(否则,参数5)。
yfloat/int32_t导航命令的Y坐标(局部框架)或经度(全局框架)(否则,参数#6)。
zfloatZ坐标(局部框架)或高度(全局-相对或绝对,取决于框架)(否则,参数#7)。

其余消息字段用于寻址,定义任务类型,指定NAV消息中用于x,y,z的帧等:

名称类型取值描述
target_systemuint8_t系统ID
target_componentuint8_t组件ID
sequint16_t消息的序列号
frameuint8_tMAV_FRAME航路点的坐标系。ArduPilot和PX4都仅在MAVLink命令中支持全局坐标系(如果通过命令协议发送相同的命令,则可能支持本地坐标系)
mission_typeuint8_tMAV_MISSION_TYPE任务类型
currentuint8_tfalse:0, true:1下载时,该项目是否为当前任务项目。
autocontinueuint8_t命令完成后,自动继续到下一个航点。

消息/枚举摘要

该服务使用以下消息和枚举。

信息描述
MISSION_REQUEST_LIST通过请求任务项目列表从系统启动任务下载。
MISSION_COUNT发送任务中的项目数。[下载任务]时,它用于启动任务上传或作为对MISSION_REQUEST_LIST的响应。
MISSION_REQUEST_INT收件人使用MISSION_ITEM_INT消息发送特定序列号的请求任务项目数据。用于任务上传和下载。
MISSION_REQUEST收件人使用MISSION_ITEM消息发送请求特定序列号的任务项目数据。用于任务上传和下载。
MISSION_ITEM_INT消息编码任务项目/命令(在MAV_CMD中定义)。该消息将整数形式的位置信息编码为比MISSION_ITEM更高的精度。用于任务上传和[下载]。
MISSION_ITEM消息编码任务项目/命令(在MAV_CMD中定义)。该消息将位置信息编码为float参数。用于任务上传和下载。
MISSION_ACK系统完成任务操作时的确认消息(例如,在上载所有任务项目后由自动驾驶仪发送)。该消息包括指示成功或失败类型的MAV_MISSION_RESULT。
MISSION_CURRENT包含当前任务项目序列号的消息。当当前任务项被设置/更改时,将发出此消息。
MISSION_SET_CURRENT通过序列号设置当前任务项目(在最短路径上继续该项目)。状态文字 在设置当前任务项目的请求失败时发送通知系统。
MISSION_CLEAR_ALL发送消息以清除/删除系统上存储的所有任务项目。
MISSION_ITEM_REACHED系统到达新航路点时发出的消息。用于监视进度。
MISSION_REQUEST_PARTIAL_LIST启动从系统/组件的任务项目的部分下载。
MISSION_WRITE_PARTIAL_LIST启动将新任务项目的部分上传到系统/组件。
枚举描述
MAV_MISSION_TYPE消息的任务类型(任务,地理围栏,集会点)。
MAV_MISSION_RESULT用于指示某项操作成功或失败的原因(例如上传或下载任务)。这在MISSION_ACK中进行。
MAV_FRAME消息中位置/速度/加速度数据的坐标框架。
MAV_CMD任务项目(和MAVLink命令)。这些可以通过MISSION_ITEM或MISSION_ITEM_INT发送。

运作方式

本节介绍了协议定义的主要操作。

将任务上传到飞行器

下图显示了将任务上传到无人机的通信顺序(假设所有操作均成功完成)。
甘特图:

GCS Drone MISSION_COUNT Start timeout MISSION_REQUEST_INT (1) Start timeout MISSION_ITEM_INT (1) MISSION_REQUEST_INT (2) Start timeout MISSION_ITEM_INT (2) MISSION_ACK GCS Drone

更详细地,操作顺序为:

1.GCS(客户)发送了MISSION_COUNT,其中包含要上传的任务项目数(count)

  • 一个超时必须开始为GCS等待从飞机的响应(MISSION_REQUEST_INT)。

2.无人机(服务器)收到消息,并准备上传任务项目。
3.无人机以MISSION_REQUEST_INT进行响应,请求第一个任务项目(seq==1)。
4.GCS MISSION_REQUEST_INT在MISSION_ITEM_INT消息中接收并响应所请求的任务项目。
5.无人机和GCS重复MISSION_REQUEST_INT/ MISSION_ITEM_INT循环,seq直到所有项目上传完毕。
6.对于最后一个任务项目,无人机将以MISSION_ACK响应,并显示以下操作结果:type(MAV_MISSION_RESULT):

  • 成功时,type必须设置为MAV_MISSION_ACCEPTED
  • 失败时,type必须设置为MAV_MISSION_ERROR或其他错误代码。

7.GCS收到MISSION_ACK:

  • 如果MAV_MISSION_ACCEPTED操作完成。
  • 如果出现错误,则交易失败,但可以重试。

注意:

  • GCS(客户端)会在每条消息后设置一个超时时间,如果飞行器没有响应,它将重新发送。
  • 如果未按顺序收到任何任务,客户将重新请求缺少的任务项目。
  • 上面的序列显示了打包在MISSION_ITEM_INT消息中的MAVLink命令。协议实现还必须以相同的方式支持MISSION_ITEM和MISSION_REQUEST(请参阅下面的MISSION_ITEM_INT与MISSION_ITEM)。

从飞行器下载任务

下图显示了从无人机下载任务的通信顺序(假设所有操作均成功完成)。
甘特图:

GCS Drone MISSION_REQUEST_LIST Start timeout MISSION_COUNT MISSION_REQUEST_INT (1) Start timeout MISSION_ITEM_INT (1) MISSION_REQUEST_INT (2) Start timeout MISSION_ITEM_INT (2) MISSION_ACK GCS Drone

序列类似于上传任务的序列。主要区别在于客户端(例如GCS)发送MISSION_REQUEST_LIST,该消息触发自动驾驶仪以当前项数进行响应。这开始了一个周期,在该周期中,GCS请求任务物品,而无人机则提供它们。

该序列显示了打包在MISSION_ITEM_INT消息中的MAVLink命令。协议实现还必须以相同的方式支持MISSION_ITEMMISSION_REQUEST(请参阅下面的MISSION_ITEM_INT与MISSION_ITEM)。

设置当前任务项目

下图显示了设置当前任务项目的通信顺序。
甘特图:

GCS Drone MISSION_SET_CURRENT MISSION_CURRENT GCS Drone

更详细地,操作顺序为:
1.GCS(客户端)发送MISSION_SET_CURRENT,并指定新的序列号(seq)。
2.无人机(服务器)收到消息并尝试更新当前任务序列号。

  • 成功后,无人机应广播包含当前序列号()的MISSION_CURRENT消息seq。
  • 如果失败,无人机应播放一个状态文本与MAV_SEVERITY和一个字符串,说明这个问题。这可以显示在接收系统的UI中。

注意:

  • 此消息没有特定的超时/重新发送。
  • 消息的确认是通过任务/系统状态的广播来实现的,该状态与原始消息无关。之所以使用这种方法,是因为该消息与所有任务处理客户端有关。

监控任务进度

GCS / developer API可以通过处理无人机发送的相应消息来监视进度:

  • 每当到达新任务项目时,飞行器(服务器)都必须广播MISSION_ITEM_REACHED消息。该消息包含seq当前任务项目的编号。
  • 如果当前任务项被消息更改,则飞行器还必须广播MISSION_CURRENT消息。

清除任务

下图显示了从无人机清除任务的通信顺序(不显示超时,我们假设所有操作均成功)。
甘特图:

GCS Drone MISSION_CLEAR_ALL Start timeout MISSION_ACK GCS Drone

更详细地,操作顺序为:
1.GCS(客户端)发送MISSION_CLEAR_ALL

  • 一个超时开始为GCS来等待MISSION_ACK来自无人机。

2.无人机(服务器)收到消息,并清除任务。

  • 如果后续的任务计数或当前任务项目请求表明没有上传任务,则认为该任务已清除。

3.无人机以MISSION_ACK响应,其中包含结果type(MAV_MISSION_RESULT):

  • 成功后,此类型必须设置为MAV_MISSION_ACCEPTED
  • 失败时,类型必须设置为MAV_MISSION_ERROR或其他错误代码。

4.GCS收到MISSION_ACK:

  • 如果MAV_MISSION_ACCEPTEDGCS清除了自己存储的有关任务的信息(该信息刚刚从飞行器中删除)并完成。
  • 如果出现错误,则交易失败,并且将保留任务的GCS记录(如果有)。

5.如果未MISSION_ACK收到该操作,则该操作最终将超时并且可以重试(请参阅上文)。

上传部分任务

待定

下载部分任务

待定

超时和重试

所有客户端(GCS)命令都会发送超时。如果MISSION_ACK在超时之前未收到a ,则客户端(GCS)可以重新发送该消息。如果重试多次后仍未收到响应,则客户端必须取消该操作并返回到空闲状态。

重新发送之前的建议超时值以及重试次数为:

  • 超时(默认):1500毫秒
  • 超时(任务项):250毫秒。
  • 重试次数(最多):5

MISSION_ITEM_INT和MISSION_ITEM

上面的操作/顺序图显示了使用MISSION_REQUEST_INTMISSION_ITEM_INT请求/发送的消息命令。

协议实现还必须使用相应的MISSION_REQUEST和MISSION_ITEM消息类型来支持相同的操作/序列。唯一的区别是MISSION_ITEM_INT将纬度和经度编码为整数而不是浮点数。

MAVLink 用户应始终偏爱*_INT变体。这些避免/减少了使用的精度限制MISSION_ITEM。

任务文件格式

用于交换任务/计划的事实上的标准文件格式在以下文件中进行了讨论:文件格式>任务纯文本文件格式。

实现

PX4

该协议已在C中实现。
源代码:

  • src/modules/mavlink/mavlink_mission.cpp

实施状态为(在撰写本文时):

  • 飞行计划任务:
    • 如本规范中所定义,支持上载,下载,清除任务和监视进度。
    • 不支持部分上传和部分下载。
  • 如本规范中所定义,支持“地理围栏任务”。
  • PX4不支持集结点“任务”。

QGroundControl

该协议已用C ++实现。
源代码:

  • src/MissionManager/PlanManager.cc

ArduPilot

ArduPilot用C ++实现任务协议。

ArduPilot使用此规范中描述的相同消息和消息流。有一些实现差异会影响兼容性。这些记录在下面。

源代码:

  • /libraries/GCS_MAVLink/GCS_Common.cpp
飞行计划任务

支持任务上传,下载,清除任务以及监视进度和部分任务上传(MISSION_WRITE_PARTIAL_LIST)。
不支持部分任务下载(MISSION_REQUEST_PARTIAL_LIST)。
ArduPilot的实现与该规范不同(非穷尽):

  • 第一个任务序列号(seq==0)填充有飞行器的原始位置,而不是第一个任务项。

  • 任务上传不是“原子的”。中途失败(或被取消)的上载将与更新前的状态不匹配。相反,它可能是原始任务和新任务的混合。

  • 即使上传成功,飞行器任务也可能与上传系统上的版本不匹配(如果随后下载了任务,则该版本将不同于原始版本)。

    • 如果您尝试上传的项目超过ArduPilot可以存储的数量,则系统将“接受”这些项目(即不报告失败),但只会将每个新项目覆盖到任务列表中的相同(最高)位置。
    • 仅存储使用的字段。
    • 在某些字段上四舍五入(由于可用的存储空间,在某些情况下内部可能的最大值)。如果直接比较上传前后的float参数,则可能会失败。
  • 一个MISSION_ACK返回错误值(NACK)不终止上载(即它不被视为不可恢复的错误)。只要ArduPilot尚未超时,系统就可以重试当前任务项目上载。

  • 在执行任务时(即在自动模式下)无法清除任务。请注意,可以上传新任务(甚至是零大小的任务-相当于清除)。

  • 不支持明确取消操作。如果一端停止通信,另一端最终将超时,并将自身重置为空闲/就绪状态。

规范未定义以下行为(但仍然值得关注):

  • 提交任务项目时,ArduPilot将对字段进行一些验证。验证码是所有飞行器通用的;飞行器类型无法理解的任务项目在上传时被接受,但在任务执行期间被跳过。
  • ArduPilot在任务运行时(例如,跳跃目标)执行一些特定于飞行器的验证。
  • 执行任务时可以上传新任务。在这种情况下,即使新任务中的航路点顺序不同,当前的航路点也将执行完毕(要获取新项目,您需要重置顺序或切入/退出自动模式)。
  • ArduPilot任务没有存储在SD卡中,因此具有特定于飞行器/主板的最大任务大小(作为好处,在ArduPilot上,任务可以在飞行中SD卡中幸存下来)。
地理围栏任务

Geofence受ArduPilot支持,但不使用此协议进行管理。

集会点任务

集会点受ArduPilot支持,但不使用此协议进行管理

MAVSDK

待定

无人机套件

待定

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

Mavlink任务协议 的相关文章

随机推荐

  • Linux CentOS 7 elasticsearch 设置开机自启

    在 etc systemd system目录下创建elasticsearch service文件 span class token namespace Unit span Description 61 elasticsearch span
  • Centos7 设置开机自启的几种方式

    一 系统服务的方式 1 前提 xff08 1 xff09 首先要将需要自启的软件或应用注册成系统服务 xff0c 下面提供常用的软件注册系统服务的案例 nginx service 创建服务文件 vi usr lib systemd syst
  • ubuntu18.04 server配置 ip地址

    ubuntu18 04 server xff0c 启用了新的网络工具netplan xff0c 下面对齐配置参数进行介绍 1 其网络配置文件是放在 etc netplan yaml 缺省dhcp打开方式 xff0c 如果要配置静态地址 xf
  • Ardupilot基于UWB的定位飞行测试

    拖了许久的测试视频 xff0c 终于要发布了 xff0c 上个版本的代码有点问题 xff0c 没有考虑清楚UWB和NED坐标系的关系 xff0c 导致后面飞行故障不断 xff0c 这款UWB的坐标系为ENU坐标系 xff0c 飞机飞行的坐标
  • AutoBoat自动导航无人船

    AutoBoat 自动导航支持航线规划无人船 AutoBoat是一款功能强大自动驾驶无人船 xff0c 同时还可以搭配多款地面控制站使用 地面站中可以在线升级固件 调参 xff0c 使用一套全双工的无线数据传输系统在地面站与小车之间建立起一
  • PIXHAWK上安装PX4Flow光流传感器及调试过程

    小编最近刚调试完光流传感器 xff0c 效果非常理想 xff0c 无GPS情况下很稳定 小编把调试过程的过程和遇到的问题分享给大家 xff0c 希望大家少走弯路 在安装和调试光流传感器之前 xff0c 先保证旋翼机已经安装和调试完毕 xff
  • 正点原子STM32学习笔记——MPU6050介绍

    一 MPU6050简介 1 什么是MPU6050 xff1f MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件 xff0c 内带3轴陀螺仪和3轴加速度传感器 xff0c 并且含有一个第二IIC接口 xff0c 可
  • 【OFDM系列4】OFDM信号多径信道模型基础知识

    多径信道模型 Multipath Channel Scenario 信道脉冲响应 Channel Impulse Response CIR 信道的复基带脉冲响应如下所示 h t l 1 L a l
  • LACP负载分担配置

    网络拓扑图如下 交换机3的配置 Huawei int Eth Trunk 1 Huawei Eth Trunk1 mode lacp static xff08 负载分担模式设置为LACP模式 xff09 Huawei Eth Trunk1
  • 在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置

    在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置 一 tx2刷机二 安装librealsense xff0c realsense驱动1 安装依赖库2 从debian reposit
  • linux串口传感器处理接收不完整,数据丢失问题分析

    简介 因为当前项目需要在一个linux系统下进行串口传感器的收发工作 xff0c 该串口传感器的收发使用的是字节流专有协议 xff0c 按照每一个字节的十六进制编码来确定协议数据 按照以往的思路 xff0c 串口就是最简单的外设的思想 xf
  • STM32与上位机串口通讯的学习笔记(简明的数据帧设计方法)

    最近因为项目需要 xff0c 需要做一个STM32和Windows的串口通讯协议来交换数据 xff0c 本着追求极致的心态 xff0c 来讨论一下简明的数据帧的设计方法 数据的传输方式 对于很多单片机初学者而言 xff0c 可能他们接触到串
  • 通讯协议(modbus协议和serial读取数据)

    通讯协议 1 调试助手1 1 crc计算助手1 2 串口调试助手 2 使用serial节点读取数据3 modbus协议3 1 报文3 2 功能号3 2 1主机对从机写数据操作3 2 2主机对从机读数据操作 3 3 MODBUS报文模型 4
  • Qt5开发(一)使用记录

    Qt使用记录 一 QtCreator 快捷使用方式1 快速切换已打开的文件2 快速添加函数3 修改变量名 并应用到所有使用该变量的地方 4 选中光标所在的单词5 删除光标所在行6 其他快捷键7 QtCreator配置代码自动格式化8 快捷键
  • Windows10系统运行msconfig(系统配置)选择安全引导后,登录账户显示密码错误的一种较为简易的解决方法

    问题背景描述 在Windows10环境下 xff0c 由于前几天下载到一个带有极多捆绑软件的文件 xff08 常在河边走 xff0c 哪有不湿鞋 xff09 xff0c 为了删除一个流氓软件 xff0c 于是根据网上文章提示便运行 msco
  • 学习笔记-MATLAB的函数bwconncomp算法解析

    一 说明 bwconncomp函数的作用是在一个二值图像中找出每一个连通分量 xff0c 并返回一个结构体CC xff0c CC中包含了图像及连通分量的一些属性 笔者使用的MATLAB版本为2018a xff0c 且在该版本中 xff0c
  • PX环境搭建编译px4_fmu-v2_default相关问题的解决方法

    背景说明 笔者在ubuntu18 04下搭建PX环境时git clone的是较新版本的PX4 Autopilot链接在此 xff08 而目前网上的教程基本是较老版本的Firmware xff0c 两者文件分布不相同 xff0c 所以已有的方
  • PX4编译过程中报错通用解决办法

    背景说明 时刻两年 xff0c 再次配置PX4环境 xff0c 又踩了一遍坑 xff0c 过程中遇到报错真的是欲哭无泪 xff0c 但是解决完回头再来看其实问题并不复杂 本篇文章面向在PX4 Autopilot目录执行命令 make px4
  • CMakeList使用总结

    一 cmake功能介绍 cmake是跨平台编译工具 xff0c 编写简单好维护 xff0c 是make的高级用法 1 编写CMakeList txt文件 通过cmake生成Makefile文件 xff0c make生成可执行文件 静态库 共
  • Mavlink任务协议

    联系作者QQ 843230304 本文翻译自 https mavlink io en services mission html mission protocol Mavlink任务协议 任务子协议允许GCS或开发人员API 在无人机 组件