use crazyflie_lib::crazyflie_link::LinkContext;
use crazyflie_lib::Crazyflie;
use tokio::time::{sleep, Duration};
#[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?;
crazyflie.commander.setpoint_rpyt(0.0, 0.0, 0.0, 0).await?;
let positions = [
( 0.2f32, 0.0f32, 0.2f32, 0.0f32 ),
(-0.2f32, 0.2f32, 0.4f32, 22.5f32),
( 0.0f32, -0.2f32, 0.2f32, -45.0f32)
];
for (i, &(x, y, z, yaw)) in positions.iter().enumerate() {
println!("Flying to position {}: x={:.2}, y={:.2}, z={:.2}, yaw={:.1}", i+1, x, y, z, yaw);
for _ in 0..20 {
crazyflie.commander.setpoint_position(x, y, z, yaw).await?;
sleep(Duration::from_millis(100)).await;
}
}
crazyflie.commander.setpoint_stop().await?;
crazyflie.commander.notify_setpoint_stop(0).await?;
Ok(())
}