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?;
sleep(Duration::from_millis(100)).await;
println!("Starting hover maneuver...");
for y in 0..10 {
let zdistance = y as f32 / 25.0;
crazyflie.commander.setpoint_hover(0.0, 0.0, 0.0, zdistance).await?;
sleep(Duration::from_millis(100)).await;
}
for _ in 0..20 {
crazyflie.commander.setpoint_hover(0.0, 0.0, 0.0, 0.4).await?;
sleep(Duration::from_millis(100)).await;
}
for _ in 0..50 {
crazyflie.commander.setpoint_hover(0.2, 0.0, 72.0, 0.4).await?;
sleep(Duration::from_millis(100)).await;
}
for _ in 0..50 {
crazyflie.commander.setpoint_hover(0.2, 0.0, -72.0, 0.4).await?;
sleep(Duration::from_millis(100)).await;
}
for _ in 0..20 {
crazyflie.commander.setpoint_hover(0.0, 0.0, 0.0, 0.4).await?;
sleep(Duration::from_millis(100)).await;
}
for y in 0..10 {
let zdistance = (10 - y) as f32 / 25.0;
crazyflie.commander.setpoint_hover(0.0, 0.0, 0.0, zdistance).await?;
sleep(Duration::from_millis(100)).await;
}
crazyflie.commander.setpoint_stop().await?;
crazyflie.commander.notify_setpoint_stop(0).await?;
println!("Hover setpoint example complete. Motors stopped.");
Ok(())
}