diff --git a/src/constraint_AHP.h b/src/constraint_AHP.h index 73c84a9570db2bf4a7b2a5fe7e0742801f05006c..e7acfc0a354713bc2f408effb4907f6576a15d58 100644 --- a/src/constraint_AHP.h +++ b/src/constraint_AHP.h @@ -92,14 +92,15 @@ inline Eigen::VectorXs ConstraintAHP::expectation() const FrameBasePtr frm_anchor = getFrameOtherPtr(); LandmarkBasePtr lmk = getLandmarkOtherPtr(); - const Scalar* const frame_current_pos = frm_current->getPPtr()->getPtr(); - const Scalar* const frame_current_ori = frm_current->getOPtr()->getPtr(); - const Scalar* const frame_anchor_pos = frm_anchor ->getPPtr()->getPtr(); - const Scalar* const frame_anchor_ori = frm_anchor ->getOPtr()->getPtr(); - const Scalar* const lmk_pos_hmg = lmk ->getPPtr()->getPtr(); + const Eigen::MatrixXs frame_current_pos = frm_current->getPPtr()->getState(); + const Eigen::MatrixXs frame_current_ori = frm_current->getOPtr()->getState(); + const Eigen::MatrixXs frame_anchor_pos = frm_anchor ->getPPtr()->getState(); + const Eigen::MatrixXs frame_anchor_ori = frm_anchor ->getOPtr()->getState(); + const Eigen::MatrixXs lmk_pos_hmg = lmk ->getPPtr()->getState(); Eigen::Vector2s exp; - expectation(frame_current_pos, frame_current_ori, frame_anchor_pos, frame_anchor_ori, lmk_pos_hmg, exp.data()); + expectation(frame_current_pos.data(), frame_current_ori.data(), frame_anchor_pos.data(), + frame_anchor_ori.data(), lmk_pos_hmg.data(), exp.data()); return exp; } @@ -138,7 +139,7 @@ inline void ConstraintAHP::expectation(const T* const _current_frame_p, // current robot to current camera transform CaptureBasePtr current_capture = this->getFeaturePtr()->getCapturePtr(); Translation<T, 3> t_r1_c1 (current_capture->getSensorPPtr()->getState().cast<T>()); - Quaternions q_r1_c1_s(current_capture->getSensorOPtr()->getPtr()); + Quaternions q_r1_c1_s(Eigen::Vector4s(current_capture->getSensorOPtr()->getState())); Quaternion<T> q_r1_c1 = q_r1_c1_s.cast<T>(); TransformType T_R1_C1 = t_r1_c1 * q_r1_c1; diff --git a/src/constraint_analytic.cpp b/src/constraint_analytic.cpp index c2b0268e3f819162050a7404346a9a70ce388642..8b0422380bc4ad0d39f2e7f38955ea3b0bd948a8 100644 --- a/src/constraint_analytic.cpp +++ b/src/constraint_analytic.cpp @@ -29,20 +29,18 @@ ConstraintAnalytic::ConstraintAnalytic(const std::string& _tp, { resizeVectors(); } - - -std::vector<Scalar*> ConstraintAnalytic::getStateScalarPtrVector() const +/* +ConstraintAnalytic::ConstraintAnalytic(ConstraintType _tp, const LandmarkBasePtr& _landmark_ptr, const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, ConstraintStatus _status, + StateBlockPtr _state0Ptr, StateBlockPtr _state1Ptr, StateBlockPtr _state2Ptr, StateBlockPtr _state3Ptr, StateBlockPtr _state4Ptr, + StateBlockPtr _state5Ptr, StateBlockPtr _state6Ptr, StateBlockPtr _state7Ptr, StateBlockPtr _state8Ptr, StateBlockPtr _state9Ptr ) : + ConstraintBase( _tp, nullptr, nullptr, _landmark_ptr, _processor_ptr, _apply_loss_function, _status), + state_ptr_vector_({_state0Ptr, _state1Ptr, _state2Ptr, _state3Ptr, _state4Ptr, + _state5Ptr, _state6Ptr, _state7Ptr, _state8Ptr, _state9Ptr}) { - assert(state_ptr_vector_.size() > 0 && state_ptr_vector_.size() <= 10 && "Wrong state vector size in constraint, it should be between 1 and 10"); - - std::vector<Scalar*> state_scalar_ptr_vector(state_ptr_vector_.size()); - - for (auto i = 0; i < state_scalar_ptr_vector.size(); i++) - state_scalar_ptr_vector[i] = state_ptr_vector_[i]->getPtr(); - - return state_scalar_ptr_vector; + resizeVectors(); } - +*/ std::vector<StateBlockPtr> ConstraintAnalytic::getStateBlockPtrVector() const { return state_ptr_vector_; diff --git a/src/constraint_analytic.h b/src/constraint_analytic.h index 9384afd71f23b46773dc59d1166830ce6a6d0272..5fb1495bfbb8963c8e1f0252aaac1a75719821d8 100644 --- a/src/constraint_analytic.h +++ b/src/constraint_analytic.h @@ -60,13 +60,6 @@ class ConstraintAnalytic: public ConstraintBase virtual ~ConstraintAnalytic() = default; - /** \brief Returns a vector of pointers to the state blocks - * - * Returns a vector of pointers to the state blocks in which this constraint depends - * - **/ - virtual std::vector<Scalar*> getStateScalarPtrVector() const override; - /** \brief Returns a vector of pointers to the states * * Returns a vector of pointers to the state in which this constraint depends diff --git a/src/constraint_autodiff.h b/src/constraint_autodiff.h index 7e6f227a44da539cb80a2d4a97f1e114372b93c5..09472aa90b31d8b1f000b6db7de1aaa65fcd442f 100644 --- a/src/constraint_autodiff.h +++ b/src/constraint_autodiff.h @@ -270,26 +270,6 @@ class ConstraintAutodiff : public ConstraintBase // std::cout << jacobians_[i] << std::endl << std::endl; } - /** \brief Returns a vector of pointers to the state blocks - * - * Returns a vector of pointers to the state blocks in which this constraint depends - * - **/ - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - state_ptrs_[5]->getPtr(), - state_ptrs_[6]->getPtr(), - state_ptrs_[7]->getPtr(), - state_ptrs_[8]->getPtr(), - state_ptrs_[9]->getPtr() - }); - } - /** \brief Returns a vector of pointers to the states * * Returns a vector of pointers to the state in which this constraint depends @@ -556,20 +536,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,B4,B5,B6,B7,B8,0> : public Constra // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - state_ptrs_[5]->getPtr(), - state_ptrs_[6]->getPtr(), - state_ptrs_[7]->getPtr(), - state_ptrs_[8]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -811,19 +777,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,B4,B5,B6,B7,0,0> : public Constrai // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - state_ptrs_[5]->getPtr(), - state_ptrs_[6]->getPtr(), - state_ptrs_[7]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -1054,18 +1007,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,B4,B5,B6,0,0,0> : public Constrain // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - state_ptrs_[5]->getPtr(), - state_ptrs_[6]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -1281,17 +1222,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,B4,B5,0,0,0,0> : public Constraint jacobians_[i].data() + row * state_block_sizes_.at(i)); } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - state_ptrs_[5]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -1495,16 +1425,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,B4,0,0,0,0,0> : public ConstraintB jacobians_[i].data() + row * state_block_sizes_.at(i)); } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr(), - state_ptrs_[4]->getPtr(), - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -1701,15 +1621,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,B3,0,0,0,0,0,0> : public ConstraintBa // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr(), - state_ptrs_[3]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -1895,14 +1806,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,B2,0,0,0,0,0,0,0> : public ConstraintBas // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr(), - state_ptrs_[2]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -2077,13 +1980,6 @@ class ConstraintAutodiff<CtrT,RES,B0,B1,0,0,0,0,0,0,0,0> : public ConstraintBase // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr(), - state_ptrs_[1]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; @@ -2247,12 +2143,6 @@ class ConstraintAutodiff<CtrT,RES,B0,0,0,0,0,0,0,0,0,0> : public ConstraintBase // std::cout << jacobians_[i] << std::endl << std::endl; } - virtual std::vector<Scalar*> getStateScalarPtrVector() const - { - return std::vector<Scalar*>({state_ptrs_[0]->getPtr() - }); - } - virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const { return state_ptrs_; diff --git a/src/constraint_base.h b/src/constraint_base.h index c5b2a756480a8f2a75ac3c55fcb49971d3a4ae9b..c90ade9153062c8e871ef450452208c50a8dcf72 100644 --- a/src/constraint_base.h +++ b/src/constraint_base.h @@ -91,10 +91,6 @@ class ConstraintBase : public NodeBase, public std::enable_shared_from_this<Cons **/ virtual JacobianMethod getJacobianMethod() const = 0; - /** \brief Returns a vector of scalar pointers to the first element of all state blocks involved in the constraint - **/ - virtual std::vector<Scalar*> getStateScalarPtrVector() const = 0; - /** \brief Returns a vector of pointers to the states in which this constraint depends **/ virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const = 0; diff --git a/src/constraint_epipolar.h b/src/constraint_epipolar.h index 2d7d2a14214be26a6ee19fd858c86a72ea269a6e..262b3bc7858922e57e2e4f14cc453d6ad3c86fde 100644 --- a/src/constraint_epipolar.h +++ b/src/constraint_epipolar.h @@ -32,10 +32,6 @@ class ConstraintEpipolar : public ConstraintBase **/ virtual JacobianMethod getJacobianMethod() const override {return JAC_ANALYTIC;} - /** \brief Returns a vector of scalar pointers to the first element of all state blocks involved in the constraint - **/ - virtual std::vector<Scalar*> getStateScalarPtrVector() const override {return std::vector<Scalar*>(0);} - /** \brief Returns a vector of pointers to the states in which this constraint depends **/ virtual std::vector<StateBlockPtr> getStateBlockPtrVector() const override {return std::vector<StateBlockPtr>(0);} diff --git a/src/landmark_container.cpp b/src/landmark_container.cpp index 0979387a6139c7afb2393d713da2722f04559385..a1ef7ed100e31b72619507bcb4d0663e1d50fe0c 100644 --- a/src/landmark_container.cpp +++ b/src/landmark_container.cpp @@ -30,16 +30,17 @@ LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, M_PI / 4, 3 * M_PI / 4,-3 * M_PI / 4,-M_PI / 4; // Computing center - std::cout << "Container constructor: Computing center pose... " << std::endl; - Eigen::Map<Eigen::Vector2s> container_position(getPPtr()->getPtr()); - Eigen::Map<Eigen::Vector1s> container_orientation(getOPtr()->getPtr()); + WOLF_DEBUG( "Container constructor: Computing center pose... " ); + Eigen::Vector2s container_position(getPPtr()->getState()); + Eigen::Vector1s container_orientation(getOPtr()->getState()); - std::cout << "Container constructor: _corner_1_idx " << _corner_1_idx << "_corner_2_idx " << _corner_2_idx << std::endl; + WOLF_DEBUG( "Container constructor: _corner_1_idx ", _corner_1_idx, + "_corner_2_idx ", _corner_2_idx ); // Large side detected (A & B) if ( (_corner_1_idx == 0 && _corner_2_idx == 1) || (_corner_1_idx == 1 && _corner_2_idx == 0) ) { - std::cout << "Large side detected" << std::endl; + WOLF_DEBUG( "Large side detected" ); Eigen::Vector2s AB = (_corner_1_idx == 0 ? _corner_2_pose.head(2) - _corner_1_pose.head(2) : _corner_1_pose.head(2) - _corner_2_pose.head(2)); Eigen::Vector2s perpendicularAB; perpendicularAB << -AB(1)/AB.norm(), AB(0)/AB.norm(); @@ -50,7 +51,7 @@ LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, // Short side detected (B & C) else if ( (_corner_1_idx == 1 && _corner_2_idx == 2) || (_corner_1_idx == 2 && _corner_2_idx == 1) ) { - std::cout << "Short side detected" << std::endl; + WOLF_DEBUG( "Short side detected" ); Eigen::Vector2s BC = (_corner_1_idx == 1 ? _corner_2_pose.head(2) - _corner_1_pose.head(2) : _corner_1_pose.head(2) - _corner_2_pose.head(2)); Eigen::Vector2s perpendicularBC; perpendicularBC << -BC(1)/BC.norm(), BC(0)/BC.norm(); @@ -62,7 +63,7 @@ LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, // A & C else if ( (_corner_1_idx == 0 && _corner_2_idx == 2) || (_corner_1_idx == 2 && _corner_2_idx == 0) ) { - std::cout << "diagonal AC detected" << std::endl; + WOLF_DEBUG( "diagonal AC detected" ); Eigen::Vector2s AC = (_corner_1_idx == 0 ? _corner_2_pose.head(2) - _corner_1_pose.head(2) : _corner_1_pose.head(2) - _corner_2_pose.head(2)); container_position = (_corner_1_idx == 0 ? _corner_1_pose.head(2) : _corner_2_pose.head(2)) + AC / 2; container_orientation(0) = atan2(AC(1),AC(0)) - atan2(_witdh,_length); @@ -70,7 +71,7 @@ LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, // B & D else if ( (_corner_1_idx == 1 && _corner_2_idx == 3) || (_corner_1_idx == 3 && _corner_2_idx == 1) ) { - std::cout << "diagonal BD detected" << std::endl; + WOLF_DEBUG( "diagonal BD detected" ); Eigen::Vector2s BD = (_corner_1_idx == 1 ? _corner_2_pose.head(2) - _corner_1_pose.head(2) : _corner_1_pose.head(2) - _corner_2_pose.head(2)); container_position = (_corner_1_idx == 1 ? _corner_1_pose.head(2) : _corner_2_pose.head(2)) + BD / 2; container_orientation(0) = atan2(BD(1),BD(0)) + atan2(_witdh,_length); @@ -78,9 +79,12 @@ LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, else assert(0 && "index corners combination not implemented!"); - std::cout << "_corner_1_pose... " << _corner_1_pose.transpose() << std::endl; - std::cout << "_corner_2_pose... " << _corner_2_pose.transpose() << std::endl; - std::cout << "Container center pose... " << container_position.transpose() << " " << container_orientation.transpose() << std::endl; + WOLF_DEBUG( "_corner_1_pose... ", _corner_1_pose.transpose() ); + WOLF_DEBUG( "_corner_2_pose... ", _corner_2_pose.transpose() ); + WOLF_DEBUG( "Container center pose... ", container_position.transpose(), " ", container_orientation.transpose() ); + + getPPtr()->setState(container_position); + getOPtr()->setState(container_orientation); } //LandmarkContainer::LandmarkContainer(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, LandmarkCorner2D* _corner_A_ptr, LandmarkCorner2D* _corner_B_ptr, LandmarkCorner2D* _corner_C_ptr, LandmarkCorner2D* _corner_D_ptr, const Scalar& _witdh, const Scalar& _length) :