/*! @file ImuSimulator.h * @brief Simulated IMU with noise */ #ifndef PROJECT_IMUSIMULATOR_H #define PROJECT_IMUSIMULATOR_H #include #include "ControlParameters/SimulatorParameters.h" #include "Dynamics/FloatingBaseModel.h" #include "SimUtilities/IMUTypes.h" #include "cppTypes.h" /*! * Simulation of IMU */ template class ImuSimulator { public: explicit ImuSimulator(SimulatorControlParameters& simSettings, u64 seed = 0) : _simSettings(simSettings), _mt(seed), _vectornavGyroDistribution(-simSettings.vectornav_imu_gyro_noise, simSettings.vectornav_imu_gyro_noise), _vectornavAccelerometerDistribution( -simSettings.vectornav_imu_accelerometer_noise, simSettings.vectornav_imu_accelerometer_noise), _vectornavQuatDistribution(-simSettings.vectornav_imu_quat_noise, simSettings.vectornav_imu_quat_noise) { if (simSettings.vectornav_imu_quat_noise != 0) { _vectorNavOrientationNoise = true; } } void updateVectornav(const FBModelState& robotState, const FBModelStateDerivative& robotStateD, VectorNavData* data); void computeAcceleration(const FBModelState& robotState, const FBModelStateDerivative& robotStateD, Vec3& acc, std::uniform_real_distribution& dist, const RotMat& R_body); void updateCheaterState(const FBModelState& robotState, const FBModelStateDerivative& robotStateD, CheaterState& state); private: SimulatorControlParameters& _simSettings; std::mt19937 _mt; std::uniform_real_distribution _vectornavGyroDistribution; std::uniform_real_distribution _vectornavAccelerometerDistribution; std::uniform_real_distribution _vectornavQuatDistribution; bool _vectorNavOrientationNoise = false; }; #endif // PROJECT_IMUSIMULATOR_H