Aerostack2

DocsAerial Platforms

Ryze Tello

Fly the Ryze Tello over Wi-Fi with the Tello SDK, with native take-off and landing.

Authored by
  • @alvgaona

The Tello platform flies the Ryze Tello, a small indoor drone made with DJI. The computer joins the Tello's Wi-Fi network and sends it Tello SDK commands over UDP. The Tello flies itself, takes off and lands on command, and Aerostack2 sends it velocities. It builds on ROS 2 Humble and Jazzy.

The Tello measures its height, attitude and velocity, but not its position. To fly missions that go somewhere, pair it with motion capture.

Install

cd ~/aerostack2_ws/src
git clone https://github.com/aerostack2/as2_platform_tello.git
cd ~/aerostack2_ws
rosdep install --from-paths src --ignore-src -y
colcon build --symlink-install --packages-up-to as2_platform_tello

Launch

Turn on the Tello, join its Wi-Fi network and launch the platform:

ros2 launch as2_platform_tello tello_platform.launch.py namespace:=drone0

The platform puts the Tello in SDK mode when it starts, and stops if the Tello doesn't answer. It also pings the Tello every two seconds, so the Tello doesn't land when commands pause.

ParameterDefaultWhat it does
cmd_freq10.0How often commands are sent, in Hz
info_freq10.0How often platform/info is published, in Hz
tello_ip192.168.10.1The Tello's address
port_command8889The Tello's command port
port_state8890The local port the Tello sends its state to
camera.enabletrueStream the Tello's camera
camera.freq30.0How often camera images are published, in Hz

Control modes

Control modeYaw
Hover
SpeedRate

That fits the PID speed controller. The Tello takes velocities in its own body frame, and Aerostack2 converts them before sending. Speeds are limited to 1 m/s.

Topics

TopicContents
sensor_measurements/odomThe height, attitude and velocity, with no horizontal position
sensor_measurements/imuThe IMU
sensor_measurements/barometerThe barometer
sensor_measurements/batteryThe battery state
sensor_measurements/camera/imageThe camera, with camera.enable on
platform/infoThe platform status

With the rest of the stack

Since the Tello has no horizontal position, use the ground_truth estimator on a motion capture rigid body. Use the platform's own take-off and landing too:

config/config.yaml
/**:
  state_estimator:
    ros__parameters:
      plugin_name: "ground_truth"
  TakeoffBehavior:
    ros__parameters:
      takeoff_plugin_name: "takeoff_plugin_platform"
  LandBehavior:
    ros__parameters:
      land_plugin_name: "land_plugin_platform"

The state estimator page explains how to point the ground truth plugin at a motion capture system.

Several Tellos

Out of the box a Tello is its own Wi-Fi access point, so one computer can fly one Tello. To fly several, put Tello EDUs in station mode on a shared network, then launch one platform per drone with its own namespace, tello_ip, port_command_client, port_state and camera.stream_port.

Things to know

  • Arming only puts the Tello in SDK mode. The motors start when it takes off.
  • Stopping the platform makes the Tello hover.
  • The kill switch sends the Tello's emergency command, which stops the motors at once.

The project_dji_tello repository has a complete setup for one or several Tellos with motion capture.

Last updated on November 3, 2026

On this page

Last updated on November 3, 2026