diff --git a/demos/processor_imu.yaml b/demos/processor_imu.yaml index 5c623b82d4879cf3d9888870ef05083e050fdb91..3eba9dc3e7e6c69841f4cc0cbac9674028c1fe44 100644 --- a/demos/processor_imu.yaml +++ b/demos/processor_imu.yaml @@ -1,4 +1,4 @@ -type: "ProcessorIMU" # This must match the KEY used in the SensorFactory. Otherwise it is an error. +type: "ProcessorImu" # This must match the KEY used in the SensorFactory. Otherwise it is an error. time_tolerance: 0.0025 # Time tolerance for joining KFs unmeasured_perturbation_std: 0.00001 diff --git a/demos/processor_odom_3D.yaml b/demos/processor_odom_3d.yaml similarity index 100% rename from demos/processor_odom_3D.yaml rename to demos/processor_odom_3d.yaml diff --git a/demos/sensor_imu.yaml b/demos/sensor_imu.yaml index 941b84610845f31cfed813394d85c923d2a3211b..3c78a00d35c785fe73381d8f6ce99a705d27ce77 100644 --- a/demos/sensor_imu.yaml +++ b/demos/sensor_imu.yaml @@ -1,4 +1,4 @@ -type: "SensorIMU" # This must match the KEY used in the SensorFactory. Otherwise it is an error. +type: "SensorImu" # This must match the KEY used in the SensorFactory. Otherwise it is an error. motion_variances: a_noise: 0.053 # standard deviation of Acceleration noise (same for all the axis) in m/s2 diff --git a/demos/sensor_odom_3D.yaml b/demos/sensor_odom_3d.yaml similarity index 100% rename from demos/sensor_odom_3D.yaml rename to demos/sensor_odom_3d.yaml diff --git a/include/imu/processor/processor_imu.h b/include/imu/processor/processor_imu.h index 0cb27344610485b91f45770b32370faa81d4ab8d..3d3a04390065ce0d523c78db0a27e6057437dd7e 100644 --- a/include/imu/processor/processor_imu.h +++ b/include/imu/processor/processor_imu.h @@ -7,12 +7,12 @@ #include "core/processor/processor_motion.h" namespace wolf { -WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsIMU); +WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsImu); -struct ProcessorParamsIMU : public ProcessorParamsMotion +struct ProcessorParamsImu : public ProcessorParamsMotion { - ProcessorParamsIMU() = default; - ProcessorParamsIMU(std::string _unique_name, const ParamsServer& _server): + ProcessorParamsImu() = default; + ProcessorParamsImu(std::string _unique_name, const ParamsServer& _server): ProcessorParamsMotion(_unique_name, _server) { // @@ -23,17 +23,17 @@ struct ProcessorParamsIMU : public ProcessorParamsMotion } }; -WOLF_PTR_TYPEDEFS(ProcessorIMU); +WOLF_PTR_TYPEDEFS(ProcessorImu); //class -class ProcessorIMU : public ProcessorMotion{ +class ProcessorImu : public ProcessorMotion{ public: - ProcessorIMU(ProcessorParamsIMUPtr _params_motion_IMU); - virtual ~ProcessorIMU(); + ProcessorImu(ProcessorParamsImuPtr _params_motion_Imu); + virtual ~ProcessorImu(); // virtual void configure(SensorBasePtr _sensor) override { }; virtual void configure(SensorBasePtr _sensor) override; - WOLF_PROCESSOR_CREATE(ProcessorIMU, ProcessorParamsIMU); + WOLF_PROCESSOR_CREATE(ProcessorImu, ProcessorParamsImu); protected: virtual void computeCurrentDelta(const Eigen::VectorXd& _data, @@ -72,7 +72,7 @@ class ProcessorIMU : public ProcessorMotion{ CaptureBasePtr _capture_origin) override; protected: - ProcessorParamsIMUPtr params_motion_IMU_; + ProcessorParamsImuPtr params_motion_Imu_; Eigen::Matrix<double, 9, 9> unmeasured_perturbation_cov_; }; @@ -85,7 +85,7 @@ class ProcessorIMU : public ProcessorMotion{ namespace wolf{ -inline Eigen::VectorXd ProcessorIMU::deltaZero() const +inline Eigen::VectorXd ProcessorImu::deltaZero() const { return (Eigen::VectorXd(10) << 0,0,0, 0,0,0,1, 0,0,0 ).finished(); // p, q, v } diff --git a/include/imu/sensor/sensor_imu.h b/include/imu/sensor/sensor_imu.h index 17b451ff3fd4bb48e5d0de20df3b24e78f366011..b2cd4dbcae2b16949b52312f911e50e3f4cd3506 100644 --- a/include/imu/sensor/sensor_imu.h +++ b/include/imu/sensor/sensor_imu.h @@ -8,10 +8,10 @@ namespace wolf { -WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorIMU); +WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorImu); -struct ParamsSensorIMU : public ParamsSensorBase +struct ParamsSensorImu : public ParamsSensorBase { //noise std dev double w_noise = 0.001; //standard deviation of Gyroscope noise (same for all the axis) in rad/sec/ sqrt(s) @@ -25,12 +25,12 @@ struct ParamsSensorIMU : public ParamsSensorBase double ab_rate_stdev = 0.00001; double wb_rate_stdev = 0.00001; - virtual ~ParamsSensorIMU() = default; - ParamsSensorIMU() + virtual ~ParamsSensorImu() = default; + ParamsSensorImu() { //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE. } - ParamsSensorIMU(std::string _unique_name, const ParamsServer& _server): + ParamsSensorImu(std::string _unique_name, const ParamsServer& _server): ParamsSensorBase(_unique_name, _server) { w_noise = _server.getParam<double>(prefix + _unique_name + "/w_noise"); @@ -52,9 +52,9 @@ struct ParamsSensorIMU : public ParamsSensorBase } }; -WOLF_PTR_TYPEDEFS(SensorIMU); +WOLF_PTR_TYPEDEFS(SensorImu); -class SensorIMU : public SensorBase +class SensorImu : public SensorBase { protected: @@ -69,9 +69,9 @@ class SensorIMU : public SensorBase public: - SensorIMU(const Eigen::VectorXd& _extrinsics, const ParamsSensorIMU& _params); - SensorIMU(const Eigen::VectorXd& _extrinsics, ParamsSensorIMUPtr _params); - WOLF_SENSOR_CREATE(SensorIMU, ParamsSensorIMU, 7); + SensorImu(const Eigen::VectorXd& _extrinsics, const ParamsSensorImu& _params); + SensorImu(const Eigen::VectorXd& _extrinsics, ParamsSensorImuPtr _params); + WOLF_SENSOR_CREATE(SensorImu, ParamsSensorImu, 7); double getGyroNoise() const; double getAccelNoise() const; @@ -80,36 +80,36 @@ class SensorIMU : public SensorBase double getWbRateStdev() const; double getAbRateStdev() const; - virtual ~SensorIMU(); + virtual ~SensorImu(); }; -inline double SensorIMU::getGyroNoise() const +inline double SensorImu::getGyroNoise() const { return w_noise; } -inline double SensorIMU::getAccelNoise() const +inline double SensorImu::getAccelNoise() const { return a_noise; } -inline double SensorIMU::getWbInitialStdev() const +inline double SensorImu::getWbInitialStdev() const { return wb_initial_stdev; } -inline double SensorIMU::getAbInitialStdev() const +inline double SensorImu::getAbInitialStdev() const { return ab_initial_stdev; } -inline double SensorIMU::getWbRateStdev() const +inline double SensorImu::getWbRateStdev() const { return wb_rate_stdev; } -inline double SensorIMU::getAbRateStdev() const +inline double SensorImu::getAbRateStdev() const { return ab_rate_stdev; } diff --git a/src/processor/processor_imu.cpp b/src/processor/processor_imu.cpp index 48e737fd79e53aed2e703795f30fac141dab2a7c..5e86b56d933dbe001fb8e265fac07f9a876191d9 100644 --- a/src/processor/processor_imu.cpp +++ b/src/processor/processor_imu.cpp @@ -5,46 +5,46 @@ namespace wolf { -ProcessorIMU::ProcessorIMU(ProcessorParamsIMUPtr _params_motion_IMU) : - // ProcessorMotion("ProcessorImu", 3, 10, 10, 9, 6, 6, _params_motion_IMU), - ProcessorMotion("ProcessorImu", 10, 10, 9, 6, 6, _params_motion_IMU), - params_motion_IMU_(std::make_shared<ProcessorParamsIMU>(*_params_motion_IMU)) +ProcessorImu::ProcessorImu(ProcessorParamsImuPtr _params_motion_Imu) : + // ProcessorMotion("ProcessorImu", 3, 10, 10, 9, 6, 6, _params_motion_Imu), + ProcessorMotion("ProcessorImu", 10, 10, 9, 6, 6, _params_motion_Imu), + params_motion_Imu_(std::make_shared<ProcessorParamsImu>(*_params_motion_Imu)) { // Set constant parts of Jacobians jacobian_delta_preint_.setIdentity(9,9); // dDp'/dDp, dDv'/dDv, all zeros jacobian_delta_.setIdentity(9,9); // jacobian_calib_.setZero(9,6); - unmeasured_perturbation_cov_ = pow(params_motion_IMU_->unmeasured_perturbation_std, 2.0) * Eigen::Matrix<double, 9, 9>::Identity(); + unmeasured_perturbation_cov_ = pow(params_motion_Imu_->unmeasured_perturbation_std, 2.0) * Eigen::Matrix<double, 9, 9>::Identity(); } -ProcessorIMU::~ProcessorIMU() +ProcessorImu::~ProcessorImu() { // } -void ProcessorIMU::configure(SensorBasePtr _sensor) +void ProcessorImu::configure(SensorBasePtr _sensor) { - auto sensor_ = std::dynamic_pointer_cast<SensorIMU>(_sensor); - assert(sensor_ != nullptr && "Sensor is not of type SensorIMU"); + auto sensor_ = std::dynamic_pointer_cast<SensorImu>(_sensor); + assert(sensor_ != nullptr && "Sensor is not of type SensorImu"); } -bool ProcessorIMU::voteForKeyFrame() const +bool ProcessorImu::voteForKeyFrame() const { // time span - if (getBuffer().get().back().ts_ - getBuffer().get().front().ts_ > params_motion_IMU_->max_time_span) + if (getBuffer().get().back().ts_ - getBuffer().get().front().ts_ > params_motion_Imu_->max_time_span) { WOLF_DEBUG( "PM: vote: time span" ); return true; } // buffer length - if (getBuffer().get().size() > params_motion_IMU_->max_buff_length) + if (getBuffer().get().size() > params_motion_Imu_->max_buff_length) { WOLF_DEBUG( "PM: vote: buffer length" ); return true; } // angle turned double angle = 2.0 * asin(delta_integrated_.segment(3,3).norm()); - if (angle > params_motion_IMU_->angle_turned) + if (angle > params_motion_Imu_->angle_turned) { WOLF_DEBUG( "PM: vote: angle turned" ); return true; @@ -54,7 +54,7 @@ bool ProcessorIMU::voteForKeyFrame() const } -CaptureMotionPtr ProcessorIMU::emplaceCapture(const FrameBasePtr& _frame_own, +CaptureMotionPtr ProcessorImu::emplaceCapture(const FrameBasePtr& _frame_own, const SensorBasePtr& _sensor, const TimeStamp& _ts, const VectorXd& _data, @@ -63,7 +63,7 @@ CaptureMotionPtr ProcessorIMU::emplaceCapture(const FrameBasePtr& _frame_own, const VectorXd& _calib_preint, const CaptureBasePtr& _capture_origin) { - auto cap_motion = std::static_pointer_cast<CaptureMotion>(CaptureBase::emplace<CaptureIMU>(_frame_own, + auto cap_motion = std::static_pointer_cast<CaptureMotion>(CaptureBase::emplace<CaptureImu>(_frame_own, _ts, _sensor, _data, @@ -75,9 +75,9 @@ CaptureMotionPtr ProcessorIMU::emplaceCapture(const FrameBasePtr& _frame_own, return cap_motion; } -FeatureBasePtr ProcessorIMU::emplaceFeature(CaptureMotionPtr _capture_motion) +FeatureBasePtr ProcessorImu::emplaceFeature(CaptureMotionPtr _capture_motion) { - auto feature = FeatureBase::emplace<FeatureIMU>(_capture_motion, + auto feature = FeatureBase::emplace<FeatureImu>(_capture_motion, _capture_motion->getBuffer().get().back().delta_integr_, _capture_motion->getBuffer().get().back().delta_integr_cov_ + unmeasured_perturbation_cov_, _capture_motion->getCalibrationPreint(), @@ -85,17 +85,17 @@ FeatureBasePtr ProcessorIMU::emplaceFeature(CaptureMotionPtr _capture_motion) return feature; } -FactorBasePtr ProcessorIMU::emplaceFactor(FeatureBasePtr _feature_motion, CaptureBasePtr _capture_origin) +FactorBasePtr ProcessorImu::emplaceFactor(FeatureBasePtr _feature_motion, CaptureBasePtr _capture_origin) { - CaptureIMUPtr cap_imu = std::static_pointer_cast<CaptureIMU>(_capture_origin); - FeatureIMUPtr ftr_imu = std::static_pointer_cast<FeatureIMU>(_feature_motion); + CaptureImuPtr cap_imu = std::static_pointer_cast<CaptureImu>(_capture_origin); + FeatureImuPtr ftr_imu = std::static_pointer_cast<FeatureImu>(_feature_motion); - auto fac_imu = FactorBase::emplace<FactorIMU>(_feature_motion, ftr_imu, cap_imu, shared_from_this(), params_->apply_loss_function); + auto fac_imu = FactorBase::emplace<FactorImu>(_feature_motion, ftr_imu, cap_imu, shared_from_this(), params_->apply_loss_function); return fac_imu; } -void ProcessorIMU::computeCurrentDelta(const Eigen::VectorXd& _data, +void ProcessorImu::computeCurrentDelta(const Eigen::VectorXd& _data, const Eigen::MatrixXd& _data_cov, const Eigen::VectorXd& _calib, const double _dt, @@ -137,7 +137,7 @@ void ProcessorIMU::computeCurrentDelta(const Eigen::VectorXd& _data, } -void ProcessorIMU::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, +void ProcessorImu::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, const Eigen::VectorXd& _delta, const double _dt, Eigen::VectorXd& _delta_preint_plus_delta) const @@ -152,7 +152,7 @@ void ProcessorIMU::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, _delta_preint_plus_delta = imu::compose(_delta_preint, _delta, _dt); } -void ProcessorIMU::statePlusDelta(const Eigen::VectorXd& _x, +void ProcessorImu::statePlusDelta(const Eigen::VectorXd& _x, const Eigen::VectorXd& _delta, const double _dt, Eigen::VectorXd& _x_plus_delta) const @@ -165,7 +165,7 @@ void ProcessorIMU::statePlusDelta(const Eigen::VectorXd& _x, _x_plus_delta = imu::composeOverState(_x, _delta, _dt); } -void ProcessorIMU::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, +void ProcessorImu::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, const Eigen::VectorXd& _delta, const double _dt, Eigen::VectorXd& _delta_preint_plus_delta, @@ -205,6 +205,6 @@ void ProcessorIMU::deltaPlusDelta(const Eigen::VectorXd& _delta_preint, namespace wolf { -WOLF_REGISTER_PROCESSOR("ProcessorIMU", ProcessorIMU) -WOLF_REGISTER_PROCESSOR_AUTO("ProcessorIMU", ProcessorIMU) +WOLF_REGISTER_PROCESSOR("ProcessorImu", ProcessorImu) +WOLF_REGISTER_PROCESSOR_AUTO("ProcessorImu", ProcessorImu) } diff --git a/src/sensor/sensor_imu.cpp b/src/sensor/sensor_imu.cpp index cff4178c9975f0282ae25df7522aef37bc11a3a1..927a1aea07db217557ccba5739f0df4ec020b581 100644 --- a/src/sensor/sensor_imu.cpp +++ b/src/sensor/sensor_imu.cpp @@ -4,14 +4,14 @@ namespace wolf { -SensorIMU::SensorIMU(const Eigen::VectorXd& _extrinsics, ParamsSensorIMUPtr _params) : - SensorIMU(_extrinsics, *_params) +SensorImu::SensorImu(const Eigen::VectorXd& _extrinsics, ParamsSensorImuPtr _params) : + SensorImu(_extrinsics, *_params) { // } -SensorIMU::SensorIMU(const Eigen::VectorXd& _extrinsics, const ParamsSensorIMU& _params) : - SensorBase("SensorIMU", std::make_shared<StateBlock>(_extrinsics.head(3), true), std::make_shared<StateQuaternion>(_extrinsics.tail(4), true), std::make_shared<StateBlock>(6, false, nullptr), (Eigen::Vector6d()<<_params.a_noise,_params.a_noise,_params.a_noise,_params.w_noise,_params.w_noise,_params.w_noise).finished(), false, false, true), +SensorImu::SensorImu(const Eigen::VectorXd& _extrinsics, const ParamsSensorImu& _params) : + SensorBase("SensorImu", std::make_shared<StateBlock>(_extrinsics.head(3), true), std::make_shared<StateQuaternion>(_extrinsics.tail(4), true), std::make_shared<StateBlock>(6, false, nullptr), (Eigen::Vector6d()<<_params.a_noise,_params.a_noise,_params.a_noise,_params.w_noise,_params.w_noise,_params.w_noise).finished(), false, false, true), a_noise(_params.a_noise), w_noise(_params.w_noise), ab_initial_stdev(_params.ab_initial_stdev), @@ -19,10 +19,10 @@ SensorIMU::SensorIMU(const Eigen::VectorXd& _extrinsics, const ParamsSensorIMU& ab_rate_stdev(_params.ab_rate_stdev), wb_rate_stdev(_params.wb_rate_stdev) { - assert(_extrinsics.size() == 7 && "Wrong extrinsics vector size! Should be 7 for 2D."); + assert(_extrinsics.size() == 7 && "Wrong extrinsics vector size! Should be 7 for 2d."); } -SensorIMU::~SensorIMU() +SensorImu::~SensorImu() { // } @@ -32,6 +32,6 @@ SensorIMU::~SensorIMU() // Register in the SensorFactory #include "core/sensor/sensor_factory.h" namespace wolf { -WOLF_REGISTER_SENSOR("SensorIMU", SensorIMU) -WOLF_REGISTER_SENSOR_AUTO("SensorIMU", SensorIMU); +WOLF_REGISTER_SENSOR("SensorImu", SensorImu) +WOLF_REGISTER_SENSOR_AUTO("SensorImu", SensorImu); } // namespace wolf diff --git a/src/yaml/processor_imu_yaml.cpp b/src/yaml/processor_imu_yaml.cpp index d4756a4dd0b6e7b0b7e705e993d52334a432249c..7e7082899ff4924749c4b402f163ac96afc2b688 100644 --- a/src/yaml/processor_imu_yaml.cpp +++ b/src/yaml/processor_imu_yaml.cpp @@ -47,7 +47,7 @@ static ProcessorParamsBasePtr createProcessorIMUParams(const std::string & _file } // Register in the SensorFactory -const bool WOLF_UNUSED registered_prc_odom_3D = ProcessorParamsFactory::get().registerCreator("ProcessorIMU", createProcessorIMUParams); +const bool WOLF_UNUSED registered_prc_odom_3d = ProcessorParamsFactory::get().registerCreator("ProcessorIMU", createProcessorIMUParams); } // namespace [unnamed] diff --git a/test/gtest_factor_imu.cpp b/test/gtest_factor_imu.cpp index b734f7665eb3b219d296e64c915c9847ca00891f..b1d7254b8ef39178d63f9e0217011dcf408a9fb2 100644 --- a/test/gtest_factor_imu.cpp +++ b/test/gtest_factor_imu.cpp @@ -15,8 +15,8 @@ #include "imu/sensor/sensor_imu.h" //Wolf -#include <core/factor/factor_pose_3D.h> -#include <core/processor/processor_odom_3D.h> +#include <core/factor/factor_pose_3d.h> +#include <core/processor/processor_odom_3d.h> #include <core/ceres_wrapper/ceres_manager.h> // debug @@ -849,14 +849,14 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRot : public testing::Test CeresManagerPtr ceres_manager; SensorBasePtr sensor; SensorIMUPtr sensor_imu; - SensorOdom3DPtr sensor_odo; + SensorOdom3dPtr sensor_odo; ProcessorBasePtr processor; ProcessorIMUPtr processor_imu; - ProcessorOdom3DPtr processor_odo; + ProcessorOdom3dPtr processor_odo; FrameBasePtr origin_KF; FrameBasePtr last_KF; CaptureIMUPtr capture_imu; - CaptureOdom3DPtr capture_odo; + CaptureOdom3dPtr capture_odo; Eigen::Vector6d origin_bias; Eigen::VectorXd expected_final_state; Eigen::VectorXd x_origin; @@ -884,23 +884,23 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRot : public testing::Test processor = problem->installProcessor("ProcessorImu", "IMU pre-integrator", "Main IMU", wolf_root + "/demos/processor_imu.yaml"); processor_imu = std::static_pointer_cast<ProcessorIMU>(processor); - // SENSOR + PROCESSOR ODOM 3D - sensor = problem->installSensor("ODOM 3D", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3D.yaml"); - sensor_odo = std::static_pointer_cast<SensorOdom3D>(sensor); + // SENSOR + PROCESSOR ODOM 3d + sensor = problem->installSensor("ODOM 3d", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3d.yaml"); + sensor_odo = std::static_pointer_cast<SensorOdom3d>(sensor); sensor_imu->setNoiseStd((sensor_imu->getNoiseStd()/10.0).eval()); sensor_odo->setNoiseStd((sensor_odo->getNoiseStd()/10.0).eval()); WOLF_TRACE("IMU cov: ", sensor_imu->getNoiseCov().diagonal().transpose()); WOLF_TRACE("ODO cov: ", sensor_odo->getNoiseCov().diagonal().transpose()); - ProcessorParamsOdom3DPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>(); - prc_odom3D_params->max_time_span = 0.0099; - prc_odom3D_params->max_buff_length = 1000; //make it very high so that this condition will not pass - prc_odom3D_params->dist_traveled = 1000; - prc_odom3D_params->angle_turned = 1000; + ProcessorParamsOdom3dPtr prc_odom3d_params = std::make_shared<ProcessorParamsOdom3d>(); + prc_odom3d_params->max_time_span = 0.0099; + prc_odom3d_params->max_buff_length = 1000; //make it very high so that this condition will not pass + prc_odom3d_params->dist_traveled = 1000; + prc_odom3d_params->angle_turned = 1000; - processor = problem->installProcessor("ODOM 3D", "odom", sensor_odo, prc_odom3D_params); - processor_odo = std::static_pointer_cast<ProcessorOdom3D>(processor); + processor = problem->installProcessor("ODOM 3d", "odom", sensor_odo, prc_odom3d_params); + processor_odo = std::static_pointer_cast<ProcessorOdom3d>(processor); //===================================================== END{SETTING PROBLEM} //===================================================== INITIALIZATION @@ -929,7 +929,7 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRot : public testing::Test capture_imu = std::make_shared<CaptureIMU> (t_imu, sensor_imu, data_imu, sensor_imu->getNoiseCov(), sensor_imu->getCalibration(), nullptr); - capture_odo = std::make_shared<CaptureOdom3D>(t_odo, sensor_odo, data_odo, sensor_odo->getNoiseCov(), nullptr); + capture_odo = std::make_shared<CaptureOdom3d>(t_odo, sensor_odo, data_odo, sensor_odo->getNoiseCov(), nullptr); sensor_odo->process(capture_odo); t_odo += dt_odo; //first odometry data will be processed at this timestamp @@ -973,7 +973,7 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRot : public testing::Test // WOLF_TRACE("last calib: ", processor_imu->getLast()->getCalibration().transpose()); // WOLF_TRACE("last calib preint: ", processor_imu->getLast()->getCalibrationPreint().transpose()); - // PROCESS ODOM 3D DATA + // PROCESS ODOM 3d DATA data_odo.head(3) << 0,0,0; data_odo.tail(3) = q2v(quat_odo); capture_odo->setTimeStamp(t_odo); @@ -1030,12 +1030,12 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test public: wolf::TimeStamp t; SensorIMUPtr sen_imu; - SensorOdom3DPtr sen_odom3D; + SensorOdom3dPtr sen_odom3d; ProblemPtr problem; CeresManager* ceres_manager_wolf_diff; ProcessorBasePtr processor_; ProcessorIMUPtr processor_imu; - ProcessorOdom3DPtr processor_odom3D; + ProcessorOdom3dPtr processor_odom3d; FrameBasePtr origin_KF; FrameBasePtr last_KF; Eigen::Vector6d origin_bias; @@ -1067,17 +1067,17 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test sen_imu = std::static_pointer_cast<SensorIMU>(sen0_ptr); processor_imu = std::static_pointer_cast<ProcessorIMU>(processor_); - // SENSOR + PROCESSOR ODOM 3D - SensorBasePtr sen1_ptr = problem->installSensor("ODOM 3D", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3D.yaml"); - ProcessorParamsOdom3DPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>(); - prc_odom3D_params->max_time_span = 0.9999; - prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass - prc_odom3D_params->dist_traveled = 1000000000; - prc_odom3D_params->angle_turned = 1000000000; - - ProcessorBasePtr processor_odom = problem->installProcessor("ODOM 3D", "odom", sen1_ptr, prc_odom3D_params); - sen_odom3D = std::static_pointer_cast<SensorOdom3D>(sen1_ptr); - processor_odom3D = std::static_pointer_cast<ProcessorOdom3D>(processor_odom); + // SENSOR + PROCESSOR ODOM 3d + SensorBasePtr sen1_ptr = problem->installSensor("ODOM 3d", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3d.yaml"); + ProcessorParamsOdom3dPtr prc_odom3d_params = std::make_shared<ProcessorParamsOdom3d>(); + prc_odom3d_params->max_time_span = 0.9999; + prc_odom3d_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass + prc_odom3d_params->dist_traveled = 1000000000; + prc_odom3d_params->angle_turned = 1000000000; + + ProcessorBasePtr processor_odom = problem->installProcessor("ODOM 3d", "odom", sen1_ptr, prc_odom3d_params); + sen_odom3d = std::static_pointer_cast<SensorOdom3d>(sen1_ptr); + processor_odom3d = std::static_pointer_cast<ProcessorOdom3d>(processor_odom); //===================================================== END{SETTING PROBLEM} //===================================================== INITIALIZATION @@ -1093,13 +1093,13 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test //set origin of the problem origin_KF = processor_imu->setOrigin(x_origin, t); - processor_odom3D->setOrigin(origin_KF); + processor_odom3d->setOrigin(origin_KF); //===================================================== END{INITIALIZATION} //===================================================== PROCESS DATA // PROCESS DATA - Eigen::Vector6d data_imu(Eigen::Vector6d::Zero()), data_odom3D(Eigen::Vector6d::Zero()); + Eigen::Vector6d data_imu(Eigen::Vector6d::Zero()), data_odom3d(Eigen::Vector6d::Zero()); Eigen::Vector3d rateOfTurn; //deg/s rateOfTurn << 0,90,0; VectorXd D_cor(10); @@ -1107,8 +1107,8 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test double dt(0.0010), dt_odom(1.0); TimeStamp ts(0.0), t_odom(0.0); wolf::CaptureIMUPtr imu_ptr = std::make_shared<CaptureIMU>(ts, sen_imu, data_imu, sen_imu->getNoiseCov(), Eigen::Vector6d::Zero()); - wolf::CaptureOdom3DPtr mot_ptr = std::make_shared<CaptureOdom3D>(t, sen_odom3D, data_odom3D, sen_odom3D->getNoiseCov(), nullptr); - sen_odom3D->process(mot_ptr); + wolf::CaptureOdom3dPtr mot_ptr = std::make_shared<CaptureOdom3d>(t, sen_odom3d, data_odom3d, sen_odom3d->getNoiseCov(), nullptr); + sen_odom3d->process(mot_ptr); //first odometry data will be processed at this timestamp t_odom.set(t_odom.get() + dt_odom); @@ -1138,12 +1138,12 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test { WOLF_TRACE("X_preint(t) : ", problem->getState(ts).transpose()); - // PROCESS ODOM 3D DATA - data_odom3D.head(3) << 0,0,0; - data_odom3D.tail(3) = q2v(odom_quat); + // PROCESS ODOM 3d DATA + data_odom3d.head(3) << 0,0,0; + data_odom3d.tail(3) = q2v(odom_quat); mot_ptr->setTimeStamp(t_odom); - mot_ptr->setData(data_odom3D); - sen_odom3D->process(mot_ptr); + mot_ptr->setData(data_odom3d); + sen_odom3d->process(mot_ptr); //prepare next odometry measurement odom_quat = Eigen::Quaterniond::Identity(); //set to identity to have next odom relative to this last KF @@ -1171,12 +1171,12 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test public: wolf::TimeStamp t; SensorIMUPtr sen_imu; - SensorOdom3DPtr sen_odom3D; + SensorOdom3dPtr sen_odom3d; ProblemPtr problem; CeresManagerPtr ceres_manager_wolf_diff; ProcessorBasePtr processor; ProcessorIMUPtr processor_imu; - ProcessorOdom3DPtr processor_odom3D; + ProcessorOdom3dPtr processor_odom3d; FrameBasePtr origin_KF; FrameBasePtr last_KF; Eigen::Vector6d origin_bias; @@ -1209,17 +1209,17 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test sen_imu = std::static_pointer_cast<SensorIMU>(sen0_ptr); processor_imu = std::static_pointer_cast<ProcessorIMU>(processor); - // SENSOR + PROCESSOR ODOM 3D - SensorBasePtr sen1_ptr = problem->installSensor("ODOM 3D", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3D.yaml"); - ProcessorParamsOdom3DPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>(); - prc_odom3D_params->max_time_span = 0.9999; - prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass - prc_odom3D_params->dist_traveled = 1000000000; - prc_odom3D_params->angle_turned = 1000000000; - - ProcessorBasePtr processor_odom = problem->installProcessor("ODOM 3D", "odom", sen1_ptr, prc_odom3D_params); - sen_odom3D = std::static_pointer_cast<SensorOdom3D>(sen1_ptr); - processor_odom3D = std::static_pointer_cast<ProcessorOdom3D>(processor_odom); + // SENSOR + PROCESSOR ODOM 3d + SensorBasePtr sen1_ptr = problem->installSensor("ODOM 3d", "odom", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3d.yaml"); + ProcessorParamsOdom3dPtr prc_odom3d_params = std::make_shared<ProcessorParamsOdom3d>(); + prc_odom3d_params->max_time_span = 0.9999; + prc_odom3d_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass + prc_odom3d_params->dist_traveled = 1000000000; + prc_odom3d_params->angle_turned = 1000000000; + + ProcessorBasePtr processor_odom = problem->installProcessor("ODOM 3d", "odom", sen1_ptr, prc_odom3d_params); + sen_odom3d = std::static_pointer_cast<SensorOdom3d>(sen1_ptr); + processor_odom3d = std::static_pointer_cast<ProcessorOdom3d>(processor_odom); //===================================================== END{SETTING PROBLEM} //===================================================== INITIALIZATION @@ -1236,21 +1236,21 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test //set origin of the problem origin_KF = problem->setPrior(x_origin, P_origin, t, 0.005); // origin_KF = processor_imu->setOrigin(x_origin, t); -// processor_odom3D->setOrigin(origin_KF); +// processor_odom3d->setOrigin(origin_KF); //===================================================== END{INITIALIZATION} //===================================================== PROCESS DATA // PROCESS DATA - Eigen::Vector6d data_imu(Eigen::Vector6d::Zero()), data_odom3D(Eigen::Vector6d::Zero()); + Eigen::Vector6d data_imu(Eigen::Vector6d::Zero()), data_odom3d(Eigen::Vector6d::Zero()); Eigen::Vector3d rateOfTurn; //deg/s rateOfTurn << 45,90,0; double dt(0.0010), dt_odom(1.0); TimeStamp ts(0.0), t_odom(1.0); wolf::CaptureIMUPtr imu_ptr = std::make_shared<CaptureIMU>(ts, sen_imu, data_imu, sen_imu->getNoiseCov(), Eigen::Vector6d::Zero()); - wolf::CaptureOdom3DPtr mot_ptr = std::make_shared<CaptureOdom3D>(t, sen_odom3D, data_odom3D, nullptr); - sen_odom3D->process(mot_ptr); + wolf::CaptureOdom3dPtr mot_ptr = std::make_shared<CaptureOdom3d>(t, sen_odom3d, data_odom3d, nullptr); + sen_odom3d->process(mot_ptr); //first odometry data will be processed at this timestamp //t_odom.set(t_odom.get() + dt_odom); @@ -1278,12 +1278,12 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test if(ts.get() >= t_odom.get()) { - // PROCESS ODOM 3D DATA - data_odom3D.head(3) << 0,0,0; - data_odom3D.tail(3) = q2v(odom_quat); + // PROCESS ODOM 3d DATA + data_odom3d.head(3) << 0,0,0; + data_odom3d.tail(3) = q2v(odom_quat); mot_ptr->setTimeStamp(t_odom); - mot_ptr->setData(data_odom3D); - sen_odom3D->process(mot_ptr); + mot_ptr->setData(data_odom3d); + sen_odom3d->process(mot_ptr); //prepare next odometry measurement odom_quat = Eigen::Quaterniond::Identity(); //set to identity to have next odom relative to this last KF @@ -1317,12 +1317,12 @@ class FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test if(ts.get() >= t_odom.get()) { - // PROCESS ODOM 3D DATA - data_odom3D.head(3) << 0,0,0; - data_odom3D.tail(3) = q2v(odom_quat); + // PROCESS ODOM 3d DATA + data_odom3d.head(3) << 0,0,0; + data_odom3d.tail(3) = q2v(odom_quat); mot_ptr->setTimeStamp(t_odom); - mot_ptr->setData(data_odom3D); - sen_odom3D->process(mot_ptr); + mot_ptr->setData(data_odom3d); + sen_odom3d->process(mot_ptr); //prepare next odometry measurement odom_quat = Eigen::Quaterniond::Identity(); //set to identity to have next odom relative to this last KF @@ -2467,9 +2467,9 @@ TEST_F(FactorIMU_ODOM_biasTest_Move_NonNullBiasRotY, VarQ1B1B2P2Q2_InvarP1V1V2_i Eigen::MatrixXd featureFix_cov(6,6); featureFix_cov = Eigen::MatrixXd::Identity(6,6); featureFix_cov(5,5) = 0.1; - auto capfix = CaptureBase::emplace<CaptureOdom3D>(origin_KF, 0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr); - auto ffix = FeatureBase::emplace<FeatureBase>(capfix, "ODOM 3D", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov); - FactorPose3DPtr fac_fix = std::static_pointer_cast<FactorPose3D>(FactorBase::emplace<FactorPose3D>(ffix, ffix)); + auto capfix = CaptureBase::emplace<CaptureOdom3d>(origin_KF, 0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr); + auto ffix = FeatureBase::emplace<FeatureBase>(capfix, "ODOM 3d", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov); + FactorPose3dPtr fac_fix = std::static_pointer_cast<FactorPose3d>(FactorBase::emplace<FactorPose3d>(ffix, ffix)); //prepare problem for solving origin_KF->getP()->fix(); @@ -2525,12 +2525,12 @@ TEST_F(FactorIMU_ODOM_biasTest_Move_NonNullBiasRotXY, VarQ1B1B2P2Q2_InvarP1V1V2_ Eigen::MatrixXd featureFix_cov(6,6); featureFix_cov = Eigen::MatrixXd::Identity(6,6); featureFix_cov(5,5) = 0.1; - // CaptureBasePtr capfix = origin_KF->addCapture(std::make_shared<CaptureOdom3D>(0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr)); - auto capfix = CaptureBase::emplace<CaptureOdom3D>(origin_KF, 0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr); - // FeatureBasePtr ffix = capfix->addFeature(std::make_shared<FeatureBase>("ODOM 3D", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov)); - auto ffix = FeatureBase::emplace<FeatureBase>(capfix, "ODOM 3D", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov); - // FactorPose3DPtr fac_fix = std::static_pointer_cast<FactorPose3D>(ffix->addFactor(std::make_shared<FactorPose3D>(ffix))); - FactorPose3DPtr fac_fix = std::static_pointer_cast<FactorPose3D>(FactorBase::emplace<FactorPose3D>(ffix, ffix)); + // CaptureBasePtr capfix = origin_KF->addCapture(std::make_shared<CaptureOdom3d>(0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr)); + auto capfix = CaptureBase::emplace<CaptureOdom3d>(origin_KF, 0, nullptr, (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), nullptr); + // FeatureBasePtr ffix = capfix->addFeature(std::make_shared<FeatureBase>("ODOM 3d", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov)); + auto ffix = FeatureBase::emplace<FeatureBase>(capfix, "ODOM 3d", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), featureFix_cov); + // FactorPose3dPtr fac_fix = std::static_pointer_cast<FactorPose3d>(ffix->addFactor(std::make_shared<FactorPose3d>(ffix))); + FactorPose3dPtr fac_fix = std::static_pointer_cast<FactorPose3d>(FactorBase::emplace<FactorPose3d>(ffix, ffix)); //prepare problem for solving origin_KF->getP()->fix(); diff --git a/test/gtest_imu.cpp b/test/gtest_imu.cpp index 48fb83e9fe737427b43e6b128eae35d5824948ca..16b7d30838c92aa5ac3a490f673c924a54478e44 100644 --- a/test/gtest_imu.cpp +++ b/test/gtest_imu.cpp @@ -12,8 +12,8 @@ #include "imu/internal/config.h" #include <core/common/wolf.h> -#include <core/sensor/sensor_odom_3D.h> -#include <core/processor/processor_odom_3D.h> +#include <core/sensor/sensor_odom_3d.h> +#include <core/processor/processor_odom_3d.h> #include <core/ceres_wrapper/ceres_manager.h> #include <core/utils/utils_gtest.h> @@ -590,9 +590,9 @@ class Process_Factor_IMU_ODO : public Process_Factor_IMU { public: // Wolf objects - SensorOdom3DPtr sensor_odo; - ProcessorOdom3DPtr processor_odo; - CaptureOdom3DPtr capture_odo; + SensorOdom3dPtr sensor_odo; + ProcessorOdom3dPtr processor_odo; + CaptureOdom3dPtr capture_odo; virtual void SetUp( ) override { @@ -603,12 +603,12 @@ class Process_Factor_IMU_ODO : public Process_Factor_IMU // ===================================== ODO string wolf_root = _WOLF_IMU_ROOT_DIR; - SensorBasePtr sensor = problem->installSensor ("SensorOdom3D", "Odometer", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3D.yaml" ); - ProcessorBasePtr processor = problem->installProcessor("ProcessorOdom3D", "Odometer", "Odometer" , wolf_root + "/demos/processor_odom_3D.yaml"); + SensorBasePtr sensor = problem->installSensor ("SensorOdom3d", "Odometer", (Vector7d()<<0,0,0,0,0,0,1).finished(), wolf_root + "/demos/sensor_odom_3d.yaml" ); + ProcessorBasePtr processor = problem->installProcessor("ProcessorOdom3d", "Odometer", "Odometer" , wolf_root + "/demos/processor_odom_3d.yaml"); - sensor_odo = static_pointer_cast<SensorOdom3D>(sensor); + sensor_odo = static_pointer_cast<SensorOdom3d>(sensor); - processor_odo = static_pointer_cast<ProcessorOdom3D>(processor); + processor_odo = static_pointer_cast<ProcessorOdom3d>(processor); processor_odo->setTimeTolerance(dt/2); processor_odo->setVotingActive(false); } @@ -626,7 +626,7 @@ class Process_Factor_IMU_ODO : public Process_Factor_IMU Vector3d dth = log_q( q0.conjugate() * q1 ); data << dp, dth; - CaptureOdom3DPtr capture_odo = make_shared<CaptureOdom3D>(t, sensor_odo, data, sensor_odo->getNoiseCov()); + CaptureOdom3dPtr capture_odo = make_shared<CaptureOdom3d>(t, sensor_odo, data, sensor_odo->getNoiseCov()); sensor_odo->process(capture_odo); } @@ -644,7 +644,7 @@ class Process_Factor_IMU_ODO : public Process_Factor_IMU Vector3d dth = log_q( q0.conjugate() * q1 ); data << dp, dth; - CaptureOdom3DPtr capture_odo = make_shared<CaptureOdom3D>(t, sensor_odo, data, sensor_odo->getNoiseCov()); + CaptureOdom3dPtr capture_odo = make_shared<CaptureOdom3d>(t, sensor_odo, data, sensor_odo->getNoiseCov()); sensor_odo->process(capture_odo); } @@ -657,7 +657,7 @@ class Process_Factor_IMU_ODO : public Process_Factor_IMU // ===================================== ODO // Process ODO for the callback to take effect data = Vector6d::Zero(); - capture_odo = make_shared<CaptureOdom3D>(t+dt, sensor_odo, data, sensor_odo->getNoiseCov()); + capture_odo = make_shared<CaptureOdom3d>(t+dt, sensor_odo, data, sensor_odo->getNoiseCov()); sensor_odo->process(capture_odo); }