From a900bf0ea38363074d6524cfbf6c8a7805e89ec2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu>
Date: Tue, 3 May 2022 15:35:53 +0200
Subject: [PATCH] Resolve "Adapt to const nonconst new API"

---
 demos/mcapi_pov_estimation.cpp                |  9 ++++---
 demos/mcapi_povcdl_estimation.cpp             |  3 ++-
 demos/solo_mocap_imu.cpp                      | 12 +++++----
 demos/solo_real_pov_estimation.cpp            | 11 ++++----
 demos/solo_real_povcdl_estimation.cpp         | 13 +++++-----
 .../capture/capture_force_torque_preint.h     |  4 ++-
 .../bodydynamics/factor/factor_force_torque.h | 25 +++++++++----------
 .../factor/factor_inertial_kinematics.h       |  2 +-
 .../feature/feature_force_torque.h            | 20 +++++++--------
 .../feature/feature_inertial_kinematics.h     |  4 +--
 .../processor/processor_force_torque_preint.h |  2 +-
 .../processor_force_torque_preint.cpp         |  6 ++---
 .../processor_inertial_kinematics.cpp         |  1 -
 13 files changed, 59 insertions(+), 53 deletions(-)

diff --git a/demos/mcapi_pov_estimation.cpp b/demos/mcapi_pov_estimation.cpp
index 9fdc2fe..b465845 100644
--- a/demos/mcapi_pov_estimation.cpp
+++ b/demos/mcapi_pov_estimation.cpp
@@ -475,7 +475,7 @@ int main (int argc, char **argv) {
     std::vector<Vector3d> v_ob_fbk_v; 
     //////////////////////////////////////////
 
-    unsigned int nb_kf = problem->getTrajectory()->getFrameMap().size();
+    unsigned int nb_kf = problem->getTrajectory()->size();
     for (unsigned int i=0; i < t_arr.size(); i++){
         // TimeStamp ts(t_arr[i]+dt); // works best with tsid trajectories
         TimeStamp ts(t_arr[i]);  // works best with pyb trajectories
@@ -543,9 +543,9 @@ int main (int argc, char **argv) {
         }
 
         // if new KF add 
-        // unsigned int new_kf_nb = problem->getTrajectory()->getFrameMap().size();
+        // unsigned int new_kf_nb = problem->getTrajectory()->size();
         // if (new_kf_nb > nb_kf){
-        //     auto last_kf = problem->getTrajectory()->getFrameMap().rbegin()->second;
+        //     auto last_kf = problem->getTrajectory()->getLastFrame();
         //     nb_kf = new_kf_nb;
         //     // ADD ABSOLUTE FACTOR (GPS LIKE)
         // }
@@ -664,7 +664,8 @@ int main (int argc, char **argv) {
     VectorComposite kf_state;
     CaptureBasePtr cap_imu;
     VectorComposite bi_bias_est;
-    for (auto& elt: problem->getTrajectory()->getFrameMap()){
+    auto frame_map = problem->getTrajectory()->getFrameMap();
+    for (auto& elt : frame_map){
         auto kf = elt.second;
         kf_state = kf->getState();
         cap_imu = kf->getCaptureOf(sen_imu); 
diff --git a/demos/mcapi_povcdl_estimation.cpp b/demos/mcapi_povcdl_estimation.cpp
index 82bf7d6..83111ab 100644
--- a/demos/mcapi_povcdl_estimation.cpp
+++ b/demos/mcapi_povcdl_estimation.cpp
@@ -862,7 +862,8 @@ int main (int argc, char **argv) {
     VectorComposite bp_bias_est;
     CaptureBasePtr cap_imu;
     VectorComposite bi_bias_est;
-    for (auto& elt: problem->getTrajectory()->getFrameMap()){
+    for (auto elt : problem->getTrajectory()->getFrameMap())
+    {
         auto kf = elt.second;
         kf_state = kf->getState();
         cap_ikin = kf->getCaptureOf(sen_ikin); 
diff --git a/demos/solo_mocap_imu.cpp b/demos/solo_mocap_imu.cpp
index 19f8dfa..c196dac 100644
--- a/demos/solo_mocap_imu.cpp
+++ b/demos/solo_mocap_imu.cpp
@@ -308,13 +308,14 @@ int main (int argc, char **argv) {
         CP->process();
 
         // solve every new KF
-        if (problem->getTrajectory()->getFrameMap().size() > nb_kf ){
+        if (problem->getTrajectory()->size() > nb_kf )
+        {
             std::string report = solver->solve(SolverManager::ReportVerbosity::BRIEF);
             std::cout << ts << "  ";
             std::cout << report << std::endl;
 
             // recover covariances at this point
-            auto kf_last = problem->getTrajectory()->getFrameMap().rbegin()->second;
+            auto kf_last = problem->getTrajectory()->getLastFrame();
             
             CaptureBasePtr cap_imu = kf_last->getCaptureOf(sen_imu); 
 
@@ -408,7 +409,7 @@ int main (int argc, char **argv) {
 
 
     // Compute Covariances
-    unsigned int Nkf = problem->getTrajectory()->getFrameMap().size();
+    unsigned int Nkf = problem->getTrajectory()->size();
     double* tkf_carr  = new double[1*Nkf];
     double* Qp_carr  = new double[3*Nkf];
     double* Qo_carr  = new double[3*Nkf];
@@ -422,8 +423,9 @@ int main (int argc, char **argv) {
     double* fac_imu_err_carr = new double[9*Nkf];
     double* fac_pose_err_carr  = new double[6*Nkf];
     int i = 0;
-    for (auto& elt: problem->getTrajectory()->getFrameMap()){
-        std::cout << "Traj " << i << "/" << problem->getTrajectory()->getFrameMap().size() << std::endl;
+    for (auto elt: problem->getTrajectory()->getFrameMap())
+    {
+        std::cout << "Traj " << i << "/" << problem->getTrajectory()->size() << std::endl;
         tkf_carr[i] = elt.first.get();
         auto kf = elt.second;
         VectorComposite kf_state = kf->getState();
diff --git a/demos/solo_real_pov_estimation.cpp b/demos/solo_real_pov_estimation.cpp
index fbae4d5..411597d 100644
--- a/demos/solo_real_pov_estimation.cpp
+++ b/demos/solo_real_pov_estimation.cpp
@@ -495,11 +495,11 @@ int main (int argc, char **argv) {
         // }
 
         // solve every new KF
-        if (problem->getTrajectory()->getFrameMap().size() > nb_kf ){
+        if (problem->getTrajectory()->size() > nb_kf ){
             std::string report = solver->solve(SolverManager::ReportVerbosity::BRIEF);
             std::cout << ts << "  ";
             std::cout << report << std::endl;
-            nb_kf = problem->getTrajectory()->getFrameMap().size();
+            nb_kf = problem->getTrajectory()->size();
         }
 
         // Store current state estimation
@@ -575,7 +575,7 @@ int main (int argc, char **argv) {
 
 
     // Compute Covariances
-    unsigned int Nkf = problem->getTrajectory()->getFrameMap().size();
+    unsigned int Nkf = problem->getTrajectory()->size();
     double* tkf_carr  = new double[1*Nkf];
     double* Qp_carr  = new double[3*Nkf];
     double* Qo_carr  = new double[3*Nkf];
@@ -586,8 +586,9 @@ int main (int argc, char **argv) {
     double* fac_imu_err_carr = new double[9*Nkf];
     double* fac_pose_err_carr  = new double[6*Nkf];
     int i = 0;
-    for (auto& elt: problem->getTrajectory()->getFrameMap()){
-        std::cout << "Traj " << i << "/" << problem->getTrajectory()->getFrameMap().size() << std::endl;
+    for (auto elt: problem->getTrajectory()->getFrameMap())
+    {
+        std::cout << "Traj " << i << "/" << problem->getTrajectory()->size() << std::endl;
         tkf_carr[i] = elt.first.get();
         auto kf = elt.second;
         VectorComposite kf_state = kf->getState();
diff --git a/demos/solo_real_povcdl_estimation.cpp b/demos/solo_real_povcdl_estimation.cpp
index 0e4e6a4..aee0620 100644
--- a/demos/solo_real_povcdl_estimation.cpp
+++ b/demos/solo_real_povcdl_estimation.cpp
@@ -584,12 +584,12 @@ int main (int argc, char **argv) {
 
 
         // add zero vel artificial factor
-        if (problem->getTrajectory()->getFrameMap().size() > nb_kf){
-            auto kf_pair = problem->getTrajectory()->getFrameMap().rbegin();
-            std::cout << "New KF " << kf_pair->first << std::endl;
-            auto kf = kf_pair->second;
+        if (problem->getTrajectory()->size() > nb_kf)
+        {
+            auto kf = problem->getTrajectory()->getLastFrame();
+            std::cout << "New KF " << kf->getTimeStamp() << std::endl;
 
-            // CaptureBasePtr capV0 = CaptureBase::emplace<CaptureBase>(kf, "Vel0", kf_pair->first);
+            // CaptureBasePtr capV0 = CaptureBase::emplace<CaptureBase>(kf, "Vel0", kf->getTimeStamp());
             // FeatureBasePtr featV0 = FeatureBase::emplace<FeatureBase>(capV0, "Vel0", Vector3d::Zero(), 0.00001*Matrix3d::Ones());
             // FactorBasePtr facV0 = FactorBase::emplace<FactorBlockAbsolute>(featV0, featV0, kf->getV(), nullptr, false);
 
@@ -728,7 +728,8 @@ int main (int argc, char **argv) {
     VectorComposite bp_bias_est;
     CaptureBasePtr cap_imu;
     VectorComposite bi_bias_est;
-    for (auto& elt: problem->getTrajectory()->getFrameMap()){
+    for (auto elt: problem->getTrajectory()->getFrameMap())
+    {
         auto kf = elt.second;
         kf_state = kf->getState();
         cap_ikin = kf->getCaptureOf(sen_ikin); 
diff --git a/include/bodydynamics/capture/capture_force_torque_preint.h b/include/bodydynamics/capture/capture_force_torque_preint.h
index 12f4eb5..81db7bf 100644
--- a/include/bodydynamics/capture/capture_force_torque_preint.h
+++ b/include/bodydynamics/capture/capture_force_torque_preint.h
@@ -62,7 +62,9 @@ class CaptureForceTorquePreint : public CaptureMotion
     
         ~CaptureForceTorquePreint() override;
 
-        CaptureBasePtr getIkinCaptureOther(){ return cap_ikin_other_; }
+        CaptureBaseConstPtr getIkinCaptureOther() const { return cap_ikin_other_;}
+        CaptureBasePtr getIkinCaptureOther(){ return cap_ikin_other_;}
+        CaptureBaseConstPtr getGyroCaptureOther() const { return cap_gyro_other_;}
         CaptureBasePtr getGyroCaptureOther(){ return cap_gyro_other_;}
 
     private:
diff --git a/include/bodydynamics/factor/factor_force_torque.h b/include/bodydynamics/factor/factor_force_torque.h
index 85d74de..958398a 100644
--- a/include/bodydynamics/factor/factor_force_torque.h
+++ b/include/bodydynamics/factor/factor_force_torque.h
@@ -79,7 +79,7 @@ class FactorForceTorque : public FactorAutodiff<FactorForceTorque, 9, 3,3,3, 3,3
             const T* const _qkm,
             T* _res) const;
 
-        void computeJac(const FeatureForceTorquePtr& _feat, 
+        void computeJac(const FeatureForceTorqueConstPtr& _feat, 
                         const double& _mass, 
                         const double& _dt, 
                         const Eigen::VectorXd& _bp, 
@@ -149,25 +149,24 @@ void FactorForceTorque::retrieveMeasurementCovariance(const FeatureForceTorquePt
 }
 
 
-void FactorForceTorque::computeJac(const FeatureForceTorquePtr& _feat, 
+void FactorForceTorque::computeJac(const FeatureForceTorqueConstPtr& _feat, 
                                    const double& _mass, 
                                    const double& _dt,  
                                    const Eigen::VectorXd& _bp, 
                                    Eigen::Matrix<double, 9, 15>& _J_ny_nz) const
 {
     _J_ny_nz.setZero();
-    FeatureForceTorquePtr feat = std::static_pointer_cast<FeatureForceTorque>(_feat);
 
     // Measurements retrieval
-    Eigen::Map<const Eigen::Vector3d>    f1  (feat->getForcesMeas().data());
-    Eigen::Map<const Eigen::Vector3d>    f2  (feat->getForcesMeas().data()    + 3  );
-    Eigen::Map<const Eigen::Vector3d>    tau1(feat->getTorquesMeas().data());
-    Eigen::Map<const Eigen::Vector3d>    tau2(feat->getTorquesMeas().data()   + 3 );
-    Eigen::Map<const Eigen::Vector3d>    pbl1(feat->getKinMeas().data());
-    Eigen::Map<const Eigen::Vector3d>    pbl2(feat->getKinMeas().data()       + 3 );
-    Eigen::Map<const Eigen::Quaterniond> bql1(feat->getKinMeas().data()       + 6);
-    Eigen::Map<const Eigen::Quaterniond> bql2(feat->getKinMeas().data()   + 10);
-    Eigen::Map<const Eigen::Vector3d>    pbc (feat->getPbcMeas().data());
+    Eigen::Map<const Eigen::Vector3d>    f1  (_feat->getForcesMeas().data());
+    Eigen::Map<const Eigen::Vector3d>    f2  (_feat->getForcesMeas().data()    + 3  );
+    Eigen::Map<const Eigen::Vector3d>    tau1(_feat->getTorquesMeas().data());
+    Eigen::Map<const Eigen::Vector3d>    tau2(_feat->getTorquesMeas().data()   + 3 );
+    Eigen::Map<const Eigen::Vector3d>    pbl1(_feat->getKinMeas().data());
+    Eigen::Map<const Eigen::Vector3d>    pbl2(_feat->getKinMeas().data()       + 3 );
+    Eigen::Map<const Eigen::Quaterniond> bql1(_feat->getKinMeas().data()       + 6);
+    Eigen::Map<const Eigen::Quaterniond> bql2(_feat->getKinMeas().data()   + 10);
+    Eigen::Map<const Eigen::Vector3d>    pbc (_feat->getPbcMeas().data());
 
     Eigen::Matrix3d bRl1 = q2R(bql1);
     Eigen::Matrix3d bRl2 = q2R(bql2);
@@ -226,7 +225,7 @@ bool FactorForceTorque::operator () (
             const T* const _qkm,
             T* _res) const   
 {
-    FeatureForceTorquePtr feat = std::static_pointer_cast<FeatureForceTorque>(getFeature());
+    auto feat = std::static_pointer_cast<const FeatureForceTorque>(getFeature());
 
     // State variables instanciation
     Eigen::Map<const Eigen::Matrix<T,3,1> > ck(_ck);
diff --git a/include/bodydynamics/factor/factor_inertial_kinematics.h b/include/bodydynamics/factor/factor_inertial_kinematics.h
index c0b36d2..ff824e2 100644
--- a/include/bodydynamics/factor/factor_inertial_kinematics.h
+++ b/include/bodydynamics/factor/factor_inertial_kinematics.h
@@ -158,7 +158,7 @@ bool FactorInertialKinematics::operator () (
 
     Map<Matrix<T,9,1> > res(_res);
 
-    FeatureInertialKinematicsPtr feat = std::static_pointer_cast<FeatureInertialKinematics>(getFeature());
+    auto feat = std::static_pointer_cast<const FeatureInertialKinematics>(getFeature());
 
     // Measurements retrieval
     Map<const Vector3d> pBC_m(getMeasurement().data()    );      // B_p_BC
diff --git a/include/bodydynamics/feature/feature_force_torque.h b/include/bodydynamics/feature/feature_force_torque.h
index bbe2fda..1459482 100644
--- a/include/bodydynamics/feature/feature_force_torque.h
+++ b/include/bodydynamics/feature/feature_force_torque.h
@@ -50,19 +50,19 @@ class FeatureForceTorque : public FeatureBase
 
         ~FeatureForceTorque() override;
 
-        const double & getDt(){return dt_;}
-        const double & getMass(){return mass_;}
+        const double & getDt() const {return dt_;}
+        const double & getMass() const {return mass_;}
         void setDt(const double & _dt){dt_ = _dt;}
         void setMass(const double & _mass){mass_ = _mass;}
 
-        const Eigen::Vector6d& getForcesMeas(){return forces_meas_;}
-        const Eigen::Vector6d& getTorquesMeas(){return torques_meas_;}
-        const Eigen::Vector3d& getPbcMeas(){return pbc_meas_;}
-        const Eigen::Matrix<double,14,1>& getKinMeas(){return kin_meas_;}
-        const Eigen::Matrix6d& getCovForcesMeas(){return cov_forces_meas_;}
-        const Eigen::Matrix6d& getCovTorquesMeas(){return cov_torques_meas_;}
-        const Eigen::Matrix3d& getCovPbcMeas(){return cov_pbc_meas_;}
-        const Eigen::Matrix<double,14,14>& getCovKinMeas(){return cov_kin_meas_;}
+        const Eigen::Vector6d& getForcesMeas() const {return forces_meas_;}
+        const Eigen::Vector6d& getTorquesMeas() const {return torques_meas_;}
+        const Eigen::Vector3d& getPbcMeas() const {return pbc_meas_;}
+        const Eigen::Matrix<double,14,1>& getKinMeas() const {return kin_meas_;}
+        const Eigen::Matrix6d& getCovForcesMeas() const {return cov_forces_meas_;}
+        const Eigen::Matrix6d& getCovTorquesMeas() const {return cov_torques_meas_;}
+        const Eigen::Matrix3d& getCovPbcMeas() const {return cov_pbc_meas_;}
+        const Eigen::Matrix<double,14,14>& getCovKinMeas() const {return cov_kin_meas_;}
 
         void setForcesMeas(const Eigen::Vector6d& _forces_meas){forces_meas_ = _forces_meas;}
         void setTorquesMeas(const Eigen::Vector6d& _torques_meas){torques_meas_ = _torques_meas;}
diff --git a/include/bodydynamics/feature/feature_inertial_kinematics.h b/include/bodydynamics/feature/feature_inertial_kinematics.h
index bb9588f..98f03fc 100644
--- a/include/bodydynamics/feature/feature_inertial_kinematics.h
+++ b/include/bodydynamics/feature/feature_inertial_kinematics.h
@@ -43,8 +43,8 @@ class FeatureInertialKinematics : public FeatureBase
         ~FeatureInertialKinematics() override = default;
 
 
-        const Eigen::Matrix3d & getBIq(){return BIq_;}
-        const Eigen::Vector3d & getBLcm(){return BLcm_;}
+        const Eigen::Matrix3d & getBIq() const {return BIq_;}
+        const Eigen::Vector3d & getBLcm() const {return BLcm_;}
         void setBIq(const Eigen::Matrix3d & _BIq){BIq_ = _BIq;}
         void setBLcm(const Eigen::Vector3d & _BLcm){BLcm_ = _BLcm;}
 
diff --git a/include/bodydynamics/processor/processor_force_torque_preint.h b/include/bodydynamics/processor/processor_force_torque_preint.h
index c834f71..6cd0891 100644
--- a/include/bodydynamics/processor/processor_force_torque_preint.h
+++ b/include/bodydynamics/processor/processor_force_torque_preint.h
@@ -92,7 +92,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 = nullptr) const override;
+        VectorXd getCalibration (const CaptureBaseConstPtr _capture = nullptr) const override;
         void setCalibration(const CaptureBasePtr _capture, const VectorXd& _calibration) override;
 
         bool voteForKeyFrame() const override;
diff --git a/src/processor/processor_force_torque_preint.cpp b/src/processor/processor_force_torque_preint.cpp
index 994b91a..1b84f78 100644
--- a/src/processor/processor_force_torque_preint.cpp
+++ b/src/processor/processor_force_torque_preint.cpp
@@ -136,14 +136,14 @@ Eigen::VectorXd ProcessorForceTorquePreint::correctDelta (const Eigen::VectorXd&
     return bodydynamics::plus(delta_preint, delta_step);
 }
 
-VectorXd ProcessorForceTorquePreint::getCalibration (const CaptureBasePtr _capture) const
+VectorXd ProcessorForceTorquePreint::getCalibration (const CaptureBaseConstPtr _capture) const
 {
 
     VectorXd bias_vec(6);
 
     if (_capture) // access from capture is quicker
     {
-        CaptureForceTorquePreintPtr cap_ft(std::static_pointer_cast<CaptureForceTorquePreint>(_capture));
+        auto cap_ft(std::static_pointer_cast<const CaptureForceTorquePreint>(_capture));
 
         // get calib part from Ikin capture
         bias_vec.segment<3>(0) = cap_ft->getIkinCaptureOther()->getSensorIntrinsic()->getState();
@@ -211,7 +211,7 @@ void ProcessorForceTorquePreint::computeCurrentDelta(
     bodydynamics::debiasData(_data, _calib, nbc_, dimc_, body, jac_body_bias);
 
     MatrixXd jac_delta_body(12,data_size_-nbc_);
-    bodydynamics::body2delta(body, _dt, std::static_pointer_cast<SensorForceTorque>(getSensor())->getMass(), 
+    bodydynamics::body2delta(body, _dt, std::static_pointer_cast<const SensorForceTorque>(getSensor())->getMass(), 
                              nbc_, dimc_,
                              _delta, jac_delta_body); // Jacobians tested in bodydynamics_tools
 
diff --git a/src/processor/processor_inertial_kinematics.cpp b/src/processor/processor_inertial_kinematics.cpp
index 46eb8f9..360ef7d 100644
--- a/src/processor/processor_inertial_kinematics.cpp
+++ b/src/processor/processor_inertial_kinematics.cpp
@@ -68,7 +68,6 @@ inline void ProcessorInertialKinematics::processCapture(CaptureBasePtr _capture)
     // done AFTER processCapture)
 
     // 1. get corresponding KF
-    FrameBasePtr kf;
     auto buffer_frame_it = buffer_frame_.getContainer().begin();
     auto buffer_capture_it = buffer_capture_.getContainer().begin();
 
-- 
GitLab