pymavlink使用简单教程

2023-05-16

这里写自定义目录标题

  • pymavlink
    • 主要包含的模块
    • 连接
      • 样例
    • 设置任务
      • 样例
    • 更改飞行参数param
      • 样例
    • 飞行模式
    • 总结

pymavlink

Pymavlink是MAVLink协议的python实现。 自身包括一个源代码生成器(generator / mavgen.py),用于为其他编程语言创建MAVLink协议实现。 还包含用于分析飞行日志的工具。

主要包含的模块

  1. mavutil: 用于设置通信链接,接收和解码消息,运行定期任务等.
  2. mavwp: 用于加载/保存航点,地理围栏等.
  3. mavparm: 用于加载/保存MAVLink 的参数.
  4. mavextra: 用于转换单位和消息的工具。
  5. mavexpression (internal): MAVLink表达式评估的一些函数.

连接

首先是进行连接, 因为我用的是模拟器所以用udp进行连接并获取心跳包

master = mavutil.mavlink_connection('udp:0.0.0.0:{}'.format(port))# port 是端口号
master.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" % (
            master.target_system, master.target_system))

连接上了以后可以通过recv_match获取消息

msg = master.recv_match(type='ATTITUDE', blocking=True)

其中type是你要获取的消息的类型,可以是单个消息,也可以是一组消息,组消息用[]即可,blocking 是该消息是否阻塞,即在收到type类的消息前一直等待.msg可以使用to_dict()将其变成dict

样例

不停接收UAV的ATTITUDE消息

from pymavlink import mavutil

master = mavutil.mavlink_connection('udp:0.0.0.0:{}'.format(port))# port 是端口号
master.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" % (
            master.target_system, master.target_system))

while True:
	try:
		msg = master.recv_match(type='ATTITUDE', blocking=True)
		if not msg:
			raise ValueError()
		print(msg.to_dict())
	except KeyboardInterrupt:
        print('Key bordInterrupt! exit')
        break

设置任务

在使用自动航点模式的时候,需要上传自己的mission,mission的格式标注可参考mavlink手册,这里简单举例:

QGC WPL 110
0	1	0	16	0	0	0	0	40.072842	-105.230575	0.000000	1
1	0	3	22	0.00000000	0.00000000	0.00000000	0.00000000	0.00000000	0.00000000	10.000000	1
2	0	3	16	5.00000000	0.00000000	0.00000000	0.00000000	40.07351510	-105.23148180	20.000000	1
3	0	3	203	0.00000000	0.00000000	0.00000000	0.00000000	0.00000000	0.00000000	0.000000	1
4	0	3	16	1.00000000	0.00000000	0.00000000	0.00000000	40.07251400	-105.23154400	20.000000	1
5	0	3	16	0.00000000	0.00000000	0.00000000	0.00000000	40.07251400	-105.23154400	3.000000	1
6	0	3	178	1.00000000	5.00000000	0.00000000	0.00000000	0.00000000	0.00000000	0.000000	1
7	0	3	16	0.00000000	0.00000000	0.00000000	0.00000000	40.07254400	-105.23135400	3.000000	1
8	0	3	16	0.00000000	0.00000000	0.00000000	0.00000000	40.07260900	-105.23128500	5.000000	1
9	0	3	16	0.00000000	0.00000000	0.00000000	0.00000000	40.07284500	-105.23057600	5.000000	1

上传waypoint主要是用mavwp

首先加载mossion的waypoint

loader = mavwp.MAVWPLoader()
loader.target_system = self._master.target_system
loader.target_component = self._master.target_component
loader.load('mission.txt') # load mission

根据需要是否清空UAV自身的waypoint, master是上面提到的连接

master.waypoint_clear_all_send() # need connect the uav at first!

使用 master.mav.send 向UAV发送waypoint内容

master.waypoint_count_send(loader.count())
try:
	# looping to send each waypoint information
	for i in range(loader.count()):
		msg = master.recv_match(type=['MISSION_REQUEST'], blocking=True, timeout=timeout)
		master.mav.send(loader.wp(msg.seq))
        print('Sending waypoint {0}'.format(msg.seq))
        mission_ack_msg = master.recv_match(type=['MISSION_ACK'], blocking=True, timeout=timeout)
except TimeoutError:
     print('upload mission timeout')

样例

