DroneKit教程(五):使用自定义MAVLink指令

2023-05-16

DroneKit教程(五):使用自定义MAVLink指令

DroneKit的实质是通过发送和接受MAVLink消息,向飞控发送控制指令、从飞控获取各种状态信息。DroneKit的所有内置功能都是基于MAVLink实现的。DroneKit内置了simple_takeoff和simple_goto指令,以及部分云台的指令;如果要使用到DroneKit中没有的指令,则需要自定义MAVLink消息并发送。

编程示例

使用SET_POSITION_TARGET_LOCAL_NED设置速度

from pymavlink import mavutil

def send_nav_velocity(self, velocity_x, velocity_y, velocity_z):
    # 生成SET_POSITION_TARGET_LOCAL_NED命令
    msg = self.vehicle.message_factory.set_position_target_local_ned_encode(
                    0,       # time_boot_ms (not used)
                    0, 0,    # target system, target component
                    mavutil.mavlink.MAV_FRAME_BODY_NED,   # frame
                    0b0000111111000111, # type_mask (only speeds enabled)
                    0, 0, 0, # x, y, z positions (not used)
                    velocity_x, velocity_y, velocity_z, # x, y, z velocity in m/s
                    0, 0, 0, # x, y, z acceleration (not used)
                    0, 0)    # yaw, yaw_rate (not used) 
    # 发送指令
    self.vehicle.send_mavlink(msg)
    self.vehicle.flush()

使用MAV_CMD_CONDITION_YAW设置航向(yaw轴)

from pymavlink import mavutil

def condition_yaw(self, heading, relative, clock_wise):
    # 使用相对角度或绝对方位
    if relative:
        isRelative = 1
    else
        isRelative = 0

    # 若使用相对角度,则进行顺时针或逆时针转动
    if clock_wise:
        direction = 1  # "heading"所对应的角度将被加和到当前朝向角
    else:
        direction = -1 # "heading"所对应的角度将被从当前朝向角减去
    if not relative:
        direction = 0

    # 生成CONDITION_YAW命令
    msg = self.vehicle.message_factory.command_long_encode(
                    0, 0,       # target system, target component
                    mavutil.mavlink.MAV_CMD_CONDITION_YAW, # command
                    0,          # confirmation
                    heading,    # param 1, yaw in degrees
                    0,          # param 2, yaw speed (not used)
                    direction,  # param 3, direction
                    isRelative, # param 4, relative or absolute degrees 
                    0, 0, 0)    # param 5-7, not used
    # 发送指令
    self.vehicle.send_mavlink(msg)
    self.vehicle.flush()

MAVLink指令

MAVLink是运行ArduPilot和PX4飞控软件的无人机与外界通信的协议。MAVLink中的指令部分称为MAVLink Command Messages(MAV_CMD)。

MAV_CMD分为三种指令类型:

  • MAV_CMD_NAV导航命令(Navigation commands),用于控制无人机的运动
  • MAV_CMD_DO命令(Do commands),用于辅助性的功能,不会影响无人机的位置
  • MAV_CMD_CONDITION命令(Conditional commands),在满足相应条件之前,阻塞下一个DO命令的执行

对MAV_CMD,最多可以同时执行一条NAV命令,一条DOCONDITION命令。

此外,SET_POSITION_TARGET_LOCAL_NED是无人机速度和位置控制中常用的指令。

完整的命令文档可参见ArduPilot开发者文档:Copter Commands in Guided Mode以及Mission Planner中的MAV_CMD文档。

Frame

Frame of reference,意味参考系。在使用部分MAVLink指令时,需要声明使用的参考系。常用的参考系为:

Frame名称位置参考点位置参考方位速度参考方位
MAV_FRAME_LOCAL_NEDhomeNEDNED
MAV_FRAME_LOCAL_OFFSET_NEDvehicleNEDNED
MAV_FRAME_BODY_OFFSET_NEDvehicleFRDFRD
MAV_FRAME_BODY_NEDhomeNEDFRD

名词解释:

  • home - 以home点的位置(通常是无人机初始化完成的位置)作为参考点
  • vehicle - 以无人机的当前位置作为参考点
  • NED - North East Down,即 x轴=正北方,y轴=正东方,z轴=正下方,绝对方位朝向
  • FRD - Forward Right Down,即 x轴=正前方,y轴=正右方,z轴=正下方,相对方位朝向

