Drone.Adapters.Tello (ex_drone v0.3.0)

View Source

Tello drone adapter for ex_drone.

This adapter communicates with DJI Tello and Tello EDU drones over Wi-Fi UDP using the official Tello SDK protocol.

Default Configuration

  • Drone IP: 192.168.10.1
  • Drone port: 8889
  • Local port: 8889
  • Command timeout: 10_000 ms

Usage

{:ok, drone} = Drone.connect(:tello, name: :tello_1)
Drone.connect_sdk(drone)
Drone.takeoff(drone)
Drone.move(drone, :forward, 50)
Drone.land(drone)
Drone.disconnect(drone)

Custom Configuration

{:ok, drone} = Drone.connect(:tello,
  name: :tello_1,
  drone_ip: {192, 168, 10, 1},
  drone_port: 8889,
  local_port: 9030,
  timeout: 15_000
)

Safety warning: The Tello is a real physical drone. Always test in the simulator first. Use prop guards. Do not fly near faces. Have an emergency stop ready.

Summary

Types

t()

Tello adapter state held by Drone.Vehicle.

Functions

Returns Tello-like capability metadata.

Sends an encoded SDK command over UDP and updates dead-reckoned state.

Opens a UDP socket and returns initial Tello adapter state.

Closes the UDP socket.

Returns a telemetry snapshot from dead-reckoned adapter fields.

Types

t()

@type t() :: %Drone.Adapters.Tello{
  drone_ip: :inet.ip_address(),
  drone_port: non_neg_integer(),
  flying: boolean(),
  mode: :idle | :sdk_mode | :flying | :emergency,
  socket: port() | nil,
  timeout: non_neg_integer(),
  x: integer(),
  y: integer(),
  yaw: integer(),
  z: integer()
}

Tello adapter state held by Drone.Vehicle.

FieldTypeMeaning
:socketport() | nilUDP socket used for SDK commands
:drone_ip:inet.ip_address()Drone address (default {192, 168, 10, 1})
:drone_portnon_neg_integer()Drone command port (default 8889)
:timeoutnon_neg_integer()Command reply timeout in ms
:mode:idle | :sdk_mode | :flying | :emergencyFlight mode
:flyingboolean()Whether airborne
:x, :y, :zinteger()Dead-reckoned position in centimeters
:yawinteger()Heading in degrees

Example

%Drone.Adapters.Tello{
  drone_ip: {192, 168, 10, 1},
  drone_port: 8889,
  timeout: 10_000,
  mode: :flying,
  flying: true,
  z: 50
}

Functions

capabilities(tello)

Returns Tello-like capability metadata.

Parameters

  • state (t/0) — unused beyond dispatch

Returns

Drone.Adapter.Capabilities.tello_like/0.

command(state, cmd)

Sends an encoded SDK command over UDP and updates dead-reckoned state.

Parameters

  • state (t/0) — open adapter state
  • cmd (Drone.Command.t()) — command to encode and send

Returns

  • {:ok, reply, t()} — parsed reply (:ok or query value)
  • {:error, reason, t()} — UDP or parse failure

Examples

{:ok, :ok, state} =
  Drone.Adapters.Tello.command(state, Drone.Command.sdk_mode())

connect(opts)

Opens a UDP socket and returns initial Tello adapter state.

Parameters

  • opts (keyword()) — common keys:
    • :drone_ip (:inet.ip_address()) — default {192, 168, 10, 1}
    • :drone_port (non_neg_integer()) — default 8889
    • :local_port (non_neg_integer()) — local bind port
    • :timeout (non_neg_integer()) — reply timeout ms

Returns

  • {:ok, t()} — connected (socket open; SDK mode not yet entered)
  • {:error, term()} — socket open failure

Examples

{:ok, state} =
  Drone.Adapters.Tello.connect(
    drone_ip: {192, 168, 10, 1},
    local_port: 9030
  )

disconnect(state)

Closes the UDP socket.

Parameters

Returns

Always :ok.

telemetry(state)

Returns a telemetry snapshot from dead-reckoned adapter fields.

Parameters

Returns

{:ok, map(), t()} with :x, :y, :z, :yaw, :flying, :mode.