Skip to main content

Crate crazyflie_lib

Crate crazyflie_lib 

Source
Expand description

§Crazyflie library

This crate allows to connect, communicate with and control the Crazyflie using the crazyflie-link crate to open a communication link. The link implementation only supports radio for now, but more will be implemented in the future (at least USB).

§Status

The crate aims at implementing a Rust API to control the Crazyflie. The Crazyflie functionalities are implemented in subsystems. The current status is:

SubsystemSupport
App channelFull
CommanderFull
ConsoleFull
High-level CommanderFull
Link ServiceFull
LocalizationFull
LogFull (V2)
MemoryPartial
ParamFull(V2)
PlatformFull
SupervisorFull (info and command channels)

§Compatibility

This crate is compatible with Crazyflie protocol versions MIN_SUPPORTED_PROTOCOL_VERSION to MAX_SUPPORTED_PROTOCOL_VERSION. The Crazyflie guarantees backward compatibility for one protocol version, so this library will work with both the current and next protocol version.

§Usage

The basic procedure to use the lib is:

  • Find the link URI to connect, either by scanning or as a config or user input
  • Create a Crazyflie object from the URI or a connected Link, this will connect to the Crazyflie and initializes the subsystems
  • Subsystems are available as public fields of the Crazyflie struct.
  • Use the subsystems in the Crazyflie object to control the Crazyflie
  • Drop the Crazyflie object or call crazyflie::Crazyflie::disconnect()

All subsystems functions are only taking an un-mutable reference to self (&self), the intention is for the Crazyflie object to be shared between tasks using Arc<> or Rc<>.

For example:

let link_context = crazyflie_lib::crazyflie_link::LinkContext::new();

// Scan for Crazyflies on the default address
let found = link_context.scan([0xE7; 5]).await?;

if let Some(uri) = found.first() {
    let cf = crazyflie_lib::Crazyflie::connect_from_uri(
        &link_context,
        uri,
        crazyflie_lib::NoTocCache
    ).await?;

    println!("List of params variables: ");
    for name in cf.param.names() {
        println!(" - {}", name);
    }

    println!("List of log variables: ");
    for name in cf.param.names() {
        println!(" - {}", name);
    }

    cf.disconnect().await;
}

Types from the crazyflie-link crate appear in this crate’s public API (for example crazyflie_link::LinkContext and crazyflie_link::Connection in Crazyflie::connect_from_uri() and Crazyflie::connect_from_link()), which makes crazyflie-link a public dependency: code using this crate needs to name its types. To avoid a separate, possibly version-mismatched crazyflie-link dependency downstream, the crate is re-exported at crazyflie_link — use it through this path instead of adding a direct dependency. The crazyradio crate is reachable the same way, as crazyflie_lib::crazyflie_link::crazyradio.

This is a supported part of the API: the re-exported crates only move to semver-incompatible versions in a semver-incompatible release of this crate.

§Cargo features

  • packet_capture - Enable CRTP packet capture in the link (Unix only). Forwards to the crazyflie-link feature of the same name, see crazyflie_link::capture.

Re-exports§

Modules§

subsystems
Crazyflie subsystems

Structs§

Crazyflie
The Crazyflie
NoTocCache
Null implementation of ToC cache to be used when no caching is needed.

Enums§

Error
Error enum type
Value
Typed data value
ValueType
Value type

Constants§

MAX_SUPPORTED_PROTOCOL_VERSION
Maximum supported protocol version
MIN_SUPPORTED_PROTOCOL_VERSION
Minimum supported protocol version

Traits§

TocCache
A trait for caching Table of Contents (TOC) data.

Type Aliases§

Result
Result alias for return types of the crate API