python实现大疆Tello无人机控制平台并实现语音控制/手势控制/人脸跟踪/绿球跟踪/拍照录像

介绍

本项目是我的一个课程设计。本来打算做大型四旋翼无人机的控制,后来老师给了两个Tello无人机(分别是带拓展板和不带拓展板的),就转到了做Tello的控制。项目的GUI界面和后台逻辑以及功能整合、整体优化调试由我完成,其他队员负责各视觉功能子模块的实现和调试。

源码及项目详细介绍请看GitHub仓库:Tello智能信息处理平台

此平台使用python语言开发,可用于控制大疆公司的Tello系列无人机,并利用无人机的摄像头、红外等传感器完成一系列视觉功能,包括:目标检测与跟踪(绿色小球与人脸)、手势控制、体态控制等。
也可控制Tello进行拍照、录像,以及做出一些抛飞、翻转、手上降落等花式动作。

主界面

控制

键盘控制

键盘控制一直处于开启状态。每个键盘键位对应的功能如下:

  • tab:起飞
  • L/P/G/H:降落/悬停/抛飞/手上降落
  • W/A/S/D:向前/左/后/右
  • U/I:向上/下
  • J/K:顺/逆时针旋转
  • Z/X/C/V:前/后/左/右空翻

语音控制

有效语音指令如下:

  • 起飞;
  • 降落;
  • 悬停;
  • 向前/后/左/右/上/下飞x厘米(x=20~500);
  • 顺时针旋转x度(x=1~360);
  • 向前/后/左/右翻滚;
  • 速度设为x厘米每秒(x=10~100);
  • 向前/后/左/右;(不建议,此指令会让无人机一直朝某个方向飞,直到得到“停”指令);
  • 停;
    语音控制

视觉功能

人脸跟踪

在菜单栏开启人脸跟踪功能后,无人机会搜寻人脸目标(最好只有一个),然后靠近人脸并保持在一定的安全距离内,且随着人的移动而移动。
人脸跟踪

绿球跟踪

与人脸跟踪类似,开启此功能后,无人机能够检测跟随绿色小球(球不要太小)。
绿球跟踪

手势控制

开启此功能后,会显示一个子窗口,并显示计算机摄像头视频流。识别出比划的手势后,无人机会做出相应的动作。为了避免连续识别并发出指令,我们设置了每次跳过一定帧数后再识别一次。
手势控制
支持的手势如下:

  • 双手合十:启动;
  • 大拇指向上:起飞;
  • 大拇指向下:降落;
  • 一/二/三/四/五/六:向上/下/左/右/前/后飞x厘米;
  • 七/八:顺/逆时针旋转90度;
  • 九:悬停;

飞行速度与飞行步长与主界面中对滑块设置的值有关。

体态控制

我们加入这个功能的初衷是想通过人体的姿势来控制无人机。
pose
但是我们没有时间去训练自己的轻量检测模型。我们寻找到了AlphaPose这个开源姿势检测库,并选择其中运行速度较快的一个模型融合进我们的平台中。
尽管如此,检测速度还是无法达到我们的预期。而且由于整个项目是在我的macOS系统上构建,无法使用CUDA加速计算,因此整体检测速度非常慢。

为了避免危险情况发生,我并没有为体态检测结果设置相应的无人机指令,只将体态检测结果显示在主界面上。

拍照录像

在主界面点击拍照后,会将当前无人机原始画面以jpeg格式存储到本地。

点击录像后,程序开始将无人机原始画面以avi格式编码为视频流,再次点击录像按钮后,停止录像并将视频保存到本地。

结语

我们大约用了十天左右的时间完成这个平台,比较仓促,有些功能还能够再完善一下。但是在答辩结束后我们已经将两个无人机还给老师了,如果你对Tello感兴趣的话,可以在我们项目的基础上添加更多的功能以及完善一下逻辑和bug。

项目源码在文章开头的链接里,感兴趣的朋友可以fork一下,点个星星哦

Tello无人机是由大疆创新(DJI)推出的一款小型教育用无人机,可以通过Python进行编程控制。通过Python控制Tello无人机,可以实现各种自动化飞行任务和功能。以下是一些基本步骤和示例代码,帮助你开始使用Python控制Tello无人机。 ### 基本步骤 1. **安装必要的库**: 首先,你需要安装`djitellopy`库,这是一个用于控制Tello无人机Python库。你可以使用pip来安装它: ```bash pip install djitellopy ``` 2. **连接无人机**: 确保你的计算机连接到Tello无人机的Wi-Fi网络。通常,无人机的Wi-Fi名称类似于`TELLO-XXXXXX`。 3. **编写控制代码**: 下面是一个简单的示例代码,展示如何连接无人机执行一些基本操作: ```python from djitellopy import Tello import time # 创建Tello对象 tello = Tello() # 连接到无人机 tello.connect() # 获取电池电量 battery = tello.get_battery() print(f"Battery: {battery}%") # 起飞 tello.takeoff() time.sleep(5) # 向左飞1米 tello.move_left(1) time.sleep(2) # 向右飞1米 tello.move_right(1) time.sleep(2) # 向前飞1米 tello.move_forward(1) time.sleep(2) # 向后飞1米 tello.move_back(1) time.sleep(2) # 降落 tello.land() ``` ### 详细说明 - **连接无人机**:使用`connect()`方法连接到无人机。 - **获取电池电量**:使用`get_battery()`方法获取无人机的电池电量。 - **起飞和降落**:使用`takeoff()`和`land()`方法控制无人机的起飞和降落。 - **移动无人机**:使用`move_left()`, `move_right()`, `move_forward()`, `move_back()`方法控制无人机的移动。 ### 注意事项 - 确保无人机有足够的电量进行飞行。 - 在室内飞行时,确保周围环境安全,避免碰撞。 - 初次飞行时,建议在开阔地带进行测试。 通过这些基本步骤和示例代码,你可以开始使用Python控制Tello无人机实现各种复杂的飞行任务。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

々云逸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值