# tello_fly **Repository Path**: lanlanlanbenben/tello_fly ## Basic Information - **Project Name**: tello_fly - **Description**: 使用TELLO配合ROS做一些有意思的事情 - **Primary Language**: C++ - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 4 - **Created**: 2021-08-16 - **Last Updated**: 2022-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README TELLO & rotors_simulator的仿真(ACURO目标跟随) # 前言 功能包说明 | 名称 | 功能 | 所含文件 | | -------------------- | ------------------------------------------- | ----------------- | | common | 包含公用的头文件
包含公用的消息(msg) | include
msgs | | drone_control | 用于rotors_simulator中仿真模型的控制 | | | drone_ground_station | 显示rotors_simulator仿真时的一些状态 | | | drone_simulator | 用于rotors_simulator中仿真模型的控制 | | | | | | | tello_contorl | TELLO的控制 | | | readme_image | 一些效果图片,某些会 | | # 1. 概述 ## 1.1 TELLO节点说明 本 ROS 包建立在非官方的[TelloPy](https://github.com/hanyazou/TelloPy)库[之上](https://github.com/hanyazou/TelloPy)。此时使用[TelloPy](https://github.com/hanyazou/TelloPy)库是因为它提供了比官方[Tello SDK](https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello SDK 2.0 User Guide.pdf)或任何其他非官方库更多的功能。tellopy库的ROS封装使用[Tello_driver](https://github.com/anqixu/tello_driver) 这个ROS包。这个 ROS 包的开发追求不修改 TelloPy 库,而是以封装的方式对 ros_driver 包进行任何修改或添加。这可以防止在更新 TelloPy 库时破坏功能。该包的详细介绍可在[tello_driver的ROS页面](http://wiki.ros.org/tello_driver) 为了更好的适应控制,在原节点tello_driver_node基础上修改了控制部分的指令,自封装的节点名称为: tello_cmd_node 修改内容如下: | tello_driver_node | tello_cmd_node | | ----------------- | ------------------------------- | | self.set_pitch | self.backward
self.forward | | self.set_roll | self.right
self.left | | self.set_throttle | self.down
self.up | 改动原因: * throttle给0时可能真的变为0(降落至tello可以飞行的最低点,此时只能响应land指令) * 原来的三个函数需要输入小数(-1~1),修改后输入(-100,100),只下发整数某些时刻可以避免有符号数溢出的bug ## 1.2 算法和框架说明 本ROS功能包的算法、框架是基于[promethues](https://github.com/amov-lab/Prometheus)项目进行移植,由于TELLO与PX4/pixhawk有较大差别(体现在控制逻辑、数据回传),以及订阅的相机话题来源于TELLO的相机数据,而promethues的相机话题来源与机载计算机。因此主要修改节点为 a. sender(发送),estimator(位置、速度、姿态估计) b. terminal(交互终端) 目前移植实现如下功能(按照launch文件说明): | 序号 | 名称 | 功能 | | ---- | ------------------------------ | ----------------------------------------------------- | | 1 | tello_estimator | 测试tello是否能够连接,查看相机是否正常 | | 2 | tello_sender | 利用terminal交互节点,控制tello飞行(非指点飞行) | | 3 | aruco_det_single
web_cam0 | 利用usb相机测试aruco码的识别,本人使用奥比中光pro测试 | | 4 | tello_track_test | tello的二维码跟踪测试 | # 2.安装与使用 前置条件: * 操作系统:ubuntu 18.04.5 LTS * ROS:melodic版本 * 计算机具备wifi功能 ## step1. 安装tellopy包(python) 详细安装过程:https://github.com/hanyazou/TelloPy 建议源代码安装 ``` $ git clone https://github.com/hanyazou/TelloPy $ cd TelloPy $ python setup.py bdist_wheel $ pip install dist/tellopy-*.dev*.whl --upgrade ``` 测试起飞: 这个例子让 Tello 起飞。Tello 将在几秒钟后自动着陆。 ``` $ python -m tellopy.examples.simple_takeoff ``` 测试视频显示: ``` $ pip install av $ pip install image $ python -m tellopy.examples.video_effect ``` 【注意1】原安装过程中需要安装opencv,但ROS通常存在opencv版本,若opencv不可用,请按照ros的opencv安装方式进行配置 【注意2】在 Ubuntu 16.04 上安装 PyAV 需要至少版本 3 的 ffmpeg: ``` $ sudo add-apt-repository ppa:jonathonf/ffmpeg-3` `$ sudo apt update && sudo apt install ffmpeg ``` 【注意3】pyav最新版可能无法安装,本人使用的是6.0,0 ## STEP2. 安装tello_driver 并加入修改节点 【注意1】该ROS包只有ros kinetic的二进制文件,而且需要加入修改节点,所以需要编译安装 ``` $ cd {你的工作空间名}/src ``` ``` $ git clone --recursive https://github.com/appie-17/tello_driver.git ``` ``` $ cd .. ``` ``` $ catkin_make ``` ``` $ source devel/setup.bash ``` 如果不想每次运行都运行source,可以修改.bashrc,在最后一行 ``` source /home/{你的用户名}/{你的工作空间名}/devel/setup.bash ``` 测试: - Turn on Tello drone - Connect to drone's WiFi access point (`TELLO_XXXXXX)` - `$ roslaunch tello_driver tello_node.launch` 此时可以使用rostopic pub向/tello/takeoff和/tello/land发送指令(按tab补全即可),TELLO可以起飞或者降落 将tello_cmd_node.py放到与tello_driver_node所在的文件夹即可 ``` /homee/{你的用户名}/{你的工作空间名}/src/tello_driver/nodes ``` ## STEP3 本功能包的安装(uav_drone) 修改.bashrc,在最后一行加入 ``` source /{你的用户名}/{你的工作空间名}/tello_fly/devel/setup.bash ``` 下载项目: ``` git clone https://gitee.com/lanlanlanbenben/tello_fly.git ``` 进入项目目录: ``` cd tello_fly ``` 进行编译: ``` ./compile_all.sh ``` 运行各launch即可 # 3.功能说明 目前只录制了Aruco跟随的视频,所以先说明该功能 ## 3.1 Aruco跟随 【注意】无论是什么功能,都需要下面这两步(除了使用aruco_det_single,web_cam0两个launch文件 ) - Turn on Tello drone - Connect to drone's WiFi access point (`TELLO_XXXXXX)` 【准备物体】: * 8cm的印有Aruco码(图的大小为8cm)的纸板,所用的Aruco码如下图 ![Image text](https://gitee.com/lanlanlanbenben/tello_fly/raw/master/modules/tello_control/aruco_images/6X6_250/DICT_6X6_250_1.png) 启动功能节点: ``` roslaunch tello_control tello_track_test.launch ``` 此时会额外弹出一个新的终端窗口 ![交互终端](https://gitee.com/lanlanlanbenben/tello_fly/raw/master/readme_image/terminal.png) 首先输入0,然后先输入1命令tello起飞,在输入6进入Aruco跟随模式 启动几个终端: * 终端1:启动rqt,rqt中打开image_view和topic管理器 * 终端2:执行下面的指令,读取视觉检测aruco码的位置与姿态信息 ``` rostopic echo /tello/object_detection/aruco_det ``` 动态效果图(如果不能显示,可查看 readme_image文件夹,后续增加功能后使用子文件夹进行细分) ![img](https://gitee.com/lanlanlanbenben/tello_fly/raw/master/readme_image/back.gif) ## 版权申明 - 本项目受 BSD 3-Clause 协议保护。点击 [LICENSE](https://github.com/amov-lab/Prometheus/blob/master/LICENSE)了解更多 - 本项目仅限个人使用,请勿用于商业用途。 - 如利用本项目进行营利活动,蓝蓝蓝笨笨将追究侵权行为。 # 致敬 [promethues](https://github.com/amov-lab/Prometheus)开源项目组 [amov-lab](https://www.amovlab.com/)阿木实验室 [Tello_driver](https://github.com/anqixu/tello_driver)ROS功能包开发者