生成和发送MAVLink指令

生成MAVLink指令

通过调用vehicle.message_factory,可以生成“原生”的MAVLink指令。在使用前,需要

from pymavlink import mavutil

对于多数MAVLink指令,生成相应指令的函数为“小写指令名”+“_encode”。例如,对于SET_POSITION_TARGET_LOCAL_NED,我们使用message_factory.set_position_target_local_ned_encode()

msg = vehicle.message_factory.set_position_target_local_ned_encode(
    0,       # 时间戳(未使用)
    0,       # 目标系统ID(自动填充)
    0,       # 目标组件ID(一般设为0,向所有组件发送)
    mavutil.mavlink.MAV_FRAME_BODY_NED, # 参考系
    0b0000111111000111, # 使能速度控制或位置控制的bitmask,此处使能了速度控制
    0, 0, 0, # x, y, z轴位置
    velocity_x, velocity_y, velocity_z, # x, y, z轴速度
    0, 0, 0, # x, y, z加速度(ArduCopter固件暂不支持)
    0, 0)    # 目标航向角(yaw轴角度),yaw轴加速度(ArduCopter固件暂不支持)

对于一类MAVLink指令——MAV_CMD指令,我们使用message_factory.command_long_encode()函数:

msg = vehicle.message_factory.command_long_encode(
    0,          # 目标系统ID(自动填充)
    0,          # 目标组件ID(一般设为0,向所有组件发送)
    mavutil.mavlink.MAV_CMD_CONDITION_YAW, # 指令名
    0,          # 确认
    heading,    # 参数1, 目标朝向(度)
    0,          # 参数2, 角速度(ArduCopter固件暂不支持)
    1,          # 参数3, 方向(1为顺时针,-1为逆时针,仅当参数4=1时才有效)
    1,          # 参数4, 参考系(1以当前朝向为参考,0为绝对方位)
    0, 0, 0)    # 参数5 ~ 7,未使用

发送MAVLink指令

使用send_mavlink()函数发送指令,flush()函数将等待指令发送成功。

vehicle.send_mavlink(msg)
vehicle.flush()

版本信息

1.0 20170915 initial commit

知识共享许可协议
本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。

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

