From f90dbf9355f00ead41e6511419076663408ca44e Mon Sep 17 00:00:00 2001 From: jvallve <jvallve@iri.upc.edu> Date: Fri, 21 Oct 2022 12:25:47 +0200 Subject: [PATCH] ProcessorOdomIcp hotfix --- src/processor/processor_odom_icp.cpp | 40 +++++++++++++++------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/processor/processor_odom_icp.cpp b/src/processor/processor_odom_icp.cpp index b9d82f90e..c9d40a28e 100644 --- a/src/processor/processor_odom_icp.cpp +++ b/src/processor/processor_odom_icp.cpp @@ -140,25 +140,28 @@ unsigned int ProcessorOdomIcp::processKnown() // update extrinsics (if necessary) updateExtrinsicsIsometries(); - auto ro_T_ri = computeIsometry2d(odom_origin_, odom_incoming_); - auto so_T_si = ro_T_so_.inverse() * ro_T_ri * rl_T_sl_; + auto rl_T_ri = computeIsometry2d(odom_last_, odom_incoming_); + auto sl_T_si = rl_T_sl_.inverse() * rl_T_ri * rl_T_sl_; + auto so_T_sl = laser::trf2isometry(trf_origin_last_.res_transf); + auto so_T_si = so_T_sl * sl_T_si; 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(origin_ptr->getScan(), - incoming_ptr->getScan(), + trf_origin_incoming_ = icp_tools_ptr_->align(incoming_ptr->getScan(), + origin_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); + WOLF_DEBUG("ProcessorOdomIcp::processKnown:"); + WOLF_DEBUG("odom_origin: ", odom_origin_.transpose()); + WOLF_DEBUG("odom_incoming: ", odom_incoming_.transpose()); + WOLF_DEBUG("trf_origin_last: ", trf_origin_last_.res_transf.transpose()); + WOLF_DEBUG("initial guess: ", initial_guess.transpose()); + WOLF_DEBUG("ICP transform: ", trf_origin_incoming_.res_transf.transpose(), "\n\tvalid: ", trf_origin_incoming_.valid, "\n\terror: ", trf_origin_incoming_.error); + WOLF_DEBUG("ICP cov: \n", trf_origin_incoming_.res_covar); } return 0; } @@ -175,7 +178,7 @@ unsigned int ProcessorOdomIcp::processNew(const int& _max_features) // update extrinsics (if necessary) updateExtrinsicsIsometries(); - auto rl_T_ri = computeIsometry2d(odom_incoming_, odom_last_); + auto rl_T_ri = computeIsometry2d(odom_last_, odom_incoming_); 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(); @@ -183,16 +186,17 @@ unsigned int ProcessorOdomIcp::processNew(const int& _max_features) 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(last_ptr->getScan(), - incoming_ptr->getScan(), + trf_last_incoming_ = icp_tools_ptr_->align(incoming_ptr->getScan(), + last_ptr->getScan(), this->laser_scan_params_, params_odom_icp_->icp_params, initial_guess); - WOLF_DEBUG("ProcessorOdomIcp::processNew odom_incoming_: ", odom_incoming_.transpose()); - WOLF_DEBUG("ProcessorOdomIcp::processNew odom_last_: ", odom_last_.transpose()); - WOLF_DEBUG("ProcessorOdomIcp::processNew initial guess: ", initial_guess.transpose()); - WOLF_DEBUG("ProcessorOdomIcp::processNew ICP transform: ", trf_origin_incoming_.res_transf.transpose()); - WOLF_DEBUG("ProcessorOdomIcp::processNew ICP cov: \n", trf_origin_incoming_.res_covar); + WOLF_DEBUG("ProcessorOdomIcp::processNew:"); + WOLF_DEBUG("odom_incoming: ", odom_incoming_.transpose()); + WOLF_DEBUG("odom_last: ", odom_last_.transpose()); + WOLF_DEBUG("initial guess: ", initial_guess.transpose()); + WOLF_DEBUG("ICP transform: ", trf_last_incoming_.res_transf.transpose(), "\n\tvalid: ", trf_last_incoming_.valid, "\n\terror: ", trf_last_incoming_.error); + WOLF_DEBUG("ICP cov: \n", trf_last_incoming_.res_covar); //trf_last_incoming_.valid = trf_last_incoming_.valid && trf_last_incoming_.error / trf_last_incoming_.nvalid < 5e-2; -- GitLab