📅  最后修改于: 2023-12-03 14:49:45.687000             🧑  作者: Mango
Tello 是 DJI 推出的一款极其便携小巧的无人机,易于携带,提供多种飞行模式以及传感器,具有出色的稳定性和易操作性。使用 Python 语言,我们可以通过 Tello SDK 轻松地对 Tello 无人机进行控制。
在开始编写 Python 脚本之前,确保您已经安装了以下依赖:
OpenCV
: 需要使用这个库来接收 Tello 的视频流数据(如果你不需要飞行时显示视频,可以不用安装)tellopy
: 一个使用 Python 编写的,可以直接与 Tello 进行通讯操作的库pygame
: 如果想使用 Gamepad 进行操作,需要安装这个库pip install opencv-python
pip install tellopy
pip install pygame
使用 tellopy 库中的 Tello 类,可以轻松地与 Tello 进行通讯并控制它的飞行。
下面是 Tello 类中的几个关键方法:
connect()
: 连接 Tellotakeoff()
: 起飞land()
: 降落up(x)
: 向上飞 x 厘米down(x)
: 向下飞 x 厘米left(x)
: 向左飞 x 厘米right(x)
: 向右飞 x 厘米forward(x)
: 向前飞 x 厘米backward(x)
: 向后飞 x 厘米rotate_cw(x)
: 顺时针旋转 x 度rotate_ccw(x)
: 逆时针旋转 x 度使用 Tello 的 Wi-Fi 与 PC 或者移动设备建立连接,即可接收 Tello 发送的视频流。通过使用 Opencv 可以轻松处理这些视频流:
import cv2
from tellopy import Tello
tello = Tello()
# 连接 Tello
tello.connect()
# 开始视频流处理
tello.start_video()
while True:
# 读取视频内容
frame = tello.get_frame_read().frame
# 处理视频
# ...
# 显示视频
cv2.imshow("frame", frame)
# 退出
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# 释放所有资源
cv2.destroyAllWindows()
tello.end()
使用键盘可以让我们方便的操作 Tello 进行飞行和其他控制。
import curses
import time
from tellopy import Tello
tello = Tello()
# 连接 Tello
tello.connect()
# 获取屏幕对象
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(True)
try:
while True:
# 读取输入
char = screen.getch()
if char == ord("q"):
break
elif char == curses.KEY_UP:
# 向上飞 50cm
tello.up(50)
elif char == curses.KEY_DOWN:
# 向下飞 50cm
tello.down(50)
elif char == curses.KEY_LEFT:
# 向左飞 50cm
tello.left(50)
elif char == curses.KEY_RIGHT:
# 向右飞 50cm
tello.right(50)
elif char == ord("t"):
# 起飞
tello.takeoff()
elif char == ord("l"):
# 降落
tello.land()
elif char == ord("r"):
# 顺时针旋转90度
tello.rotate_cw(90)
elif char == ord("e"):
# 逆时针旋转90度
tello.rotate_ccw(90)
finally:
# 关闭键盘输入接口
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.endwin()
tello.end()
如果你使用的是 XBox 360 控制器,而且已经安装好了 pygame 库,那么就可以使用以下代码操作 Tello。
import pygame
import time
from tellopy import Tello
tello = Tello()
# 连接 Tello
tello.connect()
# 初始化 pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
try:
while True:
pygame.event.pump()
# 获取所有游戏手柄的状态
axes = [joystick.get_axis(i) for i in range(joystick.get_numaxes())]
buttons = [joystick.get_button(i) for i in range(joystick.get_numbuttons())]
# 根据游戏手柄状态控制 Tello
if buttons[0]:
# 起飞
tello.takeoff()
elif buttons[1]:
# 降落
tello.land()
elif buttons[4]:
# 顺时针旋转90度
tello.rotate_cw(90)
elif buttons[5]:
# 逆时针旋转90度
tello.rotate_ccw(90)
elif abs(axes[1]) > 0.1:
# 与左边 stick 的垂直轴控制上下
throttle = int(axes[1] * 50)
tello.up(throttle)
elif abs(axes[0]) > 0.1:
# 与左边 stick 的水平轴控制左右
throttle = int(axes[0] * 50)
tello.left(throttle)
finally:
joystick.quit()
tello.end()
以上是 Python 控制 Tello 无人机的基本方法和操作,希望能对大家有所帮助。操作 Tello 可以带来一些有趣的体验,但同时一定要注意安全措施,避免产生危险。