From a677a084ef3f3c1c39dac4e556b4616a8922c805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu> Date: Thu, 20 Oct 2022 17:13:08 +0200 Subject: [PATCH] bug fixed in odom_icp --- src/processor/processor_odom_icp.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/processor/processor_odom_icp.cpp b/src/processor/processor_odom_icp.cpp index 723a198fa..b9d82f90e 100644 --- a/src/processor/processor_odom_icp.cpp +++ b/src/processor/processor_odom_icp.cpp @@ -19,6 +19,7 @@ // along with this program. If not, see <http://www.gnu.org/licenses/>. // //--------LICENSE_END-------- +#include "laser/internal/config.h" #include "laser/processor/processor_odom_icp.h" #include "laser/math/laser_tools.h" #include "laser/capture/capture_laser_2d.h" @@ -139,21 +140,22 @@ unsigned int ProcessorOdomIcp::processKnown() // update extrinsics (if necessary) updateExtrinsicsIsometries(); - auto ri_T_ro = computeIsometry2d(odom_incoming_, odom_origin_); - auto si_T_so = rl_T_sl_.inverse() * ri_T_ro * ro_T_so_; - initial_guess.head<2>() = si_T_so.translation(); - initial_guess(2) = Rotation2Dd(si_T_so.rotation()).angle(); + auto ro_T_ri = computeIsometry2d(odom_origin_, odom_incoming_); + auto so_T_si = ro_T_so_.inverse() * ro_T_ri * rl_T_sl_; + initial_guess.head<2>() = so_T_si.translation(); + initial_guess(2) = Rotation2Dd(so_T_si.rotation()).angle(); } else if (params_odom_icp_->initial_guess != "zero") throw std::runtime_error("unknown value for param 'initial_guess'. Should be 'odom', 'state' or 'zero'"); - trf_origin_incoming_ = icp_tools_ptr_->align(incoming_ptr->getScan(), - origin_ptr->getScan(), + trf_origin_incoming_ = icp_tools_ptr_->align(origin_ptr->getScan(), + incoming_ptr->getScan(), this->laser_scan_params_, params_odom_icp_->icp_params, initial_guess); WOLF_DEBUG("ProcessorOdomIcp::processKnown odom_origin_: ", odom_origin_.transpose()); WOLF_DEBUG("ProcessorOdomIcp::processKnown odom_incoming_: ", odom_incoming_.transpose()); + WOLF_DEBUG("ProcessorOdomIcp::processKnown trf_origin_last_.res_transf: ", trf_origin_last_.res_transf.transpose()); WOLF_DEBUG("ProcessorOdomIcp::processKnown initial guess: ", initial_guess.transpose()); WOLF_DEBUG("ProcessorOdomIcp::processKnown ICP transform: ", trf_origin_incoming_.res_transf.transpose()); WOLF_DEBUG("ProcessorOdomIcp::processKnown ICP cov: \n", trf_origin_incoming_.res_covar); @@ -173,16 +175,16 @@ unsigned int ProcessorOdomIcp::processNew(const int& _max_features) // update extrinsics (if necessary) updateExtrinsicsIsometries(); - auto ri_T_rl = computeIsometry2d(odom_incoming_, odom_last_); - auto si_T_sl = rl_T_sl_.inverse() * ri_T_rl * rl_T_sl_; - initial_guess.head<2>() = si_T_sl.translation(); - initial_guess(2) = Rotation2Dd(si_T_sl.rotation()).angle(); + auto rl_T_ri = computeIsometry2d(odom_incoming_, odom_last_); + auto sl_T_si = rl_T_sl_.inverse() * rl_T_ri * rl_T_sl_; + initial_guess.head<2>() = sl_T_si.translation(); + initial_guess(2) = Rotation2Dd(sl_T_si.rotation()).angle(); } else if (params_odom_icp_->initial_guess != "zero") throw std::runtime_error("unknown value for param 'initial_guess'. Should be 'odom', 'state' or 'zero'"); - trf_last_incoming_ = icp_tools_ptr_->align(incoming_ptr->getScan(), - last_ptr->getScan(), + trf_last_incoming_ = icp_tools_ptr_->align(last_ptr->getScan(), + incoming_ptr->getScan(), this->laser_scan_params_, params_odom_icp_->icp_params, initial_guess); -- GitLab