diff --git a/demos/sensor_imu.yaml b/demos/sensor_imu.yaml index 3c78a00d35c785fe73381d8f6ce99a705d27ce77..38a3df944cc7e8a7021e0bfe418fb5c79b324b2f 100644 --- a/demos/sensor_imu.yaml +++ b/demos/sensor_imu.yaml @@ -7,3 +7,5 @@ motion_variances: wb_initial_stdev: 0.350 # rad/sec - initial bias ab_rate_stdev: 0.1 # m/s2/sqrt(s) wb_rate_stdev: 0.0400 # rad/s/sqrt(s) + +dynamic_imu_bias: true \ No newline at end of file diff --git a/include/imu/sensor/sensor_imu.h b/include/imu/sensor/sensor_imu.h index 7e3e2b38bf38ebf29e5f0957b2735434421f1704..fc6f6990ecb20d5c63cdfac31f54bcebd9bcc547 100644 --- a/include/imu/sensor/sensor_imu.h +++ b/include/imu/sensor/sensor_imu.h @@ -47,6 +47,9 @@ struct ParamsSensorImu : public ParamsSensorBase double ab_rate_stdev = 0.00001; double wb_rate_stdev = 0.00001; + // TODO: NOT necessary after the big refactor + bool dynamic_imu_bias = true; + ~ParamsSensorImu() override = default; ParamsSensorImu() { @@ -61,6 +64,7 @@ struct ParamsSensorImu : public ParamsSensorBase wb_initial_stdev = _server.getParam<double>(prefix + _unique_name + "/wb_initial_stdev"); ab_rate_stdev = _server.getParam<double>(prefix + _unique_name + "/ab_rate_stdev"); wb_rate_stdev = _server.getParam<double>(prefix + _unique_name + "/wb_rate_stdev"); + dynamic_imu_bias = _server.getParam<bool> (prefix + _unique_name + "/dynamic_imu_bias"); } std::string print() const override { @@ -70,7 +74,8 @@ struct ParamsSensorImu : public ParamsSensorBase + "ab_initial_stdev: " + std::to_string(ab_initial_stdev) + "\n" + "wb_initial_stdev: " + std::to_string(wb_initial_stdev) + "\n" + "ab_rate_stdev: " + std::to_string(ab_rate_stdev) + "\n" - + "wb_rate_stdev: " + std::to_string(wb_rate_stdev) + "\n"; + + "wb_rate_stdev: " + std::to_string(wb_rate_stdev) + "\n" + + "dynamic_imu_bias: " + std::to_string(wb_rate_stdev) + "\n"; } }; diff --git a/src/sensor/sensor_imu.cpp b/src/sensor/sensor_imu.cpp index fba6cdf5e008b6dbe12dc1c7df5875ffadef59d3..d5a676f66ac4297972f84706601fc963725805e7 100644 --- a/src/sensor/sensor_imu.cpp +++ b/src/sensor/sensor_imu.cpp @@ -38,7 +38,7 @@ SensorImu::SensorImu(const Eigen::VectorXd& _extrinsics, const ParamsSensorImu& std::make_shared<StateQuaternion>(_extrinsics.tail(4), true, false), std::make_shared<StateParams6>(Vector6d::Zero(), false), (Eigen::Vector6d()<<_params.a_noise,_params.a_noise,_params.a_noise,_params.w_noise,_params.w_noise,_params.w_noise).finished(), - false, false, true), + false, false, _params.dynamic_imu_bias), a_noise(_params.a_noise), w_noise(_params.w_noise), ab_initial_stdev(_params.ab_initial_stdev), diff --git a/src/yaml/sensor_imu_yaml.cpp b/src/yaml/sensor_imu_yaml.cpp index e530b244596d202833a88b6c9c48150025d7ec6f..cff3ec8a4a936d450583c968d3db631adfbc6f8d 100644 --- a/src/yaml/sensor_imu_yaml.cpp +++ b/src/yaml/sensor_imu_yaml.cpp @@ -59,6 +59,8 @@ static ParamsSensorBasePtr createParamsSensorImu(const std::string & _filename_d params->ab_rate_stdev = variances["ab_rate_stdev"] .as<double>(); params->wb_rate_stdev = variances["wb_rate_stdev"] .as<double>(); + params->dynamic_imu_bias = config["dynamic_imu_bias"] .as<bool>(); + return params; } diff --git a/test/yaml/sensor_imu.yaml b/test/yaml/sensor_imu.yaml index 3c78a00d35c785fe73381d8f6ce99a705d27ce77..38a3df944cc7e8a7021e0bfe418fb5c79b324b2f 100644 --- a/test/yaml/sensor_imu.yaml +++ b/test/yaml/sensor_imu.yaml @@ -7,3 +7,5 @@ motion_variances: wb_initial_stdev: 0.350 # rad/sec - initial bias ab_rate_stdev: 0.1 # m/s2/sqrt(s) wb_rate_stdev: 0.0400 # rad/s/sqrt(s) + +dynamic_imu_bias: true \ No newline at end of file diff --git a/test/yaml/sensor_imu_static_init.yaml b/test/yaml/sensor_imu_static_init.yaml index 700b8d6762b91b38e96391f6032b2c7c4221eabc..e8df83cd8f81b954affb9ebb05e8cb65c8b0f0de 100644 --- a/test/yaml/sensor_imu_static_init.yaml +++ b/test/yaml/sensor_imu_static_init.yaml @@ -7,3 +7,5 @@ motion_variances: wb_initial_stdev: 0.001 # rad/sec - initial bias ab_rate_stdev: 0.001 # m/s2/sqrt(s) wb_rate_stdev: 0.001 # rad/s/sqrt(s) + +dynamic_imu_bias: false \ No newline at end of file