diff --git a/src/icp.cpp b/src/icp.cpp index 8c68af7039771ebc5ba70b91f31d015dd5efba6e..74a79d18fab692822197d04ca7faadeba2fb4873 100644 --- a/src/icp.cpp +++ b/src/icp.cpp @@ -17,8 +17,8 @@ public: for(auto it : scan.ranges_raw_){ laser_data->theta[i] = scan_params.angle_min_ + i*scan_params.angle_step_; - if(scan_params.range_min_ <= it and it <= scan_params.range_max_){ - laser_data->readings[i] = it; + if(scan_params.range_min_ <= it and it <= scan_params.range_max_ and 0 <= it and it <= 100){ + laser_data->readings[i] = it;//*100/scan_params.range_max_; laser_data->valid[i] = 1; }else{ laser_data->readings[i] = NAN; @@ -157,26 +157,27 @@ icpOutput ICP::align(const LaserScan &_current_ls, const LaserScan &_ref_ls, con result.valid = csm_output.valid; result.error = csm_output.error; - if (result.valid == 1) { - result.res_transf(0) = csm_output.x[0]; - result.res_transf(1) = csm_output.x[1]; - result.res_transf(2) = csm_output.x[2]; - - for (int i = 0; i < 3; ++i) - for (int j = 0; j < 3; ++j) - result.res_covar(i, j) = - // gsl_matrix_get(csm_output.cov_x_m, i, j); // NOT - // COMPILING - csm_output.cov_x_m - ->data[i * csm_output.cov_x_m->tda + j]; // This does the same - } else { - std::cout << "ICP valid != 1, providing first guess transformation and " - "identity covariance\n"; + if (result.valid == 1) + { + result.res_transf(0) = csm_output.x[0];//*_current_scan_params.range_max_/100; + result.res_transf(1) = csm_output.x[1];//*_current_scan_params.range_max_/100; + result.res_transf(2) = csm_output.x[2];//*_current_scan_params.range_max_/100; + + if (csm_input.do_compute_covariance) + for (int i = 0; i < 3; ++i) + for (int j = 0; j < 3; ++j) + result.res_covar(i, j) = _icp_params.cov_factor * + csm_output.cov_x_m->data[i * csm_output.cov_x_m->tda + j]; //*_current_scan_params.range_max_/100*_current_scan_params.range_max_/100; // This does the same + // gsl_matrix_get(csm_output.cov_x_m, i, j); // NOT COMPILING + } + else + { + std::cout << "ICP NOT VALID, providing first guess transformation and identity covariance\n"; result.res_transf = _transf_ref_current; result.res_covar = Eigen::Matrix3s::Identity(); } - // std::cout << "Number of valid correspondences: " << csm_output.nvalid << + //std::cout << "Number of valid correspondences: " << csm_output.nvalid << // '\n'; std::cout << "Number of iterations: " << csm_output.iterations << // '\n'; std::cout << "Error: " << csm_output.error << '\n'; diff --git a/src/icp.h b/src/icp.h index 3c10a43c89a30bfe83a91f41755ff6f3adeacd50..1f3195588ddbe58cef6cc58461487bc100eeca15 100644 --- a/src/icp.h +++ b/src/icp.h @@ -18,6 +18,8 @@ struct icpOutput{ }; struct icpParams{ + double cov_factor; + int use_point_to_line_distance; double max_correspondence_dist; int max_iterations; @@ -46,21 +48,21 @@ struct icpParams{ double gpm_theta_bin_size_deg; double gpm_extend_range_deg; double gpm_interval; - double laser_x; - double laser_y; - double laser_theta; + //double laser_x; + //double laser_y; + //double laser_theta; double min_reading; double max_reading; int use_ml_weights; int use_sigma_weights; - double hsm_linear_cell_size; - double hsm_angular_cell_size_deg; - double hsm_num_angular_hypotheses; - double hsm_xc_directions_min_distance_deg; - double hsm_xc_ndirections; - double hsm_angular_hyp_min_distance_deg; - double hsm_linear_xc_max_npeaks; - double hsm_linear_xc_peaks_min_distance; + //double hsm_linear_cell_size; + //double hsm_angular_cell_size_deg; + //double hsm_num_angular_hypotheses; + //double hsm_xc_directions_min_distance_deg; + //double hsm_xc_ndirections; + //double hsm_angular_hyp_min_distance_deg; + //double hsm_linear_xc_max_npeaks; + //double hsm_linear_xc_peaks_min_distance; }; class ICP