【Tello无人机】实物轨迹跟踪控制

上一篇介绍了Tello无人机仿真环境中的飞行控制,本篇将介绍tello无人机在物理系统中的轨迹跟踪,实现实物无人机的速度控制。本文采用的无人机为Tello TT,TELLO Talent由飞行器和拓展配件两部分组成。飞行器配备视觉定位系统,并集成飞控系统,能稳定悬停、飞行。可显示高清画面,并可实现拍照、录影、弹跳、全向翻滚以及一键飞行等功能。Tello相机可拍摄500万像素照片与720ρ高清视频。最长飞行时间约为13分钟。Tello TT SDK通过WiFi-UDP协议与飞行器连接,让用户可以通过文本指令控制飞行器。

无人机控制指令
这里使用库文件DJITelloPy,是一个大疆Tello无人机的Python接口, 使用官方Tello SDKTello EDU SDK。 这个库支持使用所有的tello命令,可以轻松获取视频流,接受并解析状态包,可以操控多架无人机,支持Python3.6以上版本。

使用pip安装

pip install djitellopy -i https://pypi.tuna.tsinghua.edu.cn/simple/

本系统是要控制无人的速度,采用的接口是send_rc_control(left_right_velocity, forward_backward_velocity, up_down_velocity, yaw_velocity)

光学定位系统
OptiTrack是高性能光学跟踪系统,可以获取场地中物体的亚像素级位置。采用被动式红外光学定位技术,每套系统内包含一个中央处理单元和多台红外摄像头,系统内的摄像头由中央处理单元统一调配并进行计算。 在被跟踪的目标物体表面上会固定一些红外反光率很高的标识点,以供系统进行跟踪和测量。下图安装在Tello上的即为定位标识点。 

使用Motive软件,根据定位点的位置,构造刚体,如下图所示

 可在project视图中查看刚体的的位姿信息,即无人机的位置x,y,z及欧拉角pitch,yaw,roll

在Data Streaming视图中,开启局域网数据广播,用于数据传输,注意要填写本机IP及接收数据电脑的IP地址。

经测试,工作在路由模式的Tello使用速度控制指令进行控制时,延时较高,不满足实验要求,所以采用直连模式进行实验,但此时的发送控制指令的计算机需连接tello无线网,无法接收定位系统的数据,故采用另一个计算机进行数据中转,数据传输框图如下图所示:

 点击【Tello无人机】实物轨迹跟踪控制 - 古月居可查看全文

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此代码需要安装tellopy库和opencv-python库。 ```python import time import cv2 import tellopy # 定义手势识别函数 def gesture_recognition(): # 打开电脑摄像头 cap = cv2.VideoCapture(0) # 读取手势识别模型 gesture = cv2.CascadeClassifier("gesture.xml") while True: # 读取摄像头中的图像 ret, frame = cap.read() # 灰度化处理 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 进行手势检测 hands = gesture.detectMultiScale(gray, 1.3, 5) # 绘制矩形框 for (x, y, w, h) in hands: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) # 显示图像 cv2.imshow("gesture recognition", frame) # 按下q键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows() # 定义tello无人机控制函数 def tello_control(): # 创建tello对象 drone = tellopy.Tello() # 连接tello无人机 drone.connect() # 启动视频流传输 drone.start_video() # 等待无人机准备就绪 time.sleep(1) # 打开电脑摄像头 cap = cv2.VideoCapture(0) # 读取手势识别模型 gesture = cv2.CascadeClassifier("gesture.xml") # 设置飞行方向 direction = "" while True: # 读取摄像头中的图像 ret, frame = cap.read() # 灰度化处理 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 进行手势检测 hands = gesture.detectMultiScale(gray, 1.3, 5) # 绘制矩形框 for (x, y, w, h) in hands: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) # 判断手势 if w > h: direction = "left" if x < 200 else "right" if x > 400 else "" else: direction = "up" if y < 150 else "down" if y > 350 else "" # 显示图像 cv2.imshow("tello control", frame) # 按下q键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 控制tello无人机飞行 if direction == "left": drone.left(30) elif direction == "right": drone.right(30) elif direction == "up": drone.up(30) elif direction == "down": drone.down(30) else: drone.hover() # 停止视频流传输 drone.stop_video() # 断开连接 drone.disconnect() # 释放资源 cap.release() cv2.destroyAllWindows() if __name__ == '__main__': # 执行手势识别函数 # gesture_recognition() # 执行tello无人机控制函数 tello_control() ``` 在代码中,手势识别函数使用OpenCV库进行手势检测,识别手势后显示在电脑屏幕上,通过判断手势的方向,将其转换为对tello无人机控制指令。 tello无人机控制函数通过连接tello无人机,启动视频流传输,打开电脑摄像头,读取手势识别模型,检测手势方向,并将其转换为对tello无人机控制指令。最后,停止视频流传输,断开连接,释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值