# 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码如下图

启动功能节点:
```
roslaunch tello_control tello_track_test.launch
```
此时会额外弹出一个新的终端窗口

首先输入0,然后先输入1命令tello起飞,在输入6进入Aruco跟随模式
启动几个终端:
* 终端1:启动rqt,rqt中打开image_view和topic管理器
* 终端2:执行下面的指令,读取视觉检测aruco码的位置与姿态信息
```
rostopic echo /tello/object_detection/aruco_det
```
动态效果图(如果不能显示,可查看 readme_image文件夹,后续增加功能后使用子文件夹进行细分)

## 版权申明
- 本项目受 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功能包开发者