operator_advisor/observation/
util.rs

1use crate::observation::Observation;
2use crate::InternalData as Data;
3use crate::Position;
4use strum_macros::{EnumCount as EnumCountMacro, EnumIter};
5
6
7pub fn distance_between_points(p1: Position, p2: Position) -> f32 {
8    let x = p2[0] - p1[0];
9    let y = p2[1] - p1[1];
10    let z = p2[2] - p1[2];
11    f32::sqrt(f32::powi(x, 2) + f32::powi(y, 2) + f32::powi(z, 2))
12}
13
14pub fn distance_between_points_2d(p1: Position, p2: Position) -> f32 {
15    let x = p2[0] - p1[0];
16    let y = p2[1] - p1[1];
17    f32::sqrt(f32::powi(x, 2) + f32::powi(y, 2))
18}
19
20pub fn norm(p: Position) -> f32 {
21    f32::sqrt(f32::powi(p[0], 2) + f32::powi(p[1], 2) + f32::powi(p[2], 2))
22}
23
24pub fn angle(p: Position) -> f32 {
25    (p[1] / p[0]).atan() * 180f32 / std::f32::consts::PI
26}
27
28pub fn data_trees_to_vector(data: &Data) -> Vec<Position> {
29    vec![
30        data.tree_1,
31        data.tree_2,
32        data.tree_3,
33        data.tree_4,
34        data.tree_5,
35        data.tree_6,
36        data.tree_7,
37        data.tree_8,
38        data.tree_9,
39        data.tree_10,
40    ]
41}
42
43pub fn convert_observations_to_int(obs: &Vec<Box<dyn Observation>>) -> Vec<usize> {
44    obs.iter()
45        .map(|x| x.to_int().expect("this observation is not discrete"))
46        .collect()
47}
48
49pub fn convert_observations_to_feature_vector(obs: &Vec<Box<dyn Observation>>) -> Vec<Vec<f32>> {
50    obs.iter()
51        .map(|x| x.to_vec().expect("this observation is not continous"))
52        .collect()
53}
54
55pub fn get_feature_from_observation(obs: &Vec<Vec<f32>>, feature: &Feature) -> Vec<f32> {
56    obs.iter().map(|x| x[feature.clone() as usize]).collect()
57}
58
59#[derive(EnumCountMacro, Clone,EnumIter, Debug)]
60pub enum Feature {
61    Tree1 = 0,
62    Tree2,
63    Tree3,
64    Tree4,
65    Tree5,
66    Tree6,
67    Tree7,
68    Tree8,
69    Tree9,
70    Tree10,
71    ExcavatorSpeed,
72    ExcavatorAngularSpeed,
73    StickExtension,
74    StickAngle,
75    FingerState,
76}