【全网首发】【Python】Python控制parrot ARDrone 2.0无人机
🎉欢迎来到Python专栏~Python控制parrot ARDrone 2.0无人机
- ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹
- ✨博客主页:小夏与酒的博客
- 🎈该系列文章专栏:Python学习专栏
- 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
- 📜 欢迎大家关注! ❤️

🎉 目录-Python控制parrot ARDrone 2.0无人机
- 一、前言
- 二、效果演示
- 三、ARDrone 2.0无人机介绍
- 四、环境搭建
- 五、讲解示例代码
- 六、后记

一、前言
本篇文章主要讲解如何使用Python来对parrot ARDrone 2.0无人机进行操作控制。
在网上查找过许多关于ARDrone的SDK资料,但大部都是使用C++来进行开发,有一部分使用Python开发的资料中却没有包含完整且正确的库。为了解析无人机发送的UDP数据信息,我个人觉得使用Python来实现是相对简单的,于是查找了大量的资料之后,终于可以使用Python来控制无人机了!
Python技能树:Python入门技能树。
版本:Python 3.10。
IDE:PyCharm。
二、效果演示
在调试和测试的过程中,我使用PyCharm进行开发:
【Python控制ARDrone 2.0无人机】演示视频
三、ARDrone 2.0无人机介绍
Parrot AR.Drone四轴遥控飞机是世界知名无线通信厂商Parrot出品的高级玩物,与第一产品时隔两年多, Parrot公司研发了2.0版本,即这次数字尾巴收到的AR.Drone 2.0 Power Edition。拥有极高精度的3轴MEMS陀螺仪、3轴加速度计、3轴磁强计、压力传感器和超声波传感器的AR.Drone 2.0,提供了自动起飞、降落、悬停的功能。
ARDrone 2.0无人机的官网和官方提供的sdk获取:ARDrone 2.0。
获取官方的sdk界面:

目前项目中使用的ARDrone 2.0无人机整体展示:

去除保护外壳的正面和背面:


