Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
imuSensor.cpp
Go to the documentation of this file.
2
3ImuSensor::ImuSensor(double rate, double deadTime)
4{
5 this->rate = rate;
6 this->lastSampleTime = 0.0;
7 this->deadTime = deadTime;
8}
9
11{
12 config.getElement<double>(&this->rate, "rate");
13 config.getElement<double>(&this->deadTime, "dead_time");
14 config["error_acc"].getElement<double>(&this->error_mean_acc, "mean");
15 config["error_acc"].getElement<double>(&this->error_sigma_acc, "sigma");
16 config["error_rot"].getElement<double>(&this->error_mean_rot, "mean");
17 config["error_rot"].getElement<double>(&this->error_sigma_rot, "sigma");
18 config.getElement<std::string>(&this->name, "name");
19 config.getElement<std::string>(&this->frame, "frame");
20
21 std::vector<double> position;
22 config["pose"].getElement<std::vector<double>>(&position, "position");
23 this->position = Eigen::Vector3d(position[0], position[1], position[2]);
24 std::vector<double> orientation;
25 config["pose"].getElement<std::vector<double>>(&orientation, "orientation");
26 this->orientation = Eigen::Vector3d(orientation[0], orientation[1], orientation[2]);
27}
28
29bool ImuSensor::RunTick(ImuData& in, Eigen::Vector3d& alpha, double time)
30{
31 // TODO rigid body tranform of accleration
32 if (this->sampleReady(time))
33 {
34 ImuData value = this->applyError(in);
35 value.frame = "cog_static";
36 this->deadTimeQueue.push(value);
37 this->registerSampling();
38 }
39 return availableDeadTime(time);
40}
41
43{
44 std::default_random_engine generator(numFrames);
45 std::normal_distribution<double> distAccError(error_mean_acc, error_sigma_acc);
46 std::normal_distribution<double> distRotError(error_mean_rot, error_sigma_rot);
47
48 input.acc.x() += distAccError(generator);
49 input.acc.y() += distAccError(generator);
50 input.acc.z() += distAccError(generator);
51
55
56 input.rot.x() += distAccError(generator);
57 input.rot.y() += distAccError(generator);
58 input.rot.z() += distAccError(generator);
59
63
64 numFrames += 1;
65 return input;
66}
67
68std::string ImuSensor::getName() { return this->name; }
ConfigElement getElement(string elementName)
double error_sigma_rot
Definition imuSensor.hpp:30
std::string frame
Definition imuSensor.hpp:32
void readConfig(ConfigElement &config)
Definition imuSensor.cpp:10
std::string getName()
Definition imuSensor.cpp:68
std::string name
Definition imuSensor.hpp:31
bool RunTick(ImuData &in, Eigen::Vector3d &alpha, double time)
Definition imuSensor.cpp:29
ImuSensor(double rate, double deadTime)
Definition imuSensor.cpp:3
double error_sigma_acc
Definition imuSensor.hpp:28
double error_mean_acc
Definition imuSensor.hpp:27
double error_mean_rot
Definition imuSensor.hpp:29
ImuData applyError(ImuData input)
Definition imuSensor.cpp:42
bool sampleReady(double time)
bool availableDeadTime(double time)
Eigen::Vector3d orientation
std::queue< ImuData > deadTimeQueue
Eigen::Vector3d position
Eigen::Matrix3d acc_cov
Definition types.hpp:88
Eigen::Vector3d rot
Definition types.hpp:86
Eigen::Vector3d acc
Definition types.hpp:85
std::string frame
Definition types.hpp:92
Eigen::Matrix3d rot_cov
Definition types.hpp:89