00001 #include <options/options.h>
00002
00003 #include "csm_all.h"
00004
00005
00006 void sm_options(struct sm_params*p, struct option*ops) {
00007
00008 options_double(ops, "max_angular_correction_deg", &(p->max_angular_correction_deg),
00009 90.0, "Maximum angular displacement between scans");
00010
00011 options_double(ops, "max_linear_correction",
00012 &(p->max_linear_correction), 2.0,
00013 "Maximum translation between scans (m)");
00014
00015 options_int(ops, "max_iterations",
00016 &(p->max_iterations), 1000,
00017 "When we had enough");
00018
00019 options_double(ops, "epsilon_xy",
00020 &(p->epsilon_xy), 0.0001,
00021 "A threshold for stopping (m)");
00022
00023 options_double(ops, "epsilon_theta",
00024 &(p->epsilon_theta), 0.0001,
00025 "A threshold for stopping (rad)");
00026
00027 options_double(ops, "max_correspondence_dist",
00028 &(p->max_correspondence_dist), 2.0,
00029 "dubious parameter (m)");
00030
00031 options_double(ops, "sigma",
00032 &(p->sigma), 0.01,
00033 "Noise in the scan (m)");
00034
00035 options_int(ops, "use_corr_tricks",
00036 &(p->use_corr_tricks), 1,
00037 "Use smart tricks for finding correspondences.");
00038
00039 options_int(ops, "restart",
00040 &(p->restart), 1,
00041 "Restart: Restart if error is over threshold");
00042
00043 options_double(ops, "restart_threshold_mean_error",
00044 &(p->restart_threshold_mean_error), 0.01,
00045 "Restart: Threshold for restarting. )");
00046
00047 options_double(ops, "restart_dt",
00048 &(p->restart_dt), 0.01,
00049 "Restart: displacement for restarting. (m)");
00050
00051 options_double(ops, "restart_dtheta",
00052 &(p->restart_dtheta), deg2rad(1.5),
00053 "Restart: displacement for restarting. (rad)");
00054
00055 options_double(ops, "clustering_threshold",
00056 &(p->clustering_threshold), 0.05,
00057 "Max distance for staying in the same clustering");
00058
00059 options_int(ops, "orientation_neighbourhood",
00060 &(p->orientation_neighbourhood), 3,
00061 "Number of neighbour rays used to estimate the orientation.");
00062
00063
00064 options_int(ops, "use_point_to_line_distance",
00065 &(p->use_point_to_line_distance), 1,
00066 "If 0, it's vanilla ICP.");
00067
00068 options_int(ops, "do_alpha_test",
00069 &(p->do_alpha_test), 0,
00070 "Discard correspondences based on the angles");
00071
00072 options_double(ops, "do_alpha_test_thresholdDeg",
00073 &(p->do_alpha_test_thresholdDeg), 20.0, "");
00074
00075 options_double(ops, "outliers_maxPerc",
00076 &(p->outliers_maxPerc), 0.95, "");
00077
00078 options_double(ops, "outliers_adaptive_order",
00079 &(p->outliers_adaptive_order), 0.7, "");
00080 options_double(ops, "outliers_adaptive_mult",
00081 &(p->outliers_adaptive_mult), 2.0, "");
00082
00083 options_int(ops, "do_visibility_test",
00084 &(p->do_visibility_test), 0,
00085 " ... ");
00086
00087 options_int(ops, "outliers_remove_doubles",
00088 &(p->outliers_remove_doubles), 1, "no two points in laser_sens can have the same corr.");
00089
00090 options_int(ops, "do_compute_covariance",
00091 &(p->do_compute_covariance), 0,
00092 "If 1, computes the covariance of ICP using the method http://purl.org/censi/2006/icpcov .");
00093
00094 options_int(ops, "debug_verify_tricks",
00095 &(p->debug_verify_tricks), 0,
00096 "Checks that find_correspondences_tricks gives the right answer.");
00097
00098 options_double(ops, "gpm_theta_bin_size_deg", &(p->gpm_theta_bin_size_deg), 5.0,
00099 "GPM: Dimension of bins for finding first theta.");
00100 options_double(ops, "gpm_extend_range_deg", &(p->gpm_extend_range_deg), 15.0,
00101 "GPM: Area around maximum.");
00102 options_int(ops, "gpm_interval", &(p->gpm_interval), 1, "Interval of points to consider (1: all points, 2: every other point, etc.)");
00103
00104 options_double(ops, "laser_x", &(p->laser[0]), 0.0, "laser.x (m)");
00105 options_double(ops, "laser_y", &(p->laser[1]), 0.0, "laser.y (m)");
00106 options_double(ops, "laser_theta", &(p->laser[2]), 0.0, "laser.theta (rad)");
00107
00108 options_double(ops, "min_reading", &(p->min_reading), 0.0, "Don't use readings less than min_reading (m)");
00109 options_double(ops, "max_reading", &(p->max_reading), 1000.0, "Don't use readings longer than max_reading (m)");
00110
00111 options_int(ops, "use_ml_weights", &(p->use_ml_weights), 0,
00112 "If 1, the field 'true_alpha' (or 'alpha') in the first scan is used to compute the incidence beta, and the factor (1/cos^2(beta)) used to weight the correspondence.");
00113
00114 options_int(ops, "use_sigma_weights", &(p->use_sigma_weights), 0,
00115 "If 1, the field 'readings_sigma' in the second scan is used to weight the correspondence by 1/sigma^2");
00116
00117
00118 hsm_add_options(ops, &p->hsm);
00119 }