四、环境搭建
一开始选择使用Python来进行开发,就是因为Python有着强大的编程生态,能极大地提高开发效率。
开发中主要使用的库是:pyardrone。需要先获取到这个库,才可以轻松地开发无人机。
如果你当前的环境比较好的话,直接使用pip下载:
pip install pyardrone
或者
pip3 install pyardrone
📜当然了,为了提高下载速度和下载成功率,还是需要使用国内镜像源下载:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyardrone
或者
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyardrone
尝试过很多的方法,从github上看了好多大佬项目中的pyardrone包,都存在代码不完整且有错误的情况。上述pyardrone的安装方法是目前最OK的。
五、讲解示例代码
下面展示基本的示例代码,连接无人机的WIFI,控制无人机飞到1m的高度,悬停一段时间后降落:
from pyardrone import ARDronedef fly_to_height(target_height):drone = ARDrone()if not drone.connected:drone.connect()# 根据目标高度执行相应操作drone.takeoff()drone.move(target_height)# 其他飞行操作drone.hover()drone.land()if drone.connected:drone.disconnect()# 主程序入口
if __name__ == "__main__":target_height = 1 # 设置目标高度为1fly_to_height(target_height)
定义了一个控制飞机飞到固定高度、悬停一段时间并降落的函数:
def fly_to_height(target_height):drone = ARDrone()if not drone.connected:drone.connect()# 根据目标高度执行相应操作drone.takeoff()drone.move(target_height)# 其他飞行操作drone.hover()drone.land()if drone.connected:drone.disconnect()
上述代码即能实现对无人机的简单控制。
同时,在pyardrone中,包含了UDP的ip地址和端口配置:
class ARDroneBase(BaseClient):def __init__(self,*,host='192.168.1.1',at_port=5556,navdata_port=5554,video_port=5555,watchdog_interval=0.5,timeout=0.01,bind=True,connect=True):self.host = hostself.at_port = at_portself.navdata_port = navdata_portself.video_port = video_portself.watchdog_interval = watchdog_intervalself.timeout = timeoutself.bind = bindif connect:self.connect()
...
对控制最有用的代码如下,包括起飞、降落、升高和悬停等:
class HelperMixin:def takeoff(self):'''Sends the takeoff command.'''self.send(at.REF(at.REF.input.start))def land(self):'''Sends the land command.'''self.send(at.REF())def emergency(self):'''Sends the emergency command.'''self.send(at.REF(at.REF.input.select))def _move(self, roll=0, pitch=0, gaz=0, yaw=0):'''Same as sending :py:class:`~pyardrone.at.PCMD` command with progressiveflag.'''self.send(at.PCMD(at.PCMD.flag.progressive, roll, pitch, gaz, yaw))def move(self, *,forward=0, backward=0,left=0, right=0,up=0, down=0,cw=0, ccw=0):'''Moves the drone.To move the drone forward at 0.8x speed:>>> drone.move(forward=0.8)To move the drone right at 0.5x speed and upward at full speed:>>> drone.move(right=0.5, up=1)To rotate clockwise at 0.7x speed:>>> drone.move(cw=0.7):param forward: speed for moving forward:param backward: speed for moving backward:param left: speed for moving left:param right: speed for moving right:param up: speed for moving up:param down: speed for moving down:param cw: speed for rotating clockwise:param ccw: speed for rotating counter-clockwise'''self._move(roll=right-left,pitch=backward-forward,gaz=up-down,yaw=cw-ccw)def hover(self):'''Sends the hover command.'''self.send(at.PCMD(flag=0))
其中,向无人机发送控制指令的部分如下:
class ARDroneBase(BaseClient):
...def send(self, command):''':param ~pyardrone.at.base.ATCommand command: command to sendSends the command to the drone,with an internal increasing sequence number.this method is thread-safe.'''self.at_client.send(command)
...
对于向无人机发送的具体指令,可以参考官方提供的sdk手册(AT Commands部分),或者从pyardrone.at中查看。手册中的部分AT指令展示如下:

除了上述内容之外,pyardrone中还提供了opencv(cv2)相关的开发,部分展示如下:
# import VideoMixin only if opencv is available
try:import cv2
except ImportError:class DummyVideoMixin:passVideoMixin = DummyVideoMixinVIDEO = False
else:del cv2from pyardrone.video import VideoMixinVIDEO = True
六、后记
使用Python开发ARDrone 2.0无人机,同时还便于使用PyQt5开发对应的UI操作界面,界面部分展示如下(未完工):


