Program Listing for File imu.h¶
↰ Return to documentation for file (devices/imu.h)
#pragma once
#include "lupnt/devices/device.h"
#include "lupnt/dynamics/imu_dynamics.h"
#include "lupnt/measurements/measurement.h"
#include "lupnt/states/state.h"
namespace lupnt {
class ImuDynamics;
// ImuModel
enum class ImuModel { LN200S, UNDEFINED };
// ImuParameters
struct ImuParameters {
Real sigma_a; // [m/s^2 1/sqrt(Hz))] Accelerometer white noise
Real sigma_a_bias; // [m/s^2 sqrt(Hz))] Accelerometer bias random walk
Real sigma_w; // [rad/s 1/sqrt(Hz))] Gyroscope white noise
Real sigma_w_bias; // [rad/s sqrt(Hz))] Gyroscope bias random walk
};
class Imu : public Device {
protected:
ImuModel model_;
Real time_ = 0.0; // [s] Time
ImuState state_;
std::vector<ImuMeasurement> data_;
Ptr<ImuDynamics> dynamics_;
Vec3 position_ = Vec3::Zero(); // [m] Position of the IMU in the body frame
Mat3 orientation_ = Mat3::Identity(); // Orientation of the IMU in the body frame
public:
Imu();
Imu(Config& config);
void Step(Real t) override;
void Setup() override;
ImuMeasurement GetMeasurement(Real t);
static ImuParameters GetParameters(ImuModel imu_model);
std::vector<ImuMeasurement> GetData() const { return data_; }
void EmptyData() { data_.clear(); }
void Log(Real time) override;
};
} // namespace lupnt