Skip to content
Snippets Groups Projects
Commit 3c0555d6 authored by Joaquim Casals Buñuel's avatar Joaquim Casals Buñuel
Browse files

Add tolerance to isValid

parent 1f9720d0
No related branches found
No related tags found
1 merge request!390WIP: Resolve "StateBlock::isValid"
Pipeline #5842 passed
...@@ -27,7 +27,7 @@ class LocalParametrizationAngle : public LocalParametrizationBase ...@@ -27,7 +27,7 @@ class LocalParametrizationAngle : public LocalParametrizationBase
bool minus(Eigen::Map<const Eigen::VectorXd>& _x1, bool minus(Eigen::Map<const Eigen::VectorXd>& _x1,
Eigen::Map<const Eigen::VectorXd>& _x2, Eigen::Map<const Eigen::VectorXd>& _x2,
Eigen::Map<Eigen::VectorXd>& _x2_minus_x1) override; Eigen::Map<Eigen::VectorXd>& _x2_minus_x1) override;
bool isValid(const Eigen::VectorXd& state) override; bool isValid(const Eigen::VectorXd& state, double tolerance) override;
}; };
inline LocalParametrizationAngle::LocalParametrizationAngle() : inline LocalParametrizationAngle::LocalParametrizationAngle() :
...@@ -64,7 +64,7 @@ inline bool LocalParametrizationAngle::minus(Eigen::Map<const Eigen::VectorXd>& ...@@ -64,7 +64,7 @@ inline bool LocalParametrizationAngle::minus(Eigen::Map<const Eigen::VectorXd>&
return true; return true;
} }
inline bool LocalParametrizationAngle::isValid(const Eigen::VectorXd& _state) inline bool LocalParametrizationAngle::isValid(const Eigen::VectorXd& _state, double tolerance)
{ {
//Any real is a valid angle because we use the pi2pi function. Also //Any real is a valid angle because we use the pi2pi function. Also
//the types don't match. In this case the argument is //the types don't match. In this case the argument is
......
...@@ -31,7 +31,7 @@ class LocalParametrizationBase{ ...@@ -31,7 +31,7 @@ class LocalParametrizationBase{
virtual bool minus(Eigen::Map<const Eigen::VectorXd>& _x1, virtual bool minus(Eigen::Map<const Eigen::VectorXd>& _x1,
Eigen::Map<const Eigen::VectorXd>& _x2, Eigen::Map<const Eigen::VectorXd>& _x2,
Eigen::Map<Eigen::VectorXd>& _x2_minus_x1) = 0; Eigen::Map<Eigen::VectorXd>& _x2_minus_x1) = 0;
virtual bool isValid(const Eigen::VectorXd& state) = 0; virtual bool isValid(const Eigen::VectorXd& state, double tolerance) = 0;
unsigned int getLocalSize() const; unsigned int getLocalSize() const;
unsigned int getGlobalSize() const; unsigned int getGlobalSize() const;
}; };
......
...@@ -47,7 +47,7 @@ class LocalParametrizationHomogeneous : public LocalParametrizationBase ...@@ -47,7 +47,7 @@ class LocalParametrizationHomogeneous : public LocalParametrizationBase
bool minus(Eigen::Map<const Eigen::VectorXd>& _h1, bool minus(Eigen::Map<const Eigen::VectorXd>& _h1,
Eigen::Map<const Eigen::VectorXd>& _h2, Eigen::Map<const Eigen::VectorXd>& _h2,
Eigen::Map<Eigen::VectorXd>& _h2_minus_h1) override; Eigen::Map<Eigen::VectorXd>& _h2_minus_h1) override;
bool isValid(const Eigen::VectorXd& state) override; bool isValid(const Eigen::VectorXd& state, double tolerance) override;
}; };
} // namespace wolf } // namespace wolf
......
...@@ -75,9 +75,9 @@ public: ...@@ -75,9 +75,9 @@ public:
Eigen::Map<Eigen::VectorXd>& _q2_minus_q1) override; Eigen::Map<Eigen::VectorXd>& _q2_minus_q1) override;
// inline bool isValid(const Eigen::VectorXd& state) override; // inline bool isValid(const Eigen::VectorXd& state) override;
// template<QuaternionDeltaReference DeltaReference> // template<QuaternionDeltaReference DeltaReference>
bool isValid(const Eigen::VectorXd& _state) override bool isValid(const Eigen::VectorXd& _state, double tolerance) override
{ {
return _state.size() == global_size_ && fabs(1.0 - _state.norm()) < Constants::EPS; return _state.size() == global_size_ && fabs(1.0 - _state.norm()) < tolerance;
} }
}; };
......
...@@ -159,7 +159,7 @@ public: ...@@ -159,7 +159,7 @@ public:
void plus(const Eigen::VectorXd& _dv); void plus(const Eigen::VectorXd& _dv);
bool isValid(); bool isValid(double tolerance = Constants::EPS);
static StateBlockPtr create (const Eigen::VectorXd& _state, bool _fixed = false); static StateBlockPtr create (const Eigen::VectorXd& _state, bool _fixed = false);
...@@ -321,9 +321,9 @@ inline StateBlockPtr StateBlock::create (const Eigen::VectorXd& _state, bool _fi ...@@ -321,9 +321,9 @@ inline StateBlockPtr StateBlock::create (const Eigen::VectorXd& _state, bool _fi
{ {
return std::make_shared<StateBlock>(_state, _fixed); return std::make_shared<StateBlock>(_state, _fixed);
} }
inline bool StateBlock::isValid() inline bool StateBlock::isValid(double tolerance)
{ {
return local_param_ptr_ ? local_param_ptr_->isValid(state_) : true; return local_param_ptr_ ? local_param_ptr_->isValid(state_, tolerance) : true;
} }
}// namespace wolf }// namespace wolf
......
...@@ -60,7 +60,7 @@ bool LocalParametrizationHomogeneous::minus(Eigen::Map<const Eigen::VectorXd>& _ ...@@ -60,7 +60,7 @@ bool LocalParametrizationHomogeneous::minus(Eigen::Map<const Eigen::VectorXd>& _
return true; return true;
} }
bool LocalParametrizationHomogeneous::isValid(const Eigen::VectorXd& _state) bool LocalParametrizationHomogeneous::isValid(const Eigen::VectorXd& _state, double tolerance)
{ {
return _state.size() == global_size_; return _state.size() == global_size_;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment