1use airsim::{airsim::Client, car::Car};
2use async_std::task;
3use std::time::Duration;
4
5async fn drive_to_main_road(car: &mut Car) -> std::io::Result<()> {
6 car.go_forward().await?;
8 task::sleep(Duration::from_secs(1)).await;
9 car.go_left().await?;
11 task::sleep(Duration::from_millis(300)).await;
12
13 car.go_forward().await?;
14 task::sleep(Duration::from_millis(900)).await;
15 car.go_right().await?;
17 task::sleep(Duration::from_millis(250)).await;
18 car.go_forward().await?;
19 task::sleep(Duration::from_millis(1750)).await;
20 car.go_right().await?;
21 task::sleep(Duration::from_millis(750)).await;
22 car.go_forward().await?;
23 println!("I should be on the main road now");
24 Ok(())
25}
26
27async fn drive_first_long_left_turn(car: &mut Car) -> std::io::Result<()> {
28 car.go_left().await?;
29 task::sleep(Duration::from_millis(400)).await;
30 car.go_forward().await?;
31 task::sleep(Duration::from_millis(1750)).await;
32 println!("Start turning left now");
33 car.go_left().await?;
34 task::sleep(Duration::from_millis(500)).await;
35 car.go_forward().await?;
36 task::sleep(Duration::from_millis(750)).await;
37 car.go_left().await?;
38 task::sleep(Duration::from_millis(500)).await;
39 car.go_forward().await?;
40 Ok(())
41}
42
43async fn drive_sharp_right(car: &mut Car) -> std::io::Result<()> {
44 car.go_forward().await?;
45 task::sleep(Duration::from_secs(1)).await;
46 println!("Start turning sharp right now");
47 car.go_right().await?;
48 task::sleep(Duration::from_millis(1500)).await;
49 car.go_forward().await?;
50 Ok(())
51}
52
53async fn drive_sharp_left(car: &mut Car) -> std::io::Result<()> {
54 car.go_forward().await?;
55 task::sleep(Duration::from_millis(500)).await;
56 println!("Start turning sharp left now");
57 car.go_left().await?;
58 task::sleep(Duration::from_secs(2)).await;
59 car.go_forward().await?;
60 Ok(())
61}
62
63async fn run_car() -> std::io::Result<()> {
64 let address = "127.0.0.1:41451";
65 let client = Client::connect(address).await?;
66 client.reset().await?;
67 println!("server version is: {}", client.get_server_version().await?);
68 task::sleep(Duration::from_secs(5)).await;
69 let mut car = Car::new(client);
70 drive_to_main_road(&mut car).await?;
71 drive_first_long_left_turn(&mut car).await?;
72 drive_sharp_right(&mut car).await?;
73 drive_sharp_left(&mut car).await?;
74
75 car.stop().await?;
76 println!("Hammertime!");
77 Ok(())
78}
79
80fn main() -> std::io::Result<()> {
81 task::block_on(run_car())
82}