diff --git a/src/icp.cpp b/src/icp.cpp index 52b5a459be059f2df0ecd7fe661411d98b6a0f2e..b22a1aebdbf30861610a92b7690cec4905c8c711 100644 --- a/src/icp.cpp +++ b/src/icp.cpp @@ -53,7 +53,7 @@ ICP::~ICP() } -icp_output ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanParams& params, Eigen::Vector3s &_last_transf) +icpOutput ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanParams& params, icpParams &icp_params, Eigen::Vector3s &_last_transf) { // Uncomment to enable debug messages from the CSM library // sm_debug_write(true); @@ -76,19 +76,17 @@ icp_output ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanPar csm_input.first_guess[1] = _last_transf(1); csm_input.first_guess[2] = _last_transf(2); - csm_input.use_point_to_line_distance = 1; - - csm_input.max_correspondence_dist = 1; - csm_input.max_iterations = 20; - - csm_input.use_corr_tricks = 1; - csm_input.outliers_maxPerc = 0.9; - csm_input.outliers_adaptive_order = 0.7; - csm_input.outliers_adaptive_mult = 1.5; + csm_input.use_point_to_line_distance = icp_params.use_point_to_line_distance; + csm_input.max_correspondence_dist = icp_params.max_correspondence_dist; + csm_input.max_iterations = icp_params.max_iterations; + csm_input.use_corr_tricks = icp_params.use_corr_tricks; + csm_input.outliers_maxPerc = icp_params.outliers_maxPerc; + csm_input.outliers_adaptive_order = icp_params.outliers_adaptive_order; + csm_input.outliers_adaptive_mult = icp_params.outliers_adaptive_mult; sm_icp(&csm_input, &csm_output); - icp_output result{}; + icpOutput result{}; result.res_transf(0) = csm_output.x[0]; result.res_transf(1) = csm_output.x[1]; result.res_transf(2) = csm_output.x[2]; diff --git a/src/icp.h b/src/icp.h index f0c5a97aa840d9e4260690253a24f9085c2f6480..939565deae86071dac3997b64f9b89f891d883f4 100644 --- a/src/icp.h +++ b/src/icp.h @@ -8,19 +8,27 @@ namespace laserscanutils{ -struct icp_output{ +struct icpOutput{ Eigen::Vector3s res_transf; int num_points; int error_points; }; - +struct icpParams{ + int use_point_to_line_distance; + int max_correspondence_dist; + int max_iterations; + int use_corr_tricks; + double outliers_maxPerc; + double outliers_adaptive_order; + double outliers_adaptive_mult; +}; class ICP { public: ICP(); ~ICP(); - static icp_output matchPC(LaserScan &_last_ls, LaserScan &_reference_ls, LaserScanParams& params, Eigen::Vector3s &_last_transf); + static icpOutput matchPC(LaserScan &_last_ls, LaserScan &_reference_ls, LaserScanParams& params, icpParams &icp_params, Eigen::Vector3s &_last_transf); static void printTwoLaserData(sm_params ¶ms); static void printLaserData(LDP &laser_data);