from pymavlink import mavutil, mavwp

master = mavutil.mavlink_connection('udp:0.0.0.0:{}'.format(port))# port 是端口号
master.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" % (
            master.target_system, master.target_system))

loader = mavwp.MAVWPLoader()
loader.load('mission.txt') # load mission

master.waypoint_count_send(loader.count())
try:
	# looping to send each waypoint information
	for i in range(loader.count()):
		msg = master.recv_match(type=['MISSION_REQUEST'], blocking=True, timeout=timeout)
		master.mav.send(loader.wp(msg.seq))
        print('Sending waypoint {0}'.format(msg.seq))
        mission_ack_msg = master.recv_match(type=['MISSION_ACK'], blocking=True, timeout=timeout)
except TimeoutError:
     print('upload mission timeout')

更改飞行参数param

飞控的全部飞行参数为Full Parameter List of Copter latest V4.0.4 dev

mavutil可以直接读取UAV的参数.

master.param_fetch_all() # read all param| need connect the uav at first!
master.param_fetch_one(name) # read one param | need connect the uav at first!

mavutil提供了直接设置参数的函数.

master.param_set_send(param, value) # need connect the uav at first!

param是参数的名称, value是具体的值

样例

读取

from pymavlink import mavutil

master = mavutil.mavlink_connection('udp:0.0.0.0:{}'.format(port))# port 是端口号
master.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" % (
            master.target_system, master.target_system))
            
param = 'PSC_POSXY_P'
master.param_fetch_one(param) # need connect the uav at first!

message = master.recv_match(type='PARAM_VALUE', blocking=True).to_dict()
print('name: %s\t value: %f' % (message['param_id'], message['param_value']))

设置

from pymavlink import mavutil

master = mavutil.mavlink_connection('udp:0.0.0.0:{}'.format(port))# port 是端口号
master.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" % (
            master.target_system, master.target_system))
            
param = 'PSC_POSXY_P'
value = 1
master.param_set_send(param, value)
message = master.recv_match(type='PARAM_VALUE', blocking=True).to_dict()
print('name: %s\t value: %f' % (message['param_id'], message['param_value']))

飞行模式

mavutil同样可以直接改变UAV的飞行模式

设置为loiter

master.set_mode_loiter()

解锁 uav

master.arducopter_arm()

设置为auto模式

master.set_mode_auto()

这里举几个例子, 切换成其他模式就不一一展示了.
这里要注意的是在auto模式下是无法arm解锁的, 需要切换成其他模式解锁.

总结

最近正好使用pymavlink进行开发, 但是官方给的文档有些不完善, 内容有些老旧, 因此自己看源码找了总结了一些实际的使用方法.

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

pymavlink使用简单教程 的相关文章

