Drone. Adapter. Capabilities
(ex_drone v0.3.0)
View Source
Adapter capability descriptors.
Capabilities let missions and callers discover what an adapter supports
without leaking vehicle-specific concepts into the public Drone API.
Adapters may implement optional Drone.Adapter.capabilities/1; when
omitted, Drone.Adapter.capabilities/2 falls back to tello_like/0.
Examples
caps = Drone.Adapter.Capabilities.crazyflie(positioning: :flow)
true = Drone.Adapter.Capabilities.supports_command?(caps, :takeoff)
false = Drone.Adapter.Capabilities.supports_command?(caps, :flip)
Summary
Functions
Capabilities advertised by the Crazyflie adapter.
Returns whether command_type is listed as supported.
Returns whether query_type is listed as supported.
Default capabilities for Tello-shaped adapters (Sim and Tello).
Types
@type t() :: %{ optional(:sdk_mode) => :required | :optional | :not_applicable, optional(:commands) => [atom()], optional(:queries) => [atom()], optional(:positioning) => atom() | nil, optional(:units) => %{ optional(:distance) => :cm, optional(:angle) => :degrees, optional(:duration) => :milliseconds | :seconds }, optional(:maneuver_completion) => :immediate | :awaited | :fire_and_forget, optional(:requires_estimator) => boolean(), optional(:pose_source) => :adapter | :dead_reckoning, optional(:takeoff_height_cm) => pos_integer(), optional(:link) => atom() }
Capability map advertised by an adapter.
All keys are optional so adapters can publish only what they know.
| Key | Possible values | Meaning |
|---|---|---|
:sdk_mode | :required | :optional | :not_applicable | Whether connect_sdk / :sdk_mode is mandatory before flight |
:commands | [atom()] | Command types supported by Drone.Command / the adapter |
:queries | [atom()] | Query types accepted by :query commands |
:positioning | atom() | nil | Positioning model (:dead_reckoning, :flow, :lighthouse, :loco, …) |
:units | map | Canonical units for distance / angle / duration |
:maneuver_completion | :immediate | :awaited | :fire_and_forget | How move completion is observed |
:requires_estimator | boolean() | Motion needs estimator ready |
:pose_source | :adapter | :dead_reckoning | Who owns authoritative pose |
:takeoff_height_cm | pos_integer() | Planned takeoff height for altitude safety |
:link | atom() | Physical link hint (:crazyradio, …) |
:units map keys:
| Key | Possible values |
|---|---|
:distance | :cm |
:angle | :degrees |
:duration | :milliseconds | :seconds |
Examples
%{
sdk_mode: :required,
commands: [:takeoff, :land, :move, :query],
queries: [:battery, :height],
positioning: :dead_reckoning,
units: %{distance: :cm, angle: :degrees, duration: :seconds},
maneuver_completion: :awaited
}
%{
sdk_mode: :optional,
maneuver_completion: :fire_and_forget,
requires_estimator: true,
link: :crazyradio,
positioning: :flow
}
Functions
Capabilities advertised by the Crazyflie adapter.
SDK mode is optional (no-op for mission portability). Maneuvers are fire-and-forget at the CRTP layer. Flip is not listed.
Parameters
opts(keyword()) — optional overrides::positioning(atom()) — defaults to:flow; also:lighthouse,:loco, …
Returns
t/0 including Crazyflie extras :requires_estimator and :link.
Examples
caps = Drone.Adapter.Capabilities.crazyflie(positioning: :lighthouse)
:optional = caps.sdk_mode
:fire_and_forget = caps.maneuver_completion
true = caps.requires_estimator
:crazyradio = caps.link
:lighthouse = caps.positioning
false = Drone.Adapter.Capabilities.supports_command?(caps, :flip)
Returns whether command_type is listed as supported.
When :commands is missing, the Tello default command list is used.
Parameters
caps(t/0) — capability mapcommand_type(atom()) — for example:takeoff,:flip
Returns
boolean().
Examples
caps = Drone.Adapter.Capabilities.tello_like()
true = Drone.Adapter.Capabilities.supports_command?(caps, :takeoff)
true = Drone.Adapter.Capabilities.supports_command?(caps, :flip)
cf = Drone.Adapter.Capabilities.crazyflie()
false = Drone.Adapter.Capabilities.supports_command?(cf, :flip)
Returns whether query_type is listed as supported.
When :queries is missing, the Tello default query list is used.
Parameters
caps(t/0) — capability mapquery_type(atom()) — for example:battery,:wifi
Returns
boolean().
Examples
caps = Drone.Adapter.Capabilities.crazyflie()
true = Drone.Adapter.Capabilities.supports_query?(caps, :battery)
false = Drone.Adapter.Capabilities.supports_query?(caps, :wifi)
@spec tello_like() :: t()
Default capabilities for Tello-shaped adapters (Sim and Tello).
SDK mode is required, maneuvers wait for completion, and positioning is dead-reckoning from commanded moves.
Returns
t/0 capability map.
Examples
caps = Drone.Adapter.Capabilities.tello_like()
:required = caps.sdk_mode
:awaited = caps.maneuver_completion
true = Drone.Adapter.Capabilities.supports_command?(caps, :flip)