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
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