DroneKit教程(五):使用自定义MAVLink指令 的相关文章

  • Ardupilot飞控Mavlink代码学习

    摘自 xff1a https blog csdn net lixiaoweimashixiao article details 80919995 Ardupilot飞控Mavlink代码学习 魔城烟雨 2018 07 05 23 36 33
  • ROS使用自定义的msg发送topic

    1 新建工作空间 span class token function mkdir span p catkin ws src span class token function cd span catkin ws catkin make 2
  • Mavlink任务协议

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

    目录 文章目录 目录 摘要 1 Ardupilot怎么实现Mavlink初始化 2 Mavlink消息通信过程 摘要 本节主要记录自己学习Ardupilot的Mavlink协议的过程 欢迎一起交流分析 1 Ardupilot怎么实现Mavl
  • Dronekit-python连接飞控报错dronekit.APIException: Timeout in initializing connection.

    将命令改为python connect py connect dev ttyUSB0 就可以了 与飞控的连接串口因各自而异 xff0c 我得是ttyUSB0 有的人的是ttyAMA0等等
  • 编译mavlink-router

    1 首先安装meson ninjia gcc g 43 43 等工具 xff1a sudo apt install git meson ninjia build pkg config gcc g 43 43 system 可能会出现一下错误
  • 【无人机开发】通讯协议MavLink详解

    1 MAVLink简介 MAVLink xff08 Micro Air Vehicle Link xff0c 微型空中飞行器链路通讯协议 xff09 是无人飞行器与地面站 xff08 Ground Control Station xff0c
  • C语言实现mavlink库与px4通信仿真

    参照网址 http mavlink io en mavgen c 首先从github上下载对应的C uart interface example 对应的github仓库网址为https github com mavlink c uart i
  • matlab发送mavlink消息

    主要介绍了通过matlab脚本实现UDP发送mavlink消息 xff0c 为后面matlab计算 xff0c 与Optitrack联合调试 xff0c 控制无人机做准备 示例演示效果链接为 matlab通过UDP协议发送mavlink消息
  • ardupilot之mavlink消息--从飞控发出--单向

    飞控采用mavlink消息进行数据的传输 普遍说法是 xff0c 现有的mavlink消息几乎已经涵盖了所有你的能想象到的内容 xff0c 完全可以覆盖多处需求 无奈科研总是要定义一些新鲜玩意 xff0c 所以总是有无法完全满足需求 xff
  • ardupilot之mavlink消息--飞控接收--单向

    由于项目需要 xff0c 完成一个测试demo 本次从dronekit中发送mavlink消息给飞控 xff0c 飞控接收发来的wp信息 xff0c 然后进行修改供程序使用 首先祭出测试视频 dronekit arudpilot test
  • 【飞控协议】MavLink介绍和编译

    MavLink是什么 xff1f MavLink xff08 Micro Air Vehicle Link xff0c 微型空中飞行器链路通讯协议 xff09 是在串口通讯基础上的一种更高层的开源通讯协议 xff0c 主要应用在无人飞行器与
  • 【C/C++/QT/ 移植/导入Mavlink V2.0/Mavlink V1.0教程】

    提示 xff1a 本文针对的实例是Mavlink V2 0版本 xff0c Mavlink V1 0版本其实也是类似的的步骤 xff0c 选择的mavlink库不一样而已 官方链接放在此 xff1a Install MAVLink MAVL
  • MAVLink.io(4)--MAVLlink Version

    MAVLink Version 版本 MAVLink发展处几个版本 xff1a MAVLink 2 0 目前推荐的主要版本 xff0c 2017被大部分用户接受 MAVLink v1 0 2013年被广泛接受 xff0c 一直被大批设备采用
  • PX4源码分析7_添加mavlink自定义消息

    一 自定义mavlink消息 xff1a 根据uorb消息 xff08 msg xff09 自定义mavlink消息 方法为利用mavlink generator工具在xml文件生成mavlink所需相应的头文件 二 发送自定义mavlin
  • mavlink解码java_mavlink: A Java API for MAVLink communication

    Overview A Java SDK for communication using the Mavlink1 and Mavlink2 protocols Structure The project is made up of 3 co
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞
  • 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0 概述 无人机自主飞行平台可以分为四个部分 xff1a 动力平台 xff0c 飞行控制器 xff0c 机载电脑和模拟平台 动力平台 xff1a 负责执行飞行任务 xff0c 包括螺旋桨 电机 机架等 xff0c 用于科研的一般都是F380
  • dronekit控制实体无人机起飞降落

    摘要 xff1a 本文基于dronekit在实体无人机上实现最基本的起飞和降落 xff0c 测试了这一过程中速度的变化以及起落位置的偏移 实体实验环境 树莓派4BUbuntu mate 20 04飞控Pixhawk 2 4 8飞控固件APM
  • DroneKit教程(七):遥控信道覆盖

    DroneKit教程 xff08 七 xff09 xff1a 遥控信道覆盖 MAVLink支持一项有用却又非常危险的功能 xff1a 遥控信道覆盖 xff08 Channel Override xff09 遥控信道覆盖可以将任一至全部通道的