🧸结尾
- ❤️ 感谢您的支持和鼓励! 😊🙏
- 📜您可能感兴趣的内容:
- 【Python】Python实现串口通信(Python+Stm32)
- 【FPGA】串口通信讲解-状态机判断数据值
- 【Arduino TinyGo】【最新】使用Go语言编写Arduino-环境搭建和点亮LED灯
- 【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制
Tips
- 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
- 优质的纪念文章将会获得神秘打赏哦
相关文章:
【全网首发】【Python】Python控制parrot ARDrone 2.0无人机
🎉欢迎来到Python专栏~Python控制parrot ARDrone 2.0无人机 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:Python学习专栏 文章作者技术和水平有限,如果文中出现错误…...
DPU国产生态版图又双叒扩大了
DPU朋友圈迎来30新伙伴!近期,中科驭数已与联想、中科可控、统信、欧拉、龙蜥社区、新支点、亚信科技、人大金仓、瀚高、南大通用、GreatSQL、阿里云、曙光云等超30家关键厂商完成兼容性互认证。测试报告显示,中科驭数DPU系列产品在产品兼容性…...
YOLOv5算法进阶改进(3)— 引入深度可分离卷积C3模块 | 轻量化网络
前言:Hello大家好,我是小哥谈。深度可分离卷积是一种卷积神经网络中的卷积操作,它可以将标准卷积分解为两个较小的卷积操作:深度卷积和逐点卷积。深度卷积是在每个输入通道上分别执行卷积,而逐点卷积是在所有通道上执行卷积。这种分解可以大大减少计算量和参数数量,从而提…...
Linux的root用户
拥有最大权限的用户名为root su和exit命令 su命令就是用于账户切换的系统命令Switch user 语法:su - [用户名] -符号可选,表示是否在切换用户后加载环境变量,建议带上 参数:用户名,表示要切换的用户,用…...
linux环境安装SVN,以及常用的SVN操作
1、检查系统是否已经安装如果安装就卸载 检查: svnserve --version 卸载: yum remove subversion 2、安装 yum install subversion 3、建立SVN库(文件位置可自由) 创建仓库文件夹: mkdir -p /opt/svn/repositor…...
30天精通Nodejs--第十天:OS
目录 引言OS 模块简介核心概念基本用法获取 CPU 架构获取内存信息获取系统平台高级特性CPUS网络接口引言 os 模块是一个非常重要的组成部分,它提供了一系列用于获取和处理操作系统信息的工具函数,使得我们能够在 Node.js环境中获取有关系统的各种信息。在本文中,将深入介绍…...
C#使用时序数据库 InfluxDB
一、安装 https://docs.influxdata.com/influxdb/v2/install/?tWindows 解压后使用cmd运行 访问 localhost:8086 配置 第一次登入会初始化 配置登入账号 保存TOKEN 这个TOKEN用于后期代码链接访问数据库,忘记了只能删除重新生成 点击QUCK START进入管理页面 …...
正则表达式:验证中英文长度限制16个字符(8个中文),支持中文字母数字或者下划线
1.中文字母数字或者下划线 2.长度限制16个字符(8个中文) html: <input class"form-control text" maxlength"17" name"name" placeholder"输入16个字符以内的备注名称" type"text" v-model.trim"remarkName" …...
kafka和rocketMq的区别
kafka topic 中每一个分区会有 Leader 与 Follow。Kafka 的内部机制可以保证 topic 某一个分区的 Leader 与 Follow 不在同一台机器上 Leader 节点承担一个分区的读写,Follow 节点只负责数据备份 如果 Leader 分区所在的 Broker 节点宕机,会触发主从节…...
Git推送本地代码到远程仓库
Git推送本地代码到远程仓库 1、首先需要安装Git,如果已经安装,请跳过。下载地址:https://git-for-windows.github.io/ 2、安装好git服务器后。首先找到你项目的文件夹,比如项目名称为Item,进入到这个文件夹࿰…...
OncePerRequestFilter详解
OncePerRequestFilter是什么 OncePerRequestFilter是Spring框架提供的一个过滤器,确保在一次HTTP请求期间只执行一次特定的过滤器逻辑。它继承了GenericFilterBean类,并实现了javax.servlet.Filter接口。在Spring框架中,过滤器是一种拦截器&…...
Accelerate 0.24.0文档 二:DeepSpeed集成
文章目录 一、 DeepSpeed简介二、DeepSpeed集成(Accelerate 0.24.0)2.1 DeepSpeed安装2.2 Accelerate DeepSpeed Plugin2.2.1 ZeRO Stage-22.2.2 ZeRO Stage-3 with CPU Offload2.2.3 accelerate launch参数 2.3 DeepSpeed Config File2.3.1 ZeRO Stage-…...
【系统架构设计】架构核心知识: 2.3 UML图
目录 一 UML 1 用例图 2 类图/对象图关系 3 活动图 4 顺序图 5 通信图...
2023年09月青少年软件编程(C语言)等级考试试卷(三级)
青少年软件编程(C语言)等级考试试卷(三级) 谁是你的潜在朋友 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会…...
SQLite3 数据库学习(一):数据库和 SQLite 基础
参考引用 SQL 必知必会SQLite 权威指南(第二版)关系型数据库概述 1. 数据库基础 1.1 什么是数据库 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件) 可以将其想象为一个文…...
上机4KNN实验4
目录 编程实现 kNN 算法。一、步骤二、实现代码三、总结知识1、切片2、iloc方法3、归一化4、MinMaxScale()5、划分测试集、训练集6、KNN算法 .py 编程实现 kNN 算法。 1、读取excel表格存放的Iris数据集。该数据集有5列,其中前4列是条件属性…...
产品经理如何保持核心竞争力?学会这些方法
如今,内卷的风已经吹到各行各业,产品经理也不例外。想要在内卷日益严重的环境中生存下来,产品经理就需要学会保持自己的核心竞争力。那么,产品经理要如何才能在内卷时代持续保持自己的核心竞争力呢? 1、建立快速学习的…...
终知人生苦短,何必自我为难
不是少年比他当年的那个目标更强,也不是他完全丧失了冲关过坎的勇气,而是他知道了自己能力的边界和极限,迫切需要外界的帮助。 不再自我设限,不再自我挑战,而是想用最简便、最快捷、最省精力的路径,解决掉困…...
C++阶段复习‘‘‘‘总结?【4w字。。。】
文章目录 前言类和对象C类定义和对象定义类成员函数C 类访问修饰符公有(public)成员私有(private)成员受保护(protected)成员 继承中的特点类的构造函数和析构函数 友元函数内联函数this指针指向类的指针类…...
嵌入式行业算青春饭吗?
今日话题,嵌入式行业算青春饭吗?嵌入式行业的技术要求确实非常广泛,需要深厚的知识广度和深度。这意味着入行门槛较高,我们需要了解不仅是软件和硬件,还要熟悉底层接口和硬件信号的处理方式,了解数据在计算…...
Shiro RememberMe反序列化漏洞深度解析与实战利用
1. 这个漏洞不是“老古董”,而是理解Java安全边界的活教材很多人看到CVE-2016-4437,第一反应是“Shiro都淘汰了,还讲这个干啥?”——我去年在给一家做政企内部系统的客户做渗透复测时,就遇到过一个上线三年的审批平台&…...
[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;
一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者(脑力大脑)大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成,负责 “想方案、定步骤”管理者(流程总管)智能体编排框架(…...
0.2毫秒快速启动的操作系统
在工业控制以及航空航天等核心场景,极速启动就是高可靠系统的生命线。0.2毫秒超快启动搭配硬件看门狗,让设备在掉电重启、异常恢复时瞬时归位,关键任务永不延误! https://www.bilibili.com/video/BV11mLY6VERt/?spm_id_from333.1…...
pan-baidu-download:百度网盘多线程下载加速器架构解析与性能优化指南
pan-baidu-download:百度网盘多线程下载加速器架构解析与性能优化指南 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download pan-baidu-download是一款基于Python开发的百度网盘命令行下载…...
Windows文件夹共享
目标:同一局域网实现在一台计算机上共享文件夹,在另一台电脑访问一、电脑A 1.点击要共享的文件夹 -> 属性 -> 共享2.添加Everyone用户组3.控制面板中网络共享关闭密码保存,在访问时不用输入账号密码。二、电脑B 1.在文件资源管理器路径…...
谷氨酸发酵过程的软测量建模【附模型】
✨ 长期致力于软测量、谷氨酸发酵、动力学模型、支持向量机、高斯过程、变量选择、异常状态研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)多阶段高斯…...
Office RibbonX Editor:简单三步打造你的专属Office界面
Office RibbonX Editor:简单三步打造你的专属Office界面 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-edit…...
OpenCore Legacy Patcher完全指南:3步让旧款Mac焕发新生的终极方案
OpenCore Legacy Patcher完全指南:3步让旧款Mac焕发新生的终极方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否拥有一台性能尚可但已被…...
终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词
终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了在听歌时手动搜索歌词…...
如何用HsMod解锁炉石传说60+项隐藏功能:终极优化指南
如何用HsMod解锁炉石传说60项隐藏功能:终极优化指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx开发的炉石传说功能增强插件,为玩家提供…...

