tello_ros

C++ ROS2 driver for DJI Tello drones [requires Foxy and Gazebo Classic -- both EOL]

https://github.com/clydemcqueen/tello_ros

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.6%) to scientific vocabulary

Keywords

ros2 ryze tello
Last synced: 6 months ago · JSON representation ·

Repository

C++ ROS2 driver for DJI Tello drones [requires Foxy and Gazebo Classic -- both EOL]

Basic Info
  • Host: GitHub
  • Owner: clydemcqueen
  • License: bsd-3-clause
  • Language: C++
  • Default Branch: master
  • Homepage:
  • Size: 175 KB
Statistics
  • Stars: 219
  • Watchers: 10
  • Forks: 69
  • Open Issues: 32
  • Releases: 0
Archived
Topics
ros2 ryze tello
Created over 7 years ago · Last pushed 7 months ago
Metadata Files
Readme License Citation

README.md

tello_ros

tello_ros is a ROS2 driver for Tello and Tello EDU drones.

Packages

There are 4 ROS packages: * tello_driver is a C++ ROS node that connects to the drone * tello_msgs is a set of ROS messages * tello_description contains robot description (URDF) files * tello_gazebo can be used to simulate a Tello drone in Gazebo, see the README.md in that package for details

Interface

Overview

The driver is designed to very simple while making it easy to integrate Tello drones into the ROS ecosystem.

The driver communicates with the drone using the Tello SDK, which has several advantages: * The SDK is documented, and there's quite a bit of development activity around it, so it's likely to be stable. * The SDK is text-based, which means that tello_ros can be simple but still provide full access to the SDK by passing arbitrary strings to the drone.

Many Tello commands (e.g., takeoff and land) are long-running, and the drone returns ok or error on completion. The driver provides the ROS service tello_command to initiate commands, and the corresponding ROS topic tello_response to indicate command completion.

Per ROS convention, the driver also responds to Twist messages on the cmd_vel topic. These are translated into rc commands and sent to the drone. Velocity values are arbitrarily mapped from [-1.0, 1.0] to [-100, 100]. This may change in the future.

The driver parses telemetry data and sends it on the flight_data topic. The presence of telemetry data is a good indicator that the drone is connected.

The driver parses the video stream and sends images on the image_raw topic. Camera information is sent on the camera_info topic.

The Tello drones have a sophisticated visual odometry system and an onboard IMU, but there's minimal access to these internal systems. The driver does not publish odometry.

Additional notes: * Only one command may be running at a time. * If a command (other than rc) is currently running, incoming cmd_vel messages are ignored. * Tello drones do not send responses for rc commands, and neither does the driver. * The driver sends command and streamon commands at startup to initiate telemetry and video. * If telemetry or video stops, the driver will attempt to restart by sending command and streamon commands. * Roll (Twist.angular.x) and pitch (Twist.angular.y) are ignored in cmd_vel messages. * The driver doesn't keep track of state, so it will happily send rc messages to the drone even if it's on the ground. The drone just ignores them. * You can send arbitrary strings to the drone via the tello_command service. * Tello drones auto-land if no commands are received within 15 seconds. The driver sends a rc 0 0 0 0 command after 12 seconds of silence to avoid this.

Services

  • ~tello_action tello_msgs/TelloAction

Subscribed topics

Published topics

Parameters

The defaults work well for a single Tello drone.

Name | Description | Default --------------|--------------|---------- drone_ip | Send commands to this IP address | 192.168.10.1 drone_port | Send commands to this UDP port | 8889 command_port| Send commands from this UDP port | 38065 data_port | Flight data (Tello state) will arrive on this UDP port | 8890 video_port | Video data will arrive on this UDP port | 11111

Installation

1. Set up your Linux environment

Set up a Ubuntu 20.04 box or VM.

Also install asio: ~~~ sudo apt install libasio-dev ~~~

2. Set up your ROS environment

Install ROS2 Foxy with the ros-foxy-desktop option.

If you install binaries, be sure to also install the development tools and ROS tools from the source installation instructions.