随机推荐

  • 基于STM32CUBE的LWIP+FREERTOS+Socket构成的TCP服务器

    本实验基于STM32F767制作 一 实验目的 本实验主要目的是通过Socket网络编程方法完成通过以太网控制两个LED的亮灭的 xff0c 同理可用到继电器上控制其它高电压设备 二 实验步骤 1 首先先生成一个带有LWIP和FreeRTO
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • opencv4以上版本报错:CV_LOAD_IMAGE_COLOR和CV_BGR2HSV和CV_CAP_PROP_FRAME_WIDTH

    报错关于 xff1a CV LOAD IMAGE COLOR xff0c 加入头文件 span class token preprocessor property include span span class token string 3
  • 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

    统计的结果请见第一篇文章 代码已经开源至GitHub 本文下面所有的爬虫项目都有详细的配套教程以及源码 xff0c 都已经打包好上传到百度云了 xff0c 链接在文章结尾处 xff01 扫码此处领取大家自行获取即可 讲真 这个应该是我做过的
  • 如何从源码编译SITL

    从源码编译SITL Windows 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 SITL简介和适用情况 SITL 61 Software in the loop xff0c 是著名无人机开源社区ArduPil
  • 使用从源码编译的SITL测试dronekit代码

    使用从源码编译的SITL测试DroneKit代码 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 DroneKit和SITL简述 DroneKit是一款Python语言的无人机开发库 xff0c 可以对使用MAV
  • Keil一进入调试器就退出的解决方法

    Keil一进入调试器就退出的解决方法 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 问题描述 在使用Keil与TI公司的Tiva TM4C123开发板进行开发时 xff0c 偶尔会出现一进入在线调试器 xff0
  • 在ArduPilot旋翼机上安装PX4Flow光流传感器

    在ArduPilot旋翼机上安装PX4Flow光流传感器 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 预先要求 在安装和调试光流传感器之前 xff0c 请先保证 xff1a 旋翼机已经安装 调试完毕 xff0
  • 教程:使用树莓派连接Pixhawk飞控

    教程 xff1a 使用树莓派连接Pixhawk飞控 树莓派可以与Pixhawk飞控相连 xff0c 读取飞控中的状态信息 xff0c 同时对飞控发送指令 树莓派作为一个更高性能的计算平台 xff0c 可以运行图像识别 机器学习 实时路径规划
  • STM32Cube的PWM控制基础篇(一)一路PWM设置

    以下是有关STM32cube的PWM的花式操作 xff0c 大佬们在看下面链接之前建议先看完本博客 xff0c 个人觉得写的比较详细 xff0c 欢迎大佬之指正 xff01 STM32Cube的PWM控制基础篇 xff08 二 xff09
  • MissionPlanner找不到全部参数表(Full Parameter List)的解决方法

    MissionPlanner 找不到全部参数表 xff08 Full Parameter List xff09 的解决方法 ArduPilot是一款强大的开源飞控软件 xff0c 在使用MissionPlanner的高级功能的时候 xff0
  • Pixhawk室内自动控制:参数设置

    Pixhawk室内自动控制 xff1a 参数设置 本文针对使用光流传感器和超声波传感器 xff08 或激光雷达 xff09 的Pixhawk用户 ArduCopter目前 xff08 3 52 xff09 已经能够使用光流传感器提供的位置信
  • Pixhawk室内自动控制:参数设置(SITL)

    Pixhawk室内自动控制 xff1a 参数设置 xff08 SITL xff09 本文针对使用光流传感器和超声波传感器 xff08 或激光雷达 xff09 进行开发 xff0c 期望实现室内自动控制的Pixhawk用户 这篇文章讲解了如何
  • DroneKit教程(一):安装DroneKit和测试工具

    DroneKit教程 xff08 一 xff09 xff1a 安装DroneKit和测试工具 DroneKit Python是一个用于控制无人机的Python库 DroneKit提供了用于控制无人机的API xff0c 其代码独立于飞控 x
  • DroneKit教程(二):控制Pixhawk示例

    DroneKit教程 xff08 二 xff09 xff1a 控制Pixhawk示例 本篇提供了一个简单的示例 xff0c 配以详细的注释说明不同语句的功能 xff0c 希望能给各位一个总体的框架和印象 该示例文件改写自DroneKit的官
  • DroneKit教程(三):连接Pixhawk飞控

    DroneKit教程 xff08 三 xff09 xff1a 连接Pixhawk飞控 DroneKit提供了非常简便的代码 xff0c 可通过多种方式与飞控连接 连接飞控 使用DroneKit中的connect函数 xff0c 可以方便地连
  • DroneKit教程(四):属性和参数的读取与设置

    DroneKit教程 xff08 四 xff09 xff1a 属性和参数的读取与设置 DroneKit内置了无人机的属性和参数 xff0c 使用简单的Python代码即可进行读取和修改 此教程的例子均使用在本地编译完成的SITL进行测试 如
  • DroneKit教程(五):使用自定义MAVLink指令

    DroneKit教程 xff08 五 xff09 xff1a 使用自定义MAVLink指令 DroneKit的实质是通过发送和接受MAVLink消息 xff0c 向飞控发送控制指令 从飞控获取各种状态信息 DroneKit的所有内置功能都是