Khangai Robot Play - Naive  01
THe naive play of the Khangai Robot
position_sensor.h
Go to the documentation of this file.
1 /*
2  * position_sensor.h
3  *
4  * Created : 11/29/2018
5  * Author : n-is
6  * email : 073bex422.nischal@pcampus.edu.np
7  */
8 
9 #ifndef _POSITION_SENSOR_H_
10 #define _POSITION_SENSOR_H_
11 
12 #include "vec3.h"
13 #include "vec2.h"
14 #include "sensor.h"
15 #include "kalman.h"
16 
17 struct State_Vars;
18 enum class Field;
19 
20 #define MAX_POSITION_SENSORS (4)
21 
25 
26 int init_XLidarEncoderKalman(uint32_t dt_millis);
27 int init_YLidarEncoderKalman(uint32_t dt_millis);
28 int init_EncodersKalman(uint32_t dt_millis);
29 
30 
32 {
33 public:
34  PositionSensor(PositionSensor &&) = default;
35  PositionSensor(const PositionSensor &) = default;
37  PositionSensor &operator=(const PositionSensor &) = default;
39 
40  static PositionSensor& get_Instance();
41 
42  int init(uint32_t dt_millis);
43 
44  // Add sensor so that it can be used for calculating position
46  for (uint8_t i = 0; i < sensor_count_; ++i) {
47  if (*p_sensors_[i] == *sen) {
48  return;
49  }
50  }
51  p_sensors_[sensor_count_++] = sen;
52  }
53  // Remove any Sensor from the next calculation
55  for (uint8_t i = 0; i < sensor_count_; ++i) {
56  if (*p_sensors_[i] == *sen) {
57  --sensor_count_;
59  break;
60  }
61  }
62  }
63 
64  // Reads the position of the robot from the initial fences
65  // using the available Sensors
66  Vec3<float> read_Position(Vec3<float> ori, Vec3<float> base_state, const State_Vars *sv, uint32_t dt_millis);
67  void update_State(Vec3<float> state);
68 
69 private:
71  uint8_t sensor_count_;
72 
76 
80  {
81  sensor_count_ = 0;
82  }
83 
84  void process_LidarData(Vec3<float> ori, float (&lidar)[2], const State_Vars *sv);
86 };
87 
88 #endif // !_POSITION_SENSOR_H_
int init_XLidarEncoderKalman(uint32_t dt_millis)
Definition: position_sensor.cpp:330
Kalman_Vars gEncoders_KV
Definition: position_sensor.cpp:35
Vec3< float > read_Position(Vec3< float > ori, Vec3< float > base_state, const State_Vars *sv, uint32_t dt_millis)
Definition: position_sensor.cpp:57
void process_LidarData(Vec3< float > ori, float(&lidar)[2], const State_Vars *sv)
Definition: position_sensor.cpp:163
int init(uint32_t dt_millis)
Definition: position_sensor.cpp:47
Vec2< float > rotate_EncData(Vec3< float > ori, Vec2< float > enc)
Definition: position_sensor.cpp:293
PositionSensor()
Definition: position_sensor.h:77
PositionSensor & operator=(PositionSensor &&)=default
static PositionSensor & get_Instance()
Definition: position_sensor.cpp:40
int init_YLidarEncoderKalman(uint32_t dt_millis)
Definition: position_sensor.cpp:374
Field
Definition: robo_states.h:16
Kalman_Filter enc_fuser_
Definition: position_sensor.h:73
~PositionSensor()
Definition: position_sensor.h:38
Kalman_Filter ylidar_enc_fuser_
Definition: position_sensor.h:75
Kalman_Filter xlidar_enc_fuser_
Definition: position_sensor.h:74
Kalman_Vars gXLidarEncoder_KV
Definition: position_sensor.cpp:36
uint8_t sensor_count_
Definition: position_sensor.h:71
Definition: robo_states.h:43
Kalman_Vars gYLidarEncoder_KV
Definition: position_sensor.cpp:37
void update_State(Vec3< float > state)
Definition: position_sensor.cpp:158
#define MAX_POSITION_SENSORS
Definition: position_sensor.h:20
Definition: kalman.h:34
Sensor< float > * p_sensors_[MAX_POSITION_SENSORS]
Definition: position_sensor.h:70
int init_EncodersKalman(uint32_t dt_millis)
Definition: position_sensor.cpp:417
Definition: position_sensor.h:31
void remove_Sensor(Sensor< float > *sen)
Definition: position_sensor.h:54
Definition: kalman.h:16
void add_Sensor(Sensor< float > *sen)
Definition: position_sensor.h:45