diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cde987b69c7b41a95af481940cf7b7561e204637..7b2d492256e0421030771b0a10bc5c7eca00352b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: segaleran/ceres +image: labrobotica/ceres:1.14 before_script: - ls diff --git a/include/bodydynamics/processor/processor_force_torque_preint.h b/include/bodydynamics/processor/processor_force_torque_preint.h index d2dd19cc8b46d3cd7cbf38c86a5d9b1153a9c3bf..cd38fb90ffa4ad84d66519a73bfd0f771787cd08 100644 --- a/include/bodydynamics/processor/processor_force_torque_preint.h +++ b/include/bodydynamics/processor/processor_force_torque_preint.h @@ -24,9 +24,9 @@ struct ParamsProcessorForceTorquePreint : public ParamsProcessorMotion dimc = _server.getParam<int>(_unique_name + "/dimc_"); } ~ParamsProcessorForceTorquePreint() override = default; - std::string print() const + std::string print() const override { - return "\n" + ParamsProcessorMotion::print() + "\n" + return ParamsProcessorMotion::print() + "\n" + "sensor_ikin_name: " + sensor_ikin_name + "\n" + "sensor_angvel_name: " + sensor_angvel_name + "\n" + "nbc_: " + std::to_string(nbc) + "\n" @@ -71,7 +71,7 @@ class ProcessorForceTorquePreint : public ProcessorMotion{ Eigen::VectorXd deltaZero() const override; Eigen::VectorXd correctDelta(const Eigen::VectorXd& delta_preint, const Eigen::VectorXd& delta_step) const override; - VectorXd getCalibration (const CaptureBasePtr _capture) const override; + VectorXd getCalibration (const CaptureBasePtr _capture = nullptr) const override; void setCalibration(const CaptureBasePtr _capture, const VectorXd& _calibration) override; bool voteForKeyFrame() const override; diff --git a/include/bodydynamics/processor/processor_inertial_kinematics.h b/include/bodydynamics/processor/processor_inertial_kinematics.h index 043f3786aecbae1b674f1fd032553ab8cbf46f12..fcdc050cb2aef10c77b0755a81694ecbd852663a 100644 --- a/include/bodydynamics/processor/processor_inertial_kinematics.h +++ b/include/bodydynamics/processor/processor_inertial_kinematics.h @@ -29,9 +29,9 @@ struct ParamsProcessorInertialKinematics : public ParamsProcessorBase std_bp_drift = _server.getParam<double>(_unique_name + "/std_bp_drift"); } ~ParamsProcessorInertialKinematics() override = default; - std::string print() const + std::string print() const override { - return "\n" + ParamsProcessorBase::print() + "\n" + return ParamsProcessorBase::print() + "\n" + "sensor_angvel_name: " + sensor_angvel_name + "\n" + "std_bp_drift: " + std::to_string(std_bp_drift) + "\n"; } diff --git a/include/bodydynamics/sensor/sensor_force_torque.h b/include/bodydynamics/sensor/sensor_force_torque.h index af68202f47b1784fa83d5af60e5b64bf39147d8b..761ba5c99ba408954d6ef056ab5d158f2b01fd50 100644 --- a/include/bodydynamics/sensor/sensor_force_torque.h +++ b/include/bodydynamics/sensor/sensor_force_torque.h @@ -27,9 +27,9 @@ struct ParamsSensorForceTorque : public ParamsSensorBase std_tau = _server.getParam<double>(_unique_name + "/std_tau"); } ~ParamsSensorForceTorque() override = default; - std::string print() const + std::string print() const override { - return "\n" + ParamsSensorBase::print() + "\n" + return ParamsSensorBase::print() + "\n" + "mass: " + std::to_string(mass) + "\n" + "std_f: " + std::to_string(std_f) + "\n" + "std_tau: " + std::to_string(std_tau) + "\n"; diff --git a/include/bodydynamics/sensor/sensor_inertial_kinematics.h b/include/bodydynamics/sensor/sensor_inertial_kinematics.h index 6c59b0c625f77f67c81ff311e3d8e2616f9065de..73c1832a3ac5e18dddd00aa4504f7bcaa94d0855 100644 --- a/include/bodydynamics/sensor/sensor_inertial_kinematics.h +++ b/include/bodydynamics/sensor/sensor_inertial_kinematics.h @@ -25,9 +25,9 @@ struct ParamsSensorInertialKinematics : public ParamsSensorBase std_vbc = _server.getParam<double>(_unique_name + "/std_vbc"); } ~ParamsSensorInertialKinematics() override = default; - std::string print() const + std::string print() const override { - return "\n" + ParamsSensorBase::print() + "\n" + return ParamsSensorBase::print() + "\n" + "std_pbc: " + std::to_string(std_pbc) + "\n" + "std_vbc: " + std::to_string(std_vbc) + "\n"; } diff --git a/src/processor/processor_force_torque_preint.cpp b/src/processor/processor_force_torque_preint.cpp index c73189ab1188ce2ff5bc87a23bbcfac9539676a8..17cb798053d93f941e1e33da26516a00ff486c45 100644 --- a/src/processor/processor_force_torque_preint.cpp +++ b/src/processor/processor_force_torque_preint.cpp @@ -121,15 +121,27 @@ Eigen::VectorXd ProcessorForceTorquePreint::correctDelta (const Eigen::VectorXd& VectorXd ProcessorForceTorquePreint::getCalibration (const CaptureBasePtr _capture) const { + VectorXd bias_vec(6); - CaptureForceTorquePreintPtr cap_ft(std::static_pointer_cast<CaptureForceTorquePreint>(_capture)); - // get calib part from Ikin capture - bias_vec.segment<3>(0) = cap_ft->getIkinCaptureOther()->getSensorIntrinsic()->getState(); + if (_capture) // access from capture is quicker + { + CaptureForceTorquePreintPtr cap_ft(std::static_pointer_cast<CaptureForceTorquePreint>(_capture)); - // get calib part from IMU capture - bias_vec.segment<3>(3) = cap_ft->getGyroCaptureOther()->getSensorIntrinsic()->getState().tail<3>(); // TODO: only valib for IMU bias sb or any other of the structure [XXXX, gyro_bias] + // get calib part from Ikin capture + bias_vec.segment<3>(0) = cap_ft->getIkinCaptureOther()->getSensorIntrinsic()->getState(); + // get calib part from IMU capture + bias_vec.segment<3>(3) = cap_ft->getGyroCaptureOther()->getSensorIntrinsic()->getState().tail<3>(); // TODO: only valib for IMU bias sb or any other of the structure [XXXX, gyro_bias] + } + else // access from sensor is slower + { + // get calib part from Ikin capture + bias_vec.segment<3>(0) = sensor_ikin_->getIntrinsic()->getState(); + + // get calib part from IMU capture + bias_vec.segment<3>(3) = sensor_angvel_->getIntrinsic()->getState().tail<3>(); // TODO: only valib for IMU bias sb or any other of the structure [XXXX, gyro_bias] + } return bias_vec; } diff --git a/test/gtest_factor_force_torque.cpp b/test/gtest_factor_force_torque.cpp index d529469ae5a1801ff365149b7c53ce26d3bf13d5..2a8ef4179695edba64fe2447f3179330637dc8de 100644 --- a/test/gtest_factor_force_torque.cpp +++ b/test/gtest_factor_force_torque.cpp @@ -151,7 +151,7 @@ void perturbateAllIfUnFixed(const FrameBasePtr& KF) FrameBasePtr createKFWithCDLI(const ProblemPtr& problem, const TimeStamp& t, VectorComposite x_origin, Vector3d c, Vector3d cd, Vector3d Lc, Vector6d bias_imu) { - FrameBasePtr KF = FrameBase::emplaceKeyFrame<FrameBase>(problem->getTrajectory(), t, "POV", x_origin); + FrameBasePtr KF = FrameBase::emplace<FrameBase>(problem->getTrajectory(), t, "POV", x_origin); StateBlockPtr sbc = make_shared<StateBlock>(c); KF->addStateBlock('C', sbc, problem); StateBlockPtr sbd = make_shared<StateBlock>(cd); KF->addStateBlock('D', sbd, problem); StateBlockPtr sbL = make_shared<StateBlock>(Lc); KF->addStateBlock('L', sbL, problem); diff --git a/test/gtest_processor_force_torque_preint.cpp b/test/gtest_processor_force_torque_preint.cpp index 479538dd4fd23b872237b523a30dc16654d8bed2..287b9525096e5a83f680611acb351b0648874c87 100644 --- a/test/gtest_processor_force_torque_preint.cpp +++ b/test/gtest_processor_force_torque_preint.cpp @@ -129,7 +129,6 @@ public: params_sen_ft->dist_traveled = 20000.0; params_sen_ft->angle_turned = 1000; params_sen_ft->voting_active = true; - params_sen_ft->voting_aux_active = false; ProcessorBasePtr proc_ft_base = problem_->installProcessor("ProcessorForceTorquePreint", "PFTPreint", sen_ft_, params_sen_ft); // ProcessorBasePtr proc_ft_base = problem_->installProcessor("ProcessorForceTorquePreint", "PFTPreint", "SenFT", bodydynamics_root_dir + "/demos/processor_ft_preint"); proc_ftpreint_ = std::static_pointer_cast<ProcessorForceTorquePreint>(proc_ft_base); @@ -205,7 +204,7 @@ public: // - call setOrigin on processors isMotion setOriginState(); MatrixXd P_origin_ = pow(1e-3, 2) * MatrixXd::Identity(18,18); - KF1_ = problem_->emplaceKeyFrame( t0_, x_origin_); + KF1_ = problem_->emplaceFrame( t0_, x_origin_); // Prior pose factor CapturePosePtr pose_prior_capture = CaptureBase::emplace<CapturePose>(KF1_, t0_, nullptr, x_origin_.head(7), P_origin_.topLeftCorner(6, 6)); pose_prior_capture->emplaceFeatureAndFactor();