随机推荐

  • Ubuntu更换国内镜像源

    由于Ubuntu官方镜像速度有限 xff0c 可以使用国内镜像加速更新和下载 xff0c 节约时间 常用的国内镜像有很多 xff0c 本人常用的有如下几个 xff0c 仅供参考 163镜像 mirrors 163 com 清华镜像 mirr
  • ubuntu-2204 gerrit ssh 报错Permission denied (publickey).分析及解决

    ubuntu 2204 gerrit ssh 报错Permission denied publickey 分析及解决 使用repo init sync下载代码时遇到报错 Permission denied publickey 分析排查步骤
  • UCOSII操作系统 第3课—UCOSII启动过程

    1 初始化UCOSII 1 在调用UCOSII在任何的其他的服务之前 xff0c UCOSII要求首先调用初始化函数OSInit 这个函数的目的就是在整个系统启动之前 xff0c 初始化所有的变量和数据结构 2 其中 xff0c 在OSIn
  • vscode安装配置clang-format插件及使用

    vscode安装配置clang format插件及使用 首先安装插件 在vscode扩展里搜索clang format xff0c 安装排名第一的xaver clang format 确认clang format可执行程序路径 window
  • 消息序列化工具-protobuf介绍及安装使用技巧

    简介 protobuf是google团队开发的用于高效存储和读取结构化数据的工具 xml json也可以用来存储此类结构化数据 xff0c 但是使用protobuf表示的数据能更加高效 xff0c 并且将数据压缩得更小 xff0c 大约是j
  • 消息序列化工具-为现代C++设计的jsoncpp介绍与使用技巧

    概述 JSON 的全称为 xff1a JavaScript Object Notation xff0c 顾名思义 xff0c JSON 是用于标记 Javascript 对象的 xff0c JSON 官方的解释为 xff1a JSON 是一
  • cppcheck代码检查工具安装与使用技巧

    cppcheck代码检查工具安装与使用技巧 Cppcheck 是一种 C C 43 43 代码缺陷静态检查工具 不同于 C C 43 43 编译器及很多其它分析工具 xff0c 它不检查代码中的语法错误 Cppcheck 可以检查非标准代码
  • sed流编辑器中使用变量替换以及执行外部命令

    在使用sed对日志或者其它文本进行parse的过程当中 xff0c 有时候我们需要引用外部变量的值 xff0c 或者获取一个shell命令执行的结果 xff0c 以便达到更加可观的输出结果 这里介绍如何做到 sed 流编辑 1 sed命令及
  • mkisofs命令制作iso文件

    mkisofs命令行格式 mkisofs adDfhJlLNrRTvz print size quiet A lt 应用程序ID gt b lt 开机映像文件 gt c lt 开机文件名称 gt hide lt 目录或文件名 gt hide
  • windows下tree命令列出文件目录树

    windows下tree命令列出文件目录树 tree path f tree D AR C Team f 可以将D AR C Team目录下所有目录及子目录下的文件都打印出来 tree D AR C Team f gt HOMEPATH f
  • yum命令安装历史回滚彻底删除安装的依赖包

    yum命令安装一个软件包是会连同依赖包一起安装 xff0c 但是yum remove卸载时却只卸载这个文件包本身 如果需要删除安装时附加的依赖包可以使用yum history的相关操作实现回滚 假如安装了ecliipse pde xff0c
  • latex在ipython jupyter notebook中的使用

    In 2 from IPython display import Latex In 5 数学公式的前后要加上 或 和 Latex r 34 f x 61 3x 43 7 34 Out 5 In 6
  • MATLAB 2018b 帮助页面设置为中文显示

    MATLAB 2018b 帮助页面设置为中文显示 具体步骤如下 xff1a 1 随机点击一个matlab的函数点击 help 2 点击帮助页面的设置按钮 3 按照如下步骤设置即可
  • 图解Java线程死锁的必要条件

    文章目录 What is Deadlock发生死锁要如何解决如何预防死锁参考资料 What is Deadlock In concurrent computing a deadlock is a state in which each me
  • 远程LINUX桌面的好用工具,NoMachine.

    安装及使用都比VNC及XManager要好用 xff0c 网站 https www nomachine com 对应下各自的版本后 xff0c 按照网站的说明进行安装就可以了 xff0c 安装过程不需要其他依赖项 xff01 Linux安装
  • 竞赛经验|2019年电赛B题四旋翼无人机组巡线机器人

    竞赛经验 xff5c 2019年电赛B题四旋翼无人机组巡线机器人 参赛背景和比赛回忆 xff1a 1 院校背景 xff1a 2 规则与现实 xff1a 3 比赛流程 xff1a 备赛建议1 器件选择 xff1a 2 针对学习 xff1a 写
  • C语言实现http post请求和get请求,post请求可以上传图片和文件

    文章目录 1 http协议简介2 http协议分析2 1 http请求2 1 1 请求行2 1 1 1 请求方法2 1 1 2 URL2 1 1 3 协议版本2 1 1 4 请求行总结 2 1 2 请求头部2 1 3 请求数据 2 2 ht
  • 软件改变世界

    随着科技的不断进步 xff0c 软件及其相关技术的发展已经深刻地改变了人类社会的方方面面 从交通运输 医疗卫生到商业服务 教育培训 xff0c 软件技术的应用已经深入到我们的日常生活中 xff0c 对我们的生活方式和生产方式都带来了深刻的影
  • MATLAB 比较好入门书籍有哪些推荐

    https www zhihu com topic 19559252 hot https www zhihu com question 19904418 作者 xff1a 陈村 链接 xff1a https www zhihu com qu
  • pymavlink使用简单教程

    这里写自定义目录标题 pymavlink主要包含的模块连接样例 设置任务样例 更改飞行参数param样例 飞行模式总结 pymavlink Pymavlink是MAVLink协议的python实现 自身包括一个源代码生成器 xff08 ge