Install these additional packages: ~~~ sudo apt install ros-foxy-cv-bridge ros-foxy-camera-calibration-parsers ~~~

3. Install tello_ros

Download, compile and install tello_ros: ~~~ mkdir -p ~/tellorosws/src cd ~/tellorosws/src git clone https://github.com/clydemcqueen/telloros.git git clone https://github.com/ptrmu/ros2shared.git cd .. source /opt/ros/foxy/setup.bash

If you didn't intall Gazebo, skip tello_gazebo while building:

colcon build --event-handlers consoledirect+ --packages-skip tellogazebo ~~~

Teleop

The driver provides a simple launch file that will allow you to fly the drone using a wired XBox One gamepad.

Turn on the drone, connect to TELLO-XXXXX via wi-fi, and launch ROS: ~~~ cd ~/tellorosws source install/setup.bash ros2 launch tellodriver teleoplaunch.py ~~~

Hit the XBox One menu button to take off, and the view button to land.

If you don't have an XBox One gamepad, you can send commands using the ROS2 CLI: ~~~~ ros2 service call /telloaction tellomsgs/TelloAction "{cmd: 'takeoff'}" ros2 service call /telloaction tellomsgs/TelloAction "{cmd: 'rc 0 0 0 20'}" ros2 service call /telloaction tellomsgs/TelloAction "{cmd: 'land'}" ros2 service call /telloaction tellomsgs/TelloAction "{cmd: 'battery?'}" ~~~~

You can also send cmd_vel messages: ~~~~ ros2 topic pub /cmdvel geometrymsgs/Twist # Sends rc 0 0 0 0 ros2 topic pub /cmdvel geometrymsgs/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}" ~~~~

Devices tested

  • Tello
    • Firmware v01.04.35.01, SDK v1.3
  • Tello EDU
    • Firmware v02.04.69.03, SDK v2.0

Versions and branches

tello_ros was developed along with several other projects while ROS2 was rapidly changing. All of the related projects adopted similar conventions around branch names: * the master branch works with the latest ROS2 release (Foxy as of this writing) * there may be branches for older ROS2 versions, such as crystal, dashing or eloquent

The following projects and branches were tested together:

  • ROS2 Foxy with fiducial_vlam:
    • git clone https://github.com/ptrmu/ros2_shared.git
    • git clone https://github.com/ptrmu/fiducial_vlam.git
    • git clone https://github.com/clydemcqueen/tello_ros.git
    • git clone https://github.com/clydemcqueen/flock2.git

Credits

The h264decoder is from: https://github.com/DaWelter/h264decoder

Resources

Tello SDK errata

  • Tello drones do not respond to rc commands (the SDK suggests that they return ok or error)

Owner

  • Name: Clyde McQueen
  • Login: clydemcqueen
  • Kind: user
  • Location: Seattle

Xoogler ramping up on all things computer vision, ROS and maritime robotics.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "McQueen"
  given-names: "Clyde"
  orcid: "https://orcid.org/0009-0007-9179-318X"
- family-names: "Mullen"
  given-names: "Peter"
  orcid: "https://orcid.org/0009-0000-7266-8913"
title: "Tello ROS"
version: 0.1.0
date-released: 2019-1-19
url: "https://github.com/clydemcqueen/tello_ros"

GitHub Events

Total
  • Issues event: 6
  • Watch event: 20
  • Issue comment event: 15
  • Push event: 1
  • Fork event: 5
Last Year
  • Issues event: 6
  • Watch event: 20
  • Issue comment event: 15
  • Push event: 1
  • Fork event: 5

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 4
  • Total pull requests: 0
  • Average time to close issues: 4 days
  • Average time to close pull requests: N/A
  • Total issue authors: 3
  • Total pull request authors: 0
  • Average comments per issue: 3.5
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 4
  • Pull requests: 0
  • Average time to close issues: 4 days
  • Average time to close pull requests: N/A
  • Issue authors: 3
  • Pull request authors: 0
  • Average comments per issue: 3.5
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • fneufken (2)
  • romain130492 (1)
  • greenonline (1)
  • HadiIoT (1)
  • edugm94 (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels