【全网首发】【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 ARDrone

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()

# 主程序入口
if __name__ == "__main__":
    target_height = 1  # 设置目标高度为1
    fly_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 = host
        self.at_port = at_port
        self.navdata_port = navdata_port
        self.video_port = video_port
        self.watchdog_interval = watchdog_interval
        self.timeout = timeout
        self.bind = bind

        if 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 progressive
        flag.
        '''
        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 send

        Sends 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:
        pass
    VideoMixin = DummyVideoMixin
    VIDEO = False
else:
    del cv2
    from pyardrone.video import VideoMixin
    VIDEO = 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.mfbz.cn/a/129591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公众号标签

公众号标签 本章节,讲解公众号标签的相关内容,支持对标签进行创建、查询、修改、删除等操作,也可以对用户进行打标签、取消标签等操作,对应 《微信公众号官方文档 —— 用户标签管理》 (opens new window)文档。 #1. 表结构 公众…

C语言 用字符串比较函数cmp来做一个门禁:账号密码是否匹配 (干货满满)

#include<stdio.h> #include<string.h> void fun04() {for (int i 0; i < 3; i){char *str01 "hello";char uname[100] ;printf("请输入账号");scanf("%s",uname);char *str02 "123456";char pword[100];printf(&qu…

Halcon Variable Inspect 安装失败

版本 Visual Studio 2022Halcon 20.11 找到Halcon 扩展文件 输入CMD 经过下面博客所示步骤&#xff0c;修改Visual Studio 对应版本 Halcon Variable Inspect 安装失败 替换成功&#xff01;

Python初学者软件以及如何安装和配置,新手入门必看系列。

文章目录 前言一、Python软件二、集成开发环境&#xff08;IDE&#xff09;1.PyCharm2.Spyder3.IDLE 三、包管理工具四、使用Python虚拟环境总结Python技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例6、清华编程大佬出品《漫画看学…

EF Core 数据库映射成实体类

首先在 NuGet 包管理器中安装三个包 Microsoft.EntityFrameworkCore.SqlServer 是一个用于与 SQL Server 数据库进行交互的实体框架核心包。这个包提供了方便的方法和工具&#xff0c;用于在 .NET Core 应用程序中操作 SQL Server 数据库。 Microsoft.EntityFrameworkCore.Too…

QT QDockWidget

QDockWidget是Qt中的一个容器类&#xff0c;用于在主窗口上创建可停靠的子窗口。 设置停靠窗口的一般流程如下: (1)创建一个QDockWidget 对象的停靠窗体。 (2)设置此停靠窗体的属性&#xff0c;通常调用setFeatures()及setAllowedAreas()两种方法。 (3)新建一个要插入停靠窗…

大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

1.引言 上一篇关于大容量硬盘的文章&#xff08;HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏&#xff09;中&#xff0c;我们针对大容量硬盘研发状态&#xff0c;小编最近又有了新发现。WDC希望可以通过HDD和磁带结合&#xff0c;把盘的容量提升到100TB。 2.数据大爆炸的…

使用Keepalived实现双机热备,实现服务高可用

安装&#xff08;所有节点&#xff09; yum -y install keepalived修改配置 vi /etc/keepalived/keepalived.conf :set nu //显示行号 :35 dG // 删除35行以后的所有行ip a将master1虚拟机挂起&#xff0c;再次执行ip a 看vip是否漂移到另一台虚拟机worker1 漂移了&…

【原创】java+swing+mysql教务管理系统设计与实现

摘要&#xff1a; 教务管理系统是一个专门设计用于管理学校教务工作的系统&#xff0c;包括学生信息管理、课程管理、成绩管理等多个模块。本文采用了Java语言和MySQL数据库&#xff0c;利用面向对象编程的思想&#xff0c;实现了各个对象的方法和属性。具体实现过程包括数据库…

Deepsort从入门到精通

1 &#xff0c;sort和Deepsort算法 在目标检测领域&#xff0c;sort&#xff08;Simple Online and Realtime Tracking&#xff09;算法和 DeepSORT&#xff08;Deep Learning for Multi-Object Tracking&#xff09;算法是两种常用的目标追踪算法&#xff0c;它们通常与目标检…

FinClip 产品10月报:官网新增PC终端麒麟版、UOS版下载

FinClip 的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型的相关操作。不妨让我们看看在本月的产品与市场发布亮点&#xff0c;看看是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f…

【狂神说Java】SpringSecurity+shiro

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;【狂神说Java】 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c…

【工具推荐】一键多平台文章发布神器推荐(免费)

hello&#xff0c;大家好&#xff0c;我是你们老朋友洛林&#xff0c;上一篇文章说到自己深受多平台手动发布的折磨「传送门」&#xff0c;准备开发一款文章多平台工具&#xff0c;后来联系到 Wechatsync 原作者进行了简单的沟通&#xff0c;下面是关于以后的一些规划&#xff…

基于springboot的教学在线作业管理系统(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

idea中搭建Spring boot项目(借助Spring Initializer)

创建新项目 启动端口 在项目配置文件application.properties中写入 #启动端口server.port8088编写测试方法 创建控制类文件夹–>便于规范我们新建一个controller包–>建一个HelloWorld.class package com.example.hellospringboot.controller;import org.springframew…

基于JavaWeb+SpringBoot+Vue摩托车商城微信小程序系统的设计和实现

基于JavaWebSpringBootVue摩托车商城微信小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 近年来&#xff0c;随着移动互联网的快速发展&#xff0c;电子商务越来越受到…

Zotero详细功能补充!熟练使用!【进阶版,持续更新】

Zotero安装请参见文章Zotero安装 1.改变条目文件夹 如果直接选择条目直接进行移动&#xff0c;能移动成功&#xff0c;但是原来文件夹和目标文件夹都会存在&#xff0c;实际是复制&#xff01; 如果只想保留在一个文件夹里面&#xff0c;可以选中条目&#xff0c;右击-从分…

工作四年,关于过滤敏感词,我准备这样干

文章目录 &#x1f4c6; 业务场景&#x1f5a5;️业务梳理&#x1f4cc;小技巧 &#x1f4c7;完整代码&#x1f58a;️最后总结胖奥特曼悠闲躺着 &#x1f4c6; 业务场景 提交订单评价时需要对评价内容进行判断&#xff0c;如果出现敏感词则提示修改 &#x1f50a;这不就是写一…

canal实操应用

一、MySQL的binlog日志 1.1、binlog的分类 binlog一般分为三类&#xff1a;statement语句级&#xff0c;记录一条一条的SQL&#xff0c;一条SQL可能更改多行&#xff0c;且SQL语句中如果用到now()函数或者random()函数&#xff0c;会存在数据不一致的问题。row行级&#xff0…

打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?

“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中&#xff0c;都遇到过这个错误提示。那么&#xff0c;究竟什么是d3dcompiler_47.dll文件&#xff1f;为什么会丢失呢&#xff1f;又该如何解决这个问题呢&#xff1f;接下来&#xff0c;我将为大家详…
最新文章