00001
00002
00003
00011 #ifndef VASCOCORE_UTILS_H
00012 #define VASCOCORE_UTILS_H
00013
00014 #ifndef _SYS_TIME_H
00015 #include <sys/time.h>
00016 #endif
00017
00018 #ifndef TRUE
00019 #define TRUE 1
00020 #endif
00021
00022 #ifndef FALSE
00023 #define FALSE 0
00024 #endif
00025 #ifndef MIN
00026 #define MIN(x,y) (x < y ? x : y)
00027 #endif
00028
00029 #ifndef MIN3
00030 #define MIN3(x,y,z) MIN(MIN(x,y),z)
00031 #endif
00032
00033 #ifndef MAX
00034 #define MAX(x,y) (x > y ? x : y)
00035 #endif
00036
00037 #ifndef MAX3
00038 #define MAX3(x,y,z) MAX(MAX(x,y),z)
00039 #endif
00040
00041 typedef struct {
00042
00043 double x;
00044 double y;
00045
00046 } carmen_vec2_t;
00047
00048 typedef struct {
00049
00050 int x;
00051 int y;
00052 }
00053 carmen_ivec2_t;
00054
00055 typedef struct {
00056
00057 short x;
00058 short y;
00059
00060 } carmen_svec2_t;
00061
00062 typedef struct {
00063
00064 double forward;
00065 double sideward;
00066 double rotation;
00067
00068 } carmen_move_t;
00069
00070 typedef struct {
00071
00072 int len;
00073 double * val;
00074
00075 } carmen_gauss_kernel_t;
00076
00077 typedef struct {
00078
00079 carmen_vec2_t min;
00080 carmen_vec2_t max;
00081
00082 } carmen_bbox_t;
00083
00084
00085 typedef struct {
00086
00087 int verbose;
00088
00089 double max_usable_laser_range;
00090
00091 double local_map_max_range;
00092 double local_map_resolution;
00093 int local_map_kernel_len;
00094 int local_map_use_odometry;
00095 int local_map_num_convolve;
00096 double local_map_std_val;
00097 int local_map_history_length;
00098 int local_map_max_used_history;
00099 double local_map_min_bbox_distance;
00100 double local_map_object_prob;
00101 int local_map_use_last_scans;
00102
00103 double bounding_box_max_range;
00104 double bounding_box_border;
00105
00106 double motion_model_forward;
00107 double motion_model_sideward;
00108 double motion_model_rotation;
00109
00110 double pos_corr_step_size_forward;
00111 double pos_corr_step_size_sideward;
00112 double pos_corr_step_size_rotation;
00113 int pos_corr_step_size_loop;
00114
00115 } carmen_vascocore_param_t, *carmen_vascocore_param_p;
00116
00117
00118 void * carmen_mdalloc(int ndim, int width, ...);
00119
00120 void camen_mdfree(void *tip, int ndim);
00121
00122 double carmen_vec_distance( carmen_vec2_t p1, carmen_vec2_t p2 );
00123
00124 double carmen_vec_length( carmen_vec2_t v1 );
00125
00126 double carmen_point_dist( carmen_point_t pos1, carmen_point_t pos2 );
00127
00128 double carmen_move_length( carmen_move_t move );
00129
00130 double carmen_gauss( double x, double mu, double sigma );
00131
00132 carmen_gauss_kernel_t carmen_gauss_kernel(int length );
00133
00134 double carmen_orientation_diff( double start, double end );
00135
00136 carmen_vec2_t carmen_laser_point( carmen_point_t rpos,
00137 double val, double angle );
00138
00139 carmen_point_t carmen_point_with_move( carmen_point_t start,
00140 carmen_move_t move );
00141
00142 carmen_point_t carmen_point_backwards_with_move( carmen_point_t start,
00143 carmen_move_t move );
00144
00145 carmen_point_t carmen_point_from_move( carmen_move_t move );
00146
00147 carmen_point_t carmen_point_backwards_from_move( carmen_move_t move );
00148
00149 carmen_move_t carmen_move_between_points( carmen_point_t start,
00150 carmen_point_t end );
00151
00152 void vascocore_init( int argc, char **argv );
00153 void vascocore_init_no_ipc(carmen_vascocore_param_t *new_settings);
00154
00155 void vascocore_reset();
00156
00157 carmen_point_t vascocore_scan_match( carmen_laser_laser_message scan,
00158 carmen_point_t pos );
00159
00160 carmen_point_t
00161 vascocore_scan_match_general(int num_readings, float *range, float *angle,
00162 double fov,
00163 carmen_point_t pos, int first);
00164
00165 #endif
00166
00167