【Tello无人机】多机编队控制

在现代工业、环境监控和城市安防应用中,多机器人系统(MRS)的应用日益广泛。相较于单一机器人系统,多机器人系统在执行复杂任务时不仅效率更高,而且对单一故障的鲁棒性更强。本文介绍了Tello无人机编队控制方法,设计了五架无人机的编队任务,并在物理中进行了实现。

通讯接口

可使用官方的Tello SDK通过电脑或手机无线2.4 GHz 802.11n WiFi连接控制无人机。无人机控制指令主要是通过UDP端口发送文本消息来实现。总的来说,与Tello无人机通信有三个基本的数据流:

  1. 命令上行流,可以发送文本命令直接控制飞行。SDK支持多种命令,从简单的平移和旋转到执行更复杂的飞行轨迹,比如沿曲线飞行。该协议还提供了确认机制,无人机的飞行控制器会返回一系列错误代码。

  2. 状态数据和遥测下行流,向用户提供基本的Tello遥测数据,比如横滚-俯仰-偏航定位、平移速度、加速度、电池电量以及通过气压和飞行时间传感器得到的当前高度信息。

  3. 视频下行流,利用机载720p 30 fps摄像头,可以像访问标准IP摄像头视频流一样独立访问。

速度控制器设计

根据给定速度与无人机的实际飞行速度,进行数据采集与系统辨识,下图为采集数据的曲线图,四个曲线图分别代表无人机在X、Y、Z轴的速度和Yaw角度的变化,将无人机的设定速度(红色实线)和实际飞行速度(黑色虚线)进行了比较。


采用Matlab系统辨识工具箱根据采集的输入输出数据进行运动学模型辨识,得到以下的辨识结果,并利用PID控制器参数整定工具箱进行控制器参数整定,得到如下控制器参数


经过PID控制器作用后的系统响应曲线如下图:

编队实现

定位阶段:对于编队中的每个机器人𝑖,其中𝑖=1,2,3,4,5,参考位置𝑝𝑟𝑒𝑓[𝑖]计算公式如下:

点击【Tello无人机】多机编队控制 - 古月居 (guyuehome.com)可查看全文

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值