use crazyflie_lib::crazyflie_link::LinkContext;
use crazyflie_lib::Crazyflie;
use tokio::time::{sleep, Duration};
const TRAJECTORY_ID: u8 = 1;
const MEMORY_OFFSET: u32 = 0;
const PIECE_COUNT: u8 = 10; const TIME_SCALE: f32 = 1.0; const EXPECTED_DURATION_S: u64 = 6;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let context = LinkContext::new();
let crazyflie = Crazyflie::connect_from_uri(
&context,
"radio://0/80/2M/E7E7E7E7E7",
crazyflie_lib::NoTocCache
)
.await?;
println!("Defining trajectory...");
if let Err(e) = crazyflie
.high_level_commander
.define_trajectory(TRAJECTORY_ID, MEMORY_OFFSET, PIECE_COUNT, None)
.await
{
eprintln!("Define trajectory failed: {e}");
}
sleep(Duration::from_secs(1)).await;
println!("Taking off...");
crazyflie.high_level_commander.take_off(0.8, None, 2.0, None).await?;
println!("Starting trajectory...");
if let Err(e) = crazyflie
.high_level_commander
.start_trajectory(TRAJECTORY_ID, TIME_SCALE, true, false, false, None)
.await
{
eprintln!("Start trajectory failed: {e}");
}
sleep(Duration::from_secs(EXPECTED_DURATION_S)).await;
println!("Landing...");
if let Err(e) = crazyflie.high_level_commander.land(0.0, None, 2.0, None).await {
eprintln!("Land command failed: {e}");
}
crazyflie.high_level_commander.stop(None).await?;
println!("Done");
Ok(())
}