Skip to main content

coastcar/
coastcar.rs

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    // start
7    car.go_forward().await?;
8    task::sleep(Duration::from_secs(1)).await;
9    // first turn
10    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    // second turn
16    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}