27 static noiseModel::Diagonal::shared_ptr Diagonal(
const Matrix& covariance) {
30 auto diagonal = std::dynamic_pointer_cast<noiseModel::Diagonal>(model);
32 throw std::invalid_argument(
"ScenarioRunner::Diagonal: not a diagonal");
43 typedef std::shared_ptr<PreintegrationParams> SharedParams;
47 const SharedParams p_;
48 const double imuSampleTime_, sqrt_dt_;
49 const Bias estimatedBias_;
52 Sampler gyroSampler_, accSampler_;
56 double imuSampleTime = 1.0 / 100.0,
const Bias& bias = Bias())
57 : scenario_(scenario),
59 imuSampleTime_(imuSampleTime),
60 sqrt_dt_(std::sqrt(imuSampleTime)),
63 gyroSampler_(Diagonal(p->gyroscopeCovariance), 10),
64 accSampler_(Diagonal(p->accelerometerCovariance), 29284) {}
68 const Vector3& gravity_n()
const {
return p_->n_gravity; }
70 const Scenario& scenario()
const {
return scenario_; }
73 Vector3 actualAngularVelocity(
double t)
const {
return scenario_.
omega_b(t); }
76 Vector3 actualSpecificForce(
double t)
const {
78 return scenario_.acceleration_b(t) - bRn * gravity_n();
82 Vector3 measuredAngularVelocity(
double t)
const {
83 return actualAngularVelocity(t) + estimatedBias_.
gyroscope() +
84 gyroSampler_.
sample() / sqrt_dt_;
86 Vector3 measuredSpecificForce(
double t)
const {
87 return actualSpecificForce(t) + estimatedBias_.
accelerometer() +
88 accSampler_.
sample() / sqrt_dt_;
91 const double& imuSampleTime()
const {
return imuSampleTime_; }
95 const Bias& estimatedBias = Bias(),
96 bool corrupted =
false)
const;
100 const Bias& estimatedBias = Bias())
const;
103 Matrix9 estimateCovariance(
double T,
size_t N = 1000,
104 const Bias& estimatedBias = Bias())
const;
107 Matrix6 estimateNoiseCovariance(
size_t N = 1000)
const;
116 typedef std::shared_ptr<PreintegrationCombinedParams> SharedParams;
119 const SharedParams p_;
120 const Bias estimatedBias_;
124 double imuSampleTime = 1.0 / 100.0,
125 const Bias& bias = Bias())
126 :
ScenarioRunner(scenario, static_cast<ScenarioRunner::SharedParams>(p),
127 imuSampleTime, bias),
129 estimatedBias_(bias) {}
133 double T,
const Bias& estimatedBias = Bias(),
134 bool corrupted =
false)
const;
138 const Bias& estimatedBias = Bias())
const;
141 Eigen::Matrix<double, 15, 15> estimateCovariance(
142 double T,
size_t N = 1000,
const Bias& estimatedBias = Bias())
const;
Simple class to test navigation scenarios.
virtual Vector3 omega_b(double t) const =0
angular velocity in body frame
Definition: NavState.h:34
Vector sample() const
sample from distribution
Definition: CombinedImuFactor.h:130
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition: Rot3.h:58
const Vector3 & accelerometer() const
Definition: ImuBias.h:66
sampling from a NoiseModel
Definition: ImuFactor.h:72
Simple trajectory simulator.
Definition: Scenario.h:25
Definition: chartTesting.h:28
Definition: ScenarioRunner.h:114
const Vector3 & gyroscope() const
Definition: ImuBias.h:71
static shared_ptr Covariance(const Matrix &covariance, bool smart=true)
Definition: ScenarioRunner.h:40
Matrix3 transpose() const