【全网首发】【Python】Python控制parrot ARDrone 2.0无人机

🎉欢迎来到Python专栏~Python控制parrot ARDrone 2.0无人机


  • ☆* o(≧▽≦)o *☆~我是小夏与酒🍹
  • 博客主页:小夏与酒的博客
  • 🎈该系列文章专栏:Python学习专栏
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️
    图标

CSDN

🎉 目录-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指令展示如下:
部分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操作界面,界面部分展示如下(未完工):
ui开发


csdn

🧸结尾


  • ❤️ 感谢您的支持和鼓励! 😊🙏
  • 📜您可能感兴趣的内容:
  • 【Python】Python实现串口通信(Python+Stm32)
  • 【FPGA】串口通信讲解-状态机判断数据值
  • 【Arduino TinyGo】【最新】使用Go语言编写Arduino-环境搭建和点亮LED灯
  • 【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制
    遇见未来

Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/187063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC:使用生成对抗网络GAN实现MINST手写数字图像生成

1 生成对抗网络 生成对抗网络(Generative Adversarial Networks, GAN)是一种非常经典的生成式模型,它受到双人零和博弈的启发,让两个神经网络在相互博弈中进行学习,开创了生成式模型的新范式。从 2017 年以后&#x…

vue项目js原生属性IntersectionObserver实现图片懒加载

vue项目js原生属性IntersectionObserver实现图片懒加载 IntersectionObserver 使用js原生属性IntersectionObserver实现观察img元素是否处于游览器视口中 懒加载原理:给img设置一个默认url图片,观察图片处于视口内以后,动态改变img的url为自己…

如何利用产品帮助中心提升用户体验

在当今竞争激烈的市场中,提供优秀的用户体验是吸引和保留客户的关键。而一个高效和易于使用的产品帮助中心,正成为越来越多企业用以提升用户体验的重要工具。产品帮助中心是一个集中的信息库,为用户提供关于产品功能、故障排除、常见问题解答…

SQL Server SSIS的安装

标题SQL SERVER 安装 下载SQL SERVER数据库:(以SQL SERVER 2022 Developer版本)(https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads?rtc1) 以administrator权限安装: 下载完成后,会出现以下界面&a…

GPIO实验:ARM汇编代码实现LED灯亮灭控制

GPIO实验:ARM汇编代码实现LED灯亮灭控制 一、 汇编工程模板Makefile分析 NAMEasm-led #指定编译的源文件名字 CROSS_COMPILE arm-linux-gnueabihf- #指定交叉编译工具链前缀CC $(CROSS_COMPILE)gcc #指定gcc名字LD $(CROSS_COMPILE)ld #指定链接器名字…

pytorch直线拟合

目录 1、数据分析 2、pytorch直线拟合 1、数据分析 直线拟合的前提条件通常包括以下几点: 存在线性关系:这是进行直线拟合的基础,数据点之间应该存在一种线性关系,即数据的分布可以用直线来近似描述。这种线性关系可以是数据点…

【hcie-cloud】【2】华为云Stack解决方案介绍、缩略语整理 【下】

文章目录 华为文档获取方式、云计算发展背景、坚实基座华为云Stack,政企只能升级首选智能数据湖仓一体,让业务洞见更准,价值兑现更快MRS:一个架构可构建三种数据湖,业务场景更丰富离线数据湖:提供云原生、湖…

使用jdk21预览版 --enable-preview

异常 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project sb3: Compilation failure [ERROR] --enable-preview 一起使用时无效 [ERROR] (仅发行版 21 支持预览语言功能) 解决…

API低代码开发应用场景

什么是API低代码开发平台 API低代码开发平台是一种基于低代码开发的技术平台,它可以帮助企业快速构建和部署API应用程序。该平台通过提供可视化的开发工具、预定义的组件和模板、自动化的代码生成等功能,使得开发者可以在不需要编写大量代码的情况下&am…

秋招进入尾声了,还有哪些公司和岗位可以投递?

24届秋招基本已经进入尾声了,接下来就是秋招补录了,最近在微信群看到一些同学再问哪些公司还在招人的。 在这里跟大家分享一份2024届秋招信息汇总表,目前已更新2000家,不仅有互联网公司,还有外企、国企、各类研究所&am…

【师兄啊师兄2】大爆料,敖乙回归,创造新里程碑,有望做成年番

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《师兄啊师兄》最新资讯消息,玄机公司,作为动漫制作界的佼佼者,其制作的动漫作品一直以来备受瞩目。如今,在斗罗大陆第二部和吞噬星空第四季的热播之下…

ideal一键部署SpringBoot项目jar包到服务器

一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包,然后连接linux服务器,将jar手动上传到服务中,重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…

抢抓泛娱乐社交出海新风口!Flat Ads深圳沙龙活动引爆海外市场

随着全球化进程的加速,中国的应用类APP不断走向国际市场。作为产品和服务的提供者,中国开发者围绕社交泛娱乐创新,开启直播出海、短视频出海、游戏社交出海、1V1 视频出海、音频社交出海等出海热潮。“社交、泛娱乐”融合成为行业主流发展趋势…

【2023-11-09】git使用随记——gitignore文件配置某些文件忽略

git使用随记——gitignore文件配置某些文件忽略 通过git进行版本控制在项目中是非常常见的,一些项目构建上的文件通常是不需要进行版本控制的,也就无需推送到git仓库中,比如前端项目中的node_module目录。提供配置.gitignore文件 但是某些情…

医学图像 ABIDE 等数据集 .nii.gz Python格式化显示

nii.gz 文件 .nii.gz 文件通常是医学影像数据的一种常见格式,比如神经影像(如脑部MRI)。这种文件格式通常是经过gzip压缩的NIfTI格式(Neuroimaging Informatics Technology Initiative)。 要在Python中查看.nii.gz文…

让你认识C++中的模板

目录 一. 泛型编程1、定义 二、函数模板1、定义2、格式3、函数模板的实例化(1)、强制转化(2)、显式实例化 三、类模板1、 类模板的定义格式2、实例3、 类模板的实例化 一. 泛型编程 1、定义 泛型编程:编写与类型无关…

Flink的API分层、架构与组件原理、并行度、任务执行计划

Flink的API分层 Apache Flink的API分为四个层次,每个层次都提供不同的抽象和功能,以满足不同场景下的数据处理需求。下面是这四个层次的具体介绍: CEP API:Flink API 最底层的抽象为有状态实时流处理。其抽象实现是Process Functi…

《研发效能(DevOps)工程师》课程简介(五)丨IDCF

由国家工业和信息化部教育与考试中心颁发的职业技术证书,也是国内首个研发效能(DevOps)职业技术认证,内涵1000页学习教材2000分钟的课程内容讲解460多个技术知识点300多道练习题。 在这里,你不仅可以了解到华为、微软、…

服装展示服务预约小程序的内容如何

互联网电商深入,很多服装商家开始线上卖货经营、会员管理及私域营销等,这也是当今商家们的一个优选项,当然除了直接卖货以外,展示和预约、客户交互也同样是不少商家需要的。 那么商家通过服装展示预约小程序能够实现什么效果呢&a…

Flutter——最详细(AppBar)使用教程

AppBar简介 Material Design 应用栏(标题栏) 使用场景: 顶部标题栏包括一些常用的菜单按钮 属性作用leading左边工具视图automaticallyImplyLeading左边图标的颜色title标题视图actions右边菜单按钮flexibleSpace其高度将与应用栏的整体高度相同bottom左侧底部文本内…