gui_pb/drawing/
imu.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use crate::App;
use eframe::egui::Ui;

fn status_label(status: u8) -> &'static str {
    match status & 0x03 {
        0 => "Unreliable",
        1 => "Low",
        2 => "Medium",
        3 => "High",
        _ => "Unknown",
    }
}

pub fn draw_imu_data(app: &mut App, ui: &mut Ui) {
    let name = app.ui_settings.selected_robot;
    ui.heading(format!("IMU data for {name}"));
    ui.separator();
    if let Some(data) = app.server_status.robots[name as usize].extra_imu_data {
        for (label, ([x, y, z], status)) in [
            ("Accelerometer", data.accel),
            ("Gyroscope", data.gyro),
            ("Magnetometer", data.mag),
        ] {
            ui.label(format!("{label} x: {x}"));
            ui.label(format!("{label} y: {y}"));
            ui.label(format!("{label} z: {z}"));
            ui.label(format!("{label} accuracy status: {}", status_label(status)));
            ui.separator();
        }
        ui.label(format!("Rotation x: {}", data.rotation_vector.0[0]));
        ui.label(format!("Rotation y: {}", data.rotation_vector.0[1]));
        ui.label(format!("Rotation z: {}", data.rotation_vector.0[2]));
        ui.label(format!("Rotation w: {}", data.rotation_vector.0[3]));
        ui.label(format!(
            "Rotation accuracy (radians): {}",
            data.rotation_vector.1
        ));
        ui.label(format!(
            "Rotation status: {}",
            status_label(data.rotation_vector.2)
        ));
    }
}