diff --git a/include/IMU/processor/processor_IMU.h b/include/IMU/processor/processor_IMU.h index 34b2b14916e5eece2fbd4bb948285165cbb5e59e..42099045146461b1ca9145dd5e3b450b75916f96 100644 --- a/include/IMU/processor/processor_IMU.h +++ b/include/IMU/processor/processor_IMU.h @@ -35,6 +35,9 @@ class ProcessorIMU : public ProcessorMotion{ virtual ~ProcessorIMU(); virtual void configure(SensorBasePtr _sensor) override { }; + // Factory method for high level API + static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params); + protected: virtual void computeCurrentDelta(const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_cov, @@ -78,9 +81,6 @@ class ProcessorIMU : public ProcessorMotion{ ProcessorParamsIMUPtr params_motion_IMU_; Eigen::Matrix<Scalar, 9, 9> unmeasured_perturbation_cov_; - public: - //for factory - static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr sensor_ptr = nullptr); }; } diff --git a/src/processor/processor_IMU.cpp b/src/processor/processor_IMU.cpp index 0bda304c2123fbb95f72e6572b7b9a7e5bc80e06..fb2803d725dd1c57328cd81f26759fabb68bfba9 100644 --- a/src/processor/processor_IMU.cpp +++ b/src/processor/processor_IMU.cpp @@ -21,16 +21,14 @@ ProcessorIMU::~ProcessorIMU() // } -ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr _sen_ptr) +ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params) { - std::shared_ptr<ProcessorParamsIMU> prc_imu_params; - if (_params) - prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params); - else - prc_imu_params = std::make_shared<ProcessorParamsIMU>(); + auto prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params); + + auto prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params); - ProcessorIMUPtr prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params); prc_ptr->setName(_unique_name); + return prc_ptr; } diff --git a/test/gtest_processor_IMU.cpp b/test/gtest_processor_IMU.cpp index 8b5e45c73a6d3fbcbb3222f9aa8d323289454347..9abf094e61b6a9d31819c27c100fe2b179214ab5 100644 --- a/test/gtest_processor_IMU.cpp +++ b/test/gtest_processor_IMU.cpp @@ -98,17 +98,17 @@ TEST(ProcessorIMU_constructors, ALL) ASSERT_EQ(prc1->getDistTraveled(), param_ptr->dist_traveled); ASSERT_EQ(prc1->getAngleTurned(), param_ptr->angle_turned); - //Factory constructor without yaml + //Factory constructor with pointers std::string wolf_root = _WOLF_IMU_ROOT_DIR; ProblemPtr problem = Problem::create("POV", 3); Vector7s extrinsics = (Vector7s()<<1,0,0, 0,0,0,1).finished(); SensorBasePtr sensor_ptr = problem->installSensor("IMU", "Main IMU", extrinsics, wolf_root + "/demos/sensor_imu.yaml"); - ProcessorBasePtr processor_ptr = problem->installProcessor("IMU", "IMU pre-integrator", "Main IMU", ""); - ProcessorParamsIMU params_default; - ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(), params_default.max_time_span); - ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxBuffLength(), params_default.max_buff_length); - ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(), params_default.dist_traveled); - ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(), params_default.angle_turned); + ProcessorParamsIMUPtr params_default = std::make_shared<ProcessorParamsIMU>(); + ProcessorBasePtr processor_ptr = problem->installProcessor("IMU", "IMU pre-integrator", sensor_ptr, params_default); + ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(), params_default->max_time_span); + ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxBuffLength(), params_default->max_buff_length); + ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(), params_default->dist_traveled); + ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(), params_default->angle_turned); //Factory constructor with yaml processor_ptr = problem->installProcessor("IMU", "Sec IMU pre-integrator", "Main IMU", wolf_root + "/demos/processor_imu.yaml");