From 60fd7d8b40f7644efbff4a5824352d6b8b41cf0b Mon Sep 17 00:00:00 2001 From: joanvallve <jvallve@iri.upc.edu> Date: Thu, 9 Sep 2021 13:30:44 +0200 Subject: [PATCH] efficiency issues --- include/core/factor/factor_velocity_direction_3d.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/core/factor/factor_velocity_direction_3d.h b/include/core/factor/factor_velocity_direction_3d.h index 0704416d7..63ad133a9 100644 --- a/include/core/factor/factor_velocity_direction_3d.h +++ b/include/core/factor/factor_velocity_direction_3d.h @@ -17,7 +17,7 @@ WOLF_PTR_TYPEDEFS(FactorVelocityDirection3d); class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d,1,3,4> { protected: - double min_vel_norm_; + double min_vel_sq_norm_; // stored in squared norm for efficiency public: FactorVelocityDirection3d(FeatureBasePtr _ftr_ptr, @@ -34,8 +34,9 @@ class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d _status, _ftr_ptr->getFrame()->getV(), _ftr_ptr->getFrame()->getO()), - min_vel_norm_(_min_vel_norm) + min_vel_sq_norm_(_min_vel_norm*_min_vel_norm) { + assert(abs(_ftr_ptr->getMeasurement().norm() - 1.0) < wolf::EPS && "velocity direction measurement must be normalized"); // std::cout << "created FactorVelocityDirection3d " << std::endl; } @@ -51,7 +52,7 @@ inline bool FactorVelocityDirection3d::operator ()(const T* const _v, const T* c Eigen::Map<const Eigen::Matrix<T,3,1> > v(_v); Eigen::Map<const Eigen::Quaternion<T> > q(_q); - if (v.norm() < min_vel_norm_) + if (v.squaredNorm() < min_vel_sq_norm_) { _residuals[0] = T(0); return true; @@ -73,7 +74,7 @@ inline bool FactorVelocityDirection3d::operator ()(const T* const _v, const T* c // << v_local(2) << "\n"; // error (angle between measurement and velocity in local coordinates) - T error = acos( v_local.dot(getMeasurement().cast<T>()) / (v_local.norm() * getMeasurement().cast<T>().norm())); + T error = acos( v_local.dot(getMeasurement().cast<T>()) / (v_local.norm())); // residual _residuals[0] = getMeasurementSquareRootInformationUpper()(0,0) * error; -- GitLab