linemapping.h

Go to the documentation of this file.
00001 
00002 // @{
00003 
00011 #ifndef CARMEN_LINEMAPPING_H
00012 #define CARMEN_LINEMAPPING_H
00013 
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017 
00018 #include <carmen/carmen.h>
00019 
00020 #define CARMEN_LINEMAPPING_ROBOT_FRAME  1
00021 #define CARMEN_LINEMAPPING_GLOBAL_FRAME 0
00022 
00023 typedef struct{
00024   carmen_point_t p1, p2;
00025   int weight;
00026 } carmen_linemapping_segment_t;
00027 
00028 
00029 typedef struct{
00030   int num_segs;
00031   carmen_linemapping_segment_t *segs;
00032 } carmen_linemapping_segment_set_t;
00033 
00034 
00035 typedef struct{
00036   double laser_max_length;
00037   double laser_opening_angle;
00038   double laser_start_angle;
00039   double sam_tolerance;
00040   double sam_max_gap;
00041   double sam_min_length;
00042   int    sam_min_num;
00043   int    sam_use_fit_split; 
00044   double merge_max_dist;
00045   double merge_min_relative_overlap;
00046   double merge_overlap_min_length;
00047   double merge_uniformly_distribute_dist;
00048 } carmen_linemapping_parameters_t;
00049 
00050 
00051 void carmen_linemapping_init(int argc, char** argv);
00052 
00053 
00054 carmen_linemapping_segment_set_t  
00055 carmen_linemapping_get_segments_from_scan(const carmen_robot_laser_message *scan, 
00056                                           int local);
00057 
00058 carmen_linemapping_segment_set_t 
00059 carmen_linemapping_get_segments_from_beams(const carmen_robot_laser_message *scan, 
00060                                            int local, 
00061                                            int from, int to);
00062 
00063 carmen_linemapping_segment_set_t  
00064 carmen_linemapping_get_segments_from_scans(const carmen_robot_laser_message *multiple_scans, 
00065                                            int num_scans);
00066 
00067 void                            
00068 carmen_linemapping_update_linemap(carmen_linemapping_segment_set_t *linemap, 
00069                                   const carmen_robot_laser_message *laser);
00070 
00071 void 
00072 carmen_linemapping_free_segments(carmen_linemapping_segment_set_t* s);
00073 
00074 
00075 /* some utility functions for linesegments */
00076 
00077 double 
00078 carmen_linemapping_angle_difference(const carmen_linemapping_segment_t *s1, 
00079                                     const carmen_linemapping_segment_t *s2);
00080 
00081 double          
00082 carmen_linemapping_distance_point_point(const carmen_point_t *p1, 
00083                                         const carmen_point_t *p2);
00084 
00085 double          
00086 carmen_linemapping_segment_length(const carmen_linemapping_segment_t *s);
00087 
00088 
00089 double 
00090 carmen_linemapping_distance_point_linesegment(const carmen_linemapping_segment_t *l, 
00091                                               const carmen_point_t *p);
00092 
00093 double 
00094 carmen_linemapping_distance_linesegment_linesegment(const carmen_linemapping_segment_t *l1,
00095                                                     const carmen_linemapping_segment_t *l2);
00096 
00097 
00098 
00099 #ifdef __cplusplus
00100 }
00101 #endif
00102 
00103 
00104 #endif 
00105 
00106 
00107 // @}

Generated on Wed Apr 5 18:34:18 2006 for CARMEN by  doxygen 1.4.4