Potkf_tese
[Planar Obstacles]

This module trackes planar obstacles using range images and kalman filering. More...

Collaboration diagram for Potkf_tese:

Data Structures

struct  t_model
 This structure contains the motion model used by kalman filter. More...
struct  t_kmodel
struct  t_cluster
 This structure all cluster information. More...
struct  t_data
 This structure has all points coordinates. More...
struct  t_data_acc
 This structure is a vector of t_data structures, serves as a data accumulator. More...
struct  t_config
 This structure contains global configurations parameters. More...
struct  t_flag
 This structure contains global flags parameters. More...
struct  t_line
 This structure contains a single line properties. More...
struct  t_object
 This structure contains object information. More...
struct  t_track
 This structure contains object track information. More...
struct  t_circular_data
 Generic circular data vector. More...
struct  t_fps
struct  t_path
 Object future path. More...
struct  t_object_list
 ** More...
struct  t_object_acc
 Accumulator for objects. More...
struct  t_circle
 Simple circle data. More...
struct  t_entity
 Still not used, intended to be the last stage of information on the environment. More...
struct  TYPE_potkf_public_params
 This is a test message, Here you insert the description of the entity, in this case the struct. More...
struct  TYPE_Obstacle
 This structure contains a single obstacle. More...
struct  potkf_data_message
 This is a test message, Here you insert the description of the entity, in this case the struct. More...
struct  TYPE_reduced_object
struct  potkf_reduced_data_message
 This is a test message, Here you insert the description of the entity, in this case the struct. More...

Files

file  extra.cpp
 

Misc extra functions.


file  extra.h
 

Misc extra functions header.


file  filter.cpp
 

Custom signal filters.


file  filter.h
 

Custom filters header.


file  object_treatment.cpp
 

Object manipulation functions.


file  object_treatment.h
 

Object manipulation header.


file  print.cpp
 

Print data functions.


file  print.h
 

Header for the print data funcionts.


file  tracking.cpp
 

Tracking related functions.


file  tracking.h
 

Tracking related functions header.


Defines

#define null   NULL
#define _MAX_CLUSTERS_   1080
#define _MAX_TRACK_LENGHT_   1000
#define DONT_INTERSECT   0
#define DO_INTERSECT   1
#define COLLINEAR   2
#define SAME_SIGNS(a, b)   (((long) ((unsigned long) a ^ (unsigned long) b)) >= 0 )
#define tic   tictoc(1)
#define toc   tictoc(0)
#define TIC   1
#define TOC   0
#define NZEROS   4
#define NPOLES   4
#define GAIN   2.072820954e+02
#define TRESHOLD   1
#define _MAX_LASER_OBSTACLES_   100
#define POTKF_RESET_OCCURRED_NAME   (char*)"potkf_reset_occurred"
 Control message to pass to the process control module. Always capitals finishes with _RESET_OCCURRED_NAME and the value is small letters the same without the suffix name.
#define POTKF_RESET_COMMAND_NAME   (char*)"potkf_reset_command"
 Control message to pass to the process control module. Always capitals finishes with _RESET_COMMAND_NAME and the value is small letters the same without the suffix name.
#define POTKF_DATA_MESSAGE_NAME   (char*)"potkf_data"
 Name of the message passed to IPC. Always capitals finishes with _MESSAGE_NAME and the value is small letters the same without the suffix.
#define POTKF_DATA_MESSAGE_FMT   (char*)"{int,<{int,int,[double:50],[double:50]}:1>,double,string}"
 Format of the message passed to IPC. Always capitals finishes with _MESSAGE_FMT and the value is given similar to the one bellow. For more information view the IPC manual.
#define POTKF_REDUCED_DATA_MESSAGE_NAME   (char*)"potkf_data"
 Simplified obstacle message, does not contain objects shape.
#define POTKF_REDUCED_DATA_MESSAGE_FMT   (char*)"{int,<{double,double,double,double,double,double,int,double,int,int,int}:1>,double,string}"
 Simplified obstacle message, does not contain objects shape.

Typedefs

typedef carmen_default_message potkf_reset_occurred_message
typedef carmen_default_message potkf_reset_command_message

Enumerations

enum  enum_classification { MOVING = 5, STATIONARY = 6 }
enum  enum_background_style { STYLE_DARK, STYLE_LIGHT, STYLE_DARK, STYLE_LIGHT }

Functions

void init_config (t_config *config)
void init_flags (t_flag *flags)
void init_path (t_object_list *object)
void create_motion_path (t_object_list **list, int size, t_object **objects, t_config *config)
void get_ratios (IplImage *img, int result, double int_x, double int_y, double fxi, double fyi, double nxi, double nyi, double *n_min_ratio, double *f_min_ratio, bool *collision_detected, double n_lenght, double f_lenght, t_config *config)
void predict_collisions (IplImage *img, t_object_list **list, int size, t_object **objects, t_config *config, t_flag *flags)
int lines_intersect (double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double *x, double *y)
void free_error_vectors (t_object_list *object)
void get_angle_std (t_circular_data *data, double *std)
void get_mean_velocity (t_circular_data *data, double *mean_module, double *mean_angle)
void add_to_velocity_acc (t_circular_data *data, double velocity_module, double velocity_angle)
void init_velocity_acc (t_circular_data **data, unsigned int number_elements)
void free_velocity_acc (t_circular_data *data)
void init_error_vectors (t_circular_data **data, unsigned int number_elements)
void add_to_erro_vectors (t_circular_data *data, double *element)
void get_error_covariance (t_circular_data *data, CvMat *error_accumulator)
 Get covariance.
void init_data (t_data *data)
void copy_data (t_data *src, t_data *dst)
void init_data_acc (t_data_acc *data_acc, t_config *config, t_flag *)
void clear_data_acc (t_data_acc *data_acc, t_config *, t_flag *)
void final_clean_data (t_data *data, t_config *config)
void add_to_data_acc (t_data_acc *data_acc, t_data *data)
void add_point_to_data_vector (t_data *data, int pos, double x, double y, double t, double r)
void spatial_moving_average_filter (t_data *data, int window_size, t_config *config)
 Performes a limited moving average of the data vector.
void get_occluded_data (t_data *new_data, t_data *last_data, t_data *occluded_data, t_config *config)
void get_data_from_acc (t_data_acc *data_acc, t_data *data, t_config *config)
void get_data_uncliped_from_acc (t_data_acc *data_acc, t_data *data, t_config *config)
double point2point_distance (double xi, double yi, double xf, double yf)
double point2point_algebric_distance (double xi, double yi, double xf, double yf)
double point2line_distance (double alpha, double ro, double x, double y)
int real2print (double x, t_config *config)
void get_data (t_data *data, float *range_vector, int size, double angular_resolution, t_config *config)
void get_data_uncliped (t_data *data, float *range_vector, int size, double angular_resolution, t_config *config)
void calc_cluster_props (t_cluster **clusters, int size, t_data *data, t_config *)
double dietmayer_threshold (double r, t_config *config)
t_cluster ** clustering (t_data *data, int *count, t_config *config, t_flag *flags)
void fill_occluded_data_with_filtered_data (t_data *normal_data, t_data *occluded_data)
void advanced_data_merge (t_data *normal_data, t_data *occluded_data, t_data *full_data, t_config *config, t_flag *flags)
bool clip_point (double r, double t, t_config *config)
double gerate_uniform (int val)
void remove_small_clusters (t_cluster **clusters, int *size, int threshold)
void remove_border_points (t_cluster **clusters, int size, int npoints)
void remove_data_point (t_data *data, int p)
void simplify_data (t_data *data, int n)
double get_fps (double dt, t_fps *acc)
t_cluster ** advanced_clustering (IplImage *img, t_data *normal_data, t_data *occluded_data, int *count, t_config *config, t_flag *flags)
t_object ** clusters2objects (t_cluster **clusters, int size, t_data *data, t_config *config, t_flag *flag)
void smooth_clusters (t_cluster **clusters, int size, t_data *data, t_config *config)
void calc_object_props (t_object **objects, int size, t_config *config, t_flag *flags)
void recursive_IEPF (t_object *object, t_data *data, int start, int end, t_config *config)
void recursive_line_fitting (t_object *object, t_cluster *cluster, t_data *data, t_config *config)
void free_lines (t_object **objects, int size)
int remove_points_acc (t_data_acc *data_ref, t_data *data, t_config *config, t_flag *flag)
 Removes points from acc based on their overlap.
void remove_data_acc_point (t_data_acc *data, int p)
void drawcross (IplImage *img, int size, CvPoint center, CvScalar color, int line_size)
void draw_objects_centers (IplImage *img, t_object **objects, int size, CvScalar color, t_config *config, t_flag *)
void draw_objects_ids (IplImage *img, t_object **objects, int size, CvScalar color, t_config *config, t_flag *)
void draw_objects (IplImage *img, t_object **objects, int size, CvScalar color, t_config *config, t_flag *)
void draw_end_lines (IplImage *img, t_cluster **clusters, int size, t_data *data, t_config *config)
void draw_clusters_npoints (IplImage *img, t_cluster **clusters, int size, t_data *data, t_config *config)
void draw_ambient (IplImage *img, t_config *config, enum_background_style style)
void draw_midle_circle (IplImage *img, t_config *config)
void draw_clusters_centers (IplImage *img, t_cluster **clusters, int size, t_config *config)
void draw_oclusion_area (IplImage *img, t_object **list, int size, CvScalar color, t_config *config)
void draw_path (IplImage *img, t_object_list **list, int size, t_config *config, t_flag *flags)
void draw_clusters_area (IplImage *img, t_cluster **clusters, int size, t_config *config, t_data *data)
void draw_clusters (IplImage *img, t_cluster **clusters, int size, t_data *data, t_config *config)
void draw_raw_data (IplImage *img, t_data *data, CvScalar color, t_config *config, t_flag *)
void draw_raw_data_acc (IplImage *img, t_data_acc *data_acc, CvScalar color, t_config *config, t_flag *)
void draw_raw_data_circles (IplImage *img, t_data *data, CvScalar color, t_config *config, t_flag *)
void draw_raw_data_acc_circles (IplImage *img, t_data_acc *data, CvScalar color, t_config *config, t_flag *)
void draw_list_centers (IplImage *img, t_object_list **list, int size, CvScalar color, t_config *config, t_flag *)
void draw_list_ppos (IplImage *img, t_object_list **list, int size, t_config *config)
void draw_list_circles (IplImage *img, t_object_list **list, int size, CvScalar color, t_config *config, t_flag *)
void draw_list_ids (IplImage *img, t_object_list **list, int size, t_config *config)
void draw_objects_search_area (IplImage *img, t_object_list **list, int size, t_config *config)
void draw_tracks (IplImage *img, t_object_list **list, int size, t_config *config)
void draw_velocity (IplImage *img, t_object_list **objects, int size, CvScalar color, t_config *config)
void drawarrow (int x0, int y0, double o, double lenght, IplImage *dst, CvScalar color, int thickness, int line_type, int shift)
void draw_objects_ppos (IplImage *img, t_object **objects, int size, t_config *config)
void textcolor (int attr, int fg, int bg)
void resettextcolor (void)
int tictoc (int status)
int timediff (struct timeval t1, struct timeval t2)
void filterloop (double *in, double *out, int size)
 Butterworth low pass filter loop.
void filter_data (t_cluster **clusteres, int size, t_data *data, t_config *config)
void kkalman (t_object_list **objects, int size, t_config *config, t_flag *, int selected_target)
void kinit_list (t_object_list *object, t_config *config)
 Initialisation of object kalman models.
void update_transition_matrix (t_object_list **, int)
 Updates kalman matrices in each iteration.
void kkalman_iteration (t_object_list *object)
void init_model (t_model *model)
void kalman_iteration (t_model *model)
void kalman (t_object **objects, int size, t_config *config, t_flag *flags)
void kinit_model (t_kmodel *model)
void agregate_data_objects (IplImage *img, t_object **objects_new, int size_new, t_object **objects_occluded, int size_occluded, t_config *config)
void agregate_data (IplImage *img, t_cluster **clusters_new, int size_new, t_data *data_new, t_cluster **clusters_occluded, int size_occluded, t_data *data_occluded, t_config *config)
void extract_occlusion_points (t_data *occlusion_data, t_data *normal_data, t_object **last_objects, int last_size, t_config *config)
t_object ** copy_objects (t_object **objects_old, int old_size)
void clean_objets (t_object **objects, int size)
void init_objets_ids (t_object **objects, int size)
t_object ** init_objects ()
t_object_list ** init_list (t_object **objects, int size, t_config *config)
void add_to_list (t_object_list **list, t_object *object, int *list_size, t_config *config)
void remove_from_list (t_object_list **list, int *list_size, int obj2rm)
void move_error_data (t_object_list *src, t_object_list *dst)
t_object ** move_to_old (t_object **objects, int size)
void kinit_object (t_object *object)
void move_to_objects (t_object *object, t_object **objects, int size)
t_object ** occlusion_clusters2objects (t_cluster **clusters, int size, t_data *data, t_config *config, t_flag *)
int main (int argc, char **argv)
void copy_to_potkf_data_message (potkf_data_message *msg, t_object **objects, int size)
void copy_to_potkf_reduced_data_message (potkf_reduced_data_message *msg, t_object_list **list, int size, t_config *config)
void shutdown_module (int x)
 makes a clean shutdown of the program
void heartbeat_handler (carmen_heartbeat_message *)
 TO BE REMOVED.
int potkf_subscribe_data (potkf_data_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how)
int potkf_subscribe_reduced_data (potkf_reduced_data_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how)
 Subscribes potkf_reduced_data_message. Uses broadcast to all subscribers. Can be used by other modules.
int potkf_publish_data (potkf_data_message *msg)
int potkf_publish_reduced_data (potkf_reduced_data_message *msg)
 Publishes potkf_data_message messages. Uses broadcast to all subscribers. Usually is only used by potkf.
void potkf_param_daemon_install_some_params (TYPE_potkf_public_params *p, int subscribe_changes, int verbose)
void handler (void)
void draw_obstacles (IplImage *img, potkf_data_message *msg)
void print_data (t_data *data)
void set_objects_ids (t_object **objects, int size, int id)
void kalman_tracking (t_object_list **list, t_object **object, int *list_size, int size, t_config *config, t_flag *)
void calc_ellipse_axis (t_object_list *object)
int remove_overlapped_objects (t_object_list **list, int *size, t_config *config)
void update_tracks (t_object_list **list, int size)
void object_nearest_neighbour_tracking (t_object **old_object, t_object **new_object, int old_size, int new_size, t_config *config, t_flag *flags)
void associate_models (t_object **objects, int size, t_object **old_objects, int old_size, t_config *config, t_flag *flags)

Variables

static float xv [NZEROS+1]
static float yv [NPOLES+1]
char hokuyo_message_heartbeat = 0
carmen_laser_laser_message * lasermsg
c_videosavingvideo_s
TYPE_executionflags sflags
CvVideoWriter * vid
IplImage * img
potkf_data_message msg

Detailed Description

This module trackes planar obstacles using range images and kalman filering.


Define Documentation

#define _MAX_CLUSTERS_   1080
#define _MAX_LASER_OBSTACLES_   100
#define _MAX_TRACK_LENGHT_   1000
#define COLLINEAR   2
#define DO_INTERSECT   1
#define DONT_INTERSECT   0
#define GAIN   2.072820954e+02
#define NPOLES   4
#define null   NULL
#define NZEROS   4
#define POTKF_DATA_MESSAGE_FMT   (char*)"{int,<{int,int,[double:50],[double:50]}:1>,double,string}"

Format of the message passed to IPC. Always capitals finishes with _MESSAGE_FMT and the value is given similar to the one bellow. For more information view the IPC manual.

#define POTKF_DATA_MESSAGE_NAME   (char*)"potkf_data"

Name of the message passed to IPC. Always capitals finishes with _MESSAGE_NAME and the value is small letters the same without the suffix.

#define POTKF_REDUCED_DATA_MESSAGE_FMT   (char*)"{int,<{double,double,double,double,double,double,int,double,int,int,int}:1>,double,string}"

Simplified obstacle message, does not contain objects shape.

#define POTKF_REDUCED_DATA_MESSAGE_NAME   (char*)"potkf_data"

Simplified obstacle message, does not contain objects shape.

#define POTKF_RESET_COMMAND_NAME   (char*)"potkf_reset_command"

Control message to pass to the process control module. Always capitals finishes with _RESET_COMMAND_NAME and the value is small letters the same without the suffix name.

#define POTKF_RESET_OCCURRED_NAME   (char*)"potkf_reset_occurred"

Control message to pass to the process control module. Always capitals finishes with _RESET_OCCURRED_NAME and the value is small letters the same without the suffix name.

#define SAME_SIGNS ( a,
 )     (((long) ((unsigned long) a ^ (unsigned long) b)) >= 0 )
#define TIC   1
#define tic   tictoc(1)
#define TOC   0
#define toc   tictoc(0)
#define TRESHOLD   1

Typedef Documentation

typedef carmen_default_message potkf_reset_command_message
typedef carmen_default_message potkf_reset_occurred_message

Enumeration Type Documentation

Enumerator:
STYLE_DARK 
STYLE_LIGHT 
STYLE_DARK 
STYLE_LIGHT 
Enumerator:
MOVING 
STATIONARY 

Function Documentation

void add_point_to_data_vector ( t_data data,
int  pos,
double  x,
double  y,
double  t,
double  r 
)
void add_to_data_acc ( t_data_acc data_acc,
t_data data 
)
void add_to_erro_vectors ( t_circular_data data,
double *  element 
)
void add_to_list ( t_object_list **  list,
t_object object,
int *  list_size,
t_config config 
)
void add_to_velocity_acc ( t_circular_data data,
double  velocity_module,
double  velocity_angle 
)
t_cluster** advanced_clustering ( IplImage *  img,
t_data normal_data,
t_data occluded_data,
int *  count,
t_config config,
t_flag flags 
)
void advanced_data_merge ( t_data normal_data,
t_data occluded_data,
t_data full_data,
t_config config,
t_flag flags 
)

Note:
This variables are used when branching through occluded data

Break point detector this is the first fase of data clustering

End of cluster detected

Begin of cluster detected

void agregate_data ( IplImage *  img,
t_cluster **  clusters_new,
int  size_new,
t_data data_new,
t_cluster **  clusters_occluded,
int  size_occluded,
t_data data_occluded,
t_config config 
)

NOT IN USE

void agregate_data_objects ( IplImage *  img,
t_object **  objects_new,
int  size_new,
t_object **  objects_occluded,
int  size_occluded,
t_config config 
)

NOT IN USE

void associate_models ( t_object **  objects,
int  size,
t_object **  old_objects,
int  old_size,
t_config config,
t_flag flags 
)
void calc_cluster_props ( t_cluster **  clusters,
int  size,
t_data data,
t_config  
)
void calc_ellipse_axis ( t_object_list object  ) 
void calc_object_props ( t_object **  objects,
int  size,
t_config config,
t_flag flags 
)
void clean_objets ( t_object **  objects,
int  size 
)
void clear_data_acc ( t_data_acc data_acc,
t_config ,
t_flag  
)
bool clip_point ( double  r,
double  t,
t_config config 
)
t_cluster** clustering ( t_data data,
int *  count,
t_config config,
t_flag flags 
)
t_object** clusters2objects ( t_cluster **  clusters,
int  size,
t_data data,
t_config config,
t_flag flag 
)
void copy_data ( t_data src,
t_data dst 
)
t_object ** copy_objects ( t_object **  objects_old,
int  old_size 
)
void copy_to_potkf_data_message ( potkf_data_message msg,
t_object **  objects,
int  size 
)
void copy_to_potkf_reduced_data_message ( potkf_reduced_data_message msg,
t_object_list **  list,
int  size,
t_config config 
)
void create_motion_path ( t_object_list **  list,
int  size,
t_object **  objects,
t_config config 
)

Get the right and left start points

The end point of the last line is still missing

double dietmayer_threshold ( double  r,
t_config config 
)
void draw_ambient ( IplImage *  img,
t_config config,
enum_background_style  style 
)
void draw_clusters ( IplImage *  img,
t_cluster **  clusters,
int  size,
t_data data,
t_config config 
)
void draw_clusters_area ( IplImage *  img,
t_cluster **  clusters,
int  size,
t_config config,
t_data data 
)
void draw_clusters_centers ( IplImage *  img,
t_cluster **  clusters,
int  size,
t_config config 
)
void draw_clusters_npoints ( IplImage *  img,
t_cluster **  clusters,
int  size,
t_data data,
t_config config 
)
void draw_end_lines ( IplImage *  img,
t_cluster **  clusters,
int  size,
t_data data,
t_config config 
)
void draw_list_centers ( IplImage *  img,
t_object_list **  list,
int  size,
CvScalar  color,
t_config config,
t_flag  
)
void draw_list_circles ( IplImage *  img,
t_object_list **  list,
int  size,
CvScalar  color,
t_config config,
t_flag  
)
void draw_list_ids ( IplImage *  img,
t_object_list **  list,
int  size,
t_config config 
)
void draw_list_ppos ( IplImage *  img,
t_object_list **  list,
int  size,
t_config config 
)
void draw_midle_circle ( IplImage *  img,
t_config config 
)
void draw_objects ( IplImage *  img,
t_object **  objects,
int  size,
CvScalar  color,
t_config config,
t_flag  
)
void draw_objects_centers ( IplImage *  img,
t_object **  objects,
int  size,
CvScalar  color,
t_config config,
t_flag  
)
void draw_objects_ids ( IplImage *  img,
t_object **  objects,
int  size,
CvScalar  color,
t_config config,
t_flag  
)
void draw_objects_ppos ( IplImage *  img,
t_object **  objects,
int  size,
t_config config 
)
void draw_objects_search_area ( IplImage *  img,
t_object_list **  list,
int  size,
t_config config 
)
void draw_obstacles ( IplImage *  img,
potkf_data_message msg 
)
void draw_oclusion_area ( IplImage *  img,
t_object **  list,
int  size,
CvScalar  color,
t_config config 
)
void draw_path ( IplImage *  img,
t_object_list **  list,
int  size,
t_config config,
t_flag flags 
)
void draw_raw_data ( IplImage *  img,
t_data data,
CvScalar  color,
t_config config,
t_flag  
)
void draw_raw_data_acc ( IplImage *  img,
t_data_acc data_acc,
CvScalar  color,
t_config config,
t_flag  
)
void draw_raw_data_acc_circles ( IplImage *  img,
t_data_acc data,
CvScalar  color,
t_config config,
t_flag  
)
void draw_raw_data_circles ( IplImage *  img,
t_data data,
CvScalar  color,
t_config config,
t_flag  
)
void draw_tracks ( IplImage *  img,
t_object_list **  list,
int  size,
t_config config 
)
void draw_velocity ( IplImage *  img,
t_object_list **  objects,
int  size,
CvScalar  color,
t_config config 
)
void drawarrow ( int  x0,
int  y0,
double  o,
double  lenght,
IplImage *  dst,
CvScalar  color,
int  thickness,
int  line_type,
int  shift 
)
void drawcross ( IplImage *  img,
int  size,
CvPoint  center,
CvScalar  color,
int  line_size 
)

Referenced by get_ratios().

Here is the caller graph for this function:

void extract_occlusion_points ( t_data occlusion_data,
t_data normal_data,
t_object **  last_objects,
int  last_size,
t_config config 
)

NOT IN USE

void fill_occluded_data_with_filtered_data ( t_data normal_data,
t_data occluded_data 
)
void filter_data ( t_cluster **  clusteres,
int  size,
t_data data,
t_config config 
)
void filterloop ( double *  in,
double *  out,
int  size 
)

Butterworth low pass filter loop.

Parameters:
in 
out 
size 
Returns:
void
void final_clean_data ( t_data data,
t_config config 
)
void free_error_vectors ( t_object_list object  ) 

X Coordinate

Y Coordinate

void free_lines ( t_object **  objects,
int  size 
)
void free_velocity_acc ( t_circular_data data  ) 
double gerate_uniform ( int  val  ) 
void get_angle_std ( t_circular_data data,
double *  std 
)
void get_data ( t_data data,
float *  range_vector,
int  size,
double  angular_resolution,
t_config config 
)
void get_data_from_acc ( t_data_acc data_acc,
t_data data,
t_config config 
)
void get_data_uncliped ( t_data data,
float *  range_vector,
int  size,
double  angular_resolution,
t_config config 
)
void get_data_uncliped_from_acc ( t_data_acc data_acc,
t_data data,
t_config config 
)
void get_error_covariance ( t_circular_data data,
CvMat *  error_accumulator 
)

Get covariance.

Parameters:
data general data storage vector
Returns:
void
double get_fps ( double  dt,
t_fps acc 
)
void get_mean_velocity ( t_circular_data data,
double *  mean_module,
double *  mean_angle 
)
void get_occluded_data ( t_data new_data,
t_data last_data,
t_data occluded_data,
t_config config 
)
void get_ratios ( IplImage *  img,
int  result,
double  int_x,
double  int_y,
double  fxi,
double  fyi,
double  nxi,
double  nyi,
double *  n_min_ratio,
double *  f_min_ratio,
bool *  collision_detected,
double  n_lenght,
double  f_lenght,
t_config config 
)

N Object intersects F object path

References COLLINEAR, DO_INTERSECT, drawcross(), real2print(), and TRUE.

Here is the call graph for this function:

void handler ( void   ) 

References draw_obstacles(), and img.

Here is the call graph for this function:

void heartbeat_handler ( carmen_heartbeat_message *  heartbeat_msg  ) 

TO BE REMOVED.

All the processing is done when the data is recieved, so this function has all the work.

Returns:
void
void init_config ( t_config config  ) 
void init_data ( t_data data  ) 
void init_data_acc ( t_data_acc data_acc,
t_config config,
t_flag  
)
void init_error_vectors ( t_circular_data **  data,
unsigned int  number_elements 
)
void init_flags ( t_flag flags  ) 
t_object_list** init_list ( t_object **  objects,
int  size,
t_config config 
)
void init_model ( t_model model  ) 
t_object** init_objects (  ) 
void init_objets_ids ( t_object **  objects,
int  size 
)
void init_path ( t_object_list object  ) 
void init_velocity_acc ( t_circular_data **  data,
unsigned int  number_elements 
)
void kalman ( t_object **  objects,
int  size,
t_config config,
t_flag flags 
)
void kalman_iteration ( t_model model  ) 
void kalman_tracking ( t_object_list **  list,
t_object **  object,
int *  list_size,
int  size,
t_config config,
t_flag  
)

Track stationary objects

Object not found

Track moving objects

Object not found

Remove oversized objects

FOR ALL CURRENT OBJECTS

Calc min_distance_to_existing_object

void kinit_list ( t_object_list object,
t_config config 
)

Initialisation of object kalman models.

Parameters:
object object containing the models to be initialised
Returns:
void

Init Error vectors

void kinit_model ( t_kmodel model  ) 
void kinit_object ( t_object object  ) 
void kkalman ( t_object_list **  objects,
int  size,
t_config config,
t_flag ,
int  selected_target 
)

* Set new measurement vector ***************/

********************************************/

* Get Innovation ***************************/

Cannot get innovation if the object if appearing for the first time, because there is no prevision

I'm not using velocity measurements

I'm not using velocity measurements

* Update white noise scale **************************/

Only update if the object is visible

***************************************************/

********************************************/

* Kalman iteration *************************/

********************************************/

* Get Residual *****************************/

********************************************/

* Update measurement noise variance ********/

********************************************/

* Get estimated position and predicted position */

*************************************************/

* Extract object velocity ******************/

********************************************/

* Object stabilization *********************/

********************************************/

void kkalman_iteration ( t_object_list object  ) 
int lines_intersect ( double  x1,
double  y1,
double  x2,
double  y2,
double  x3,
double  y3,
double  x4,
double  y4,
double *  x,
double *  y 
)
int main ( int  argc,
char **  argv 
)

Note:
Flags used in the program
Configuration variables
Raw data vector
Raw data vector, from previous scan
Raw data vector, occluded data
Raw data accumulator
Raw data accumulator
First data segmentation performed on raw data
Second level data association
Final level data association

GET NEW DATA

GET OCCLUDED DATA

COPY TO LAST DATA

FILTER VIA ACCUMULATOR

*******************

FILTER VIA ACCUMULATOR

*******************

CALC FIRST OBJECTS

*******************

CALC OBJECTS

*******************

time and image related operations

References handler(), img, key(), potkf_subscribe_data(), printc, and shutdown_module().

Here is the call graph for this function:

void move_error_data ( t_object_list src,
t_object_list dst 
)
void move_to_objects ( t_object object,
t_object **  objects,
int  size 
)
t_object** move_to_old ( t_object **  objects,
int  size 
)
void object_nearest_neighbour_tracking ( t_object **  old_object,
t_object **  new_object,
int  old_size,
int  new_size,
t_config config,
t_flag flags 
)
t_object** occlusion_clusters2objects ( t_cluster **  clusters,
int  size,
t_data data,
t_config config,
t_flag  
)
double point2line_distance ( double  alpha,
double  ro,
double  x,
double  y 
)
double point2point_algebric_distance ( double  xi,
double  yi,
double  xf,
double  yf 
)
double point2point_distance ( double  xi,
double  yi,
double  xf,
double  yf 
)
void potkf_param_daemon_install_some_params ( TYPE_potkf_public_params p,
int  subscribe_changes,
int  verbose 
)
int potkf_publish_data ( potkf_data_message msg  ) 
int potkf_publish_reduced_data ( potkf_reduced_data_message msg  ) 

Publishes potkf_data_message messages. Uses broadcast to all subscribers. Usually is only used by potkf.

Parameters:
msg Pointer to message.
Returns:
nothing
int potkf_subscribe_data ( potkf_data_message msg,
carmen_handler_t  handler,
carmen_subscribe_t  subscribe_how 
)
int potkf_subscribe_reduced_data ( potkf_reduced_data_message msg,
carmen_handler_t  handler,
carmen_subscribe_t  subscribe_how 
)

Subscribes potkf_reduced_data_message. Uses broadcast to all subscribers. Can be used by other modules.

Parameters:
msg Pointer to message. When a new message is received the variable msg is filled with the new data.
handler pointer to function that should be executed when a message is received. If NULL no function is called.
subscribe_how Value that says if all messages are to be received CARMEN_SUBSCRIBE_ALL or if only the more recent is important CARMEN_SUBSCRIBE_LATEST.
void predict_collisions ( IplImage *  img,
t_object_list **  list,
int  size,
t_object **  objects,
t_config config,
t_flag flags 
)

Center F

Left F

Right F

void print_data ( t_data data  ) 
int real2print ( double  x,
t_config config 
)
void recursive_IEPF ( t_object object,
t_data data,
int  start,
int  end,
t_config config 
)

This functions malloc a line to work with, each time it mallocs a line it increments the number of lines object data

void recursive_line_fitting ( t_object object,
t_cluster cluster,
t_data data,
t_config config 
)
void remove_border_points ( t_cluster **  clusters,
int  size,
int  npoints 
)
void remove_data_acc_point ( t_data_acc data,
int  p 
)
void remove_data_point ( t_data data,
int  p 
)
void remove_from_list ( t_object_list **  list,
int *  list_size,
int  obj2rm 
)
int remove_overlapped_objects ( t_object_list **  list,
int *  size,
t_config config 
)
int remove_points_acc ( t_data_acc data_acc,
t_data data,
t_config config,
t_flag  
)

Removes points from acc based on their overlap.

Removes points from acc based on their overlap, NOT IN USE.

Parameters:
data_acc general data storage accumulator vector
data general data storage vector
config general config structure
flags general flags structure
Returns:
number of points removed
void remove_small_clusters ( t_cluster **  clusters,
int *  size,
int  threshold 
)
void resettextcolor ( void   ) 
void set_objects_ids ( t_object **  objects,
int  size,
int  id 
)
void shutdown_module ( int  sig  ) 

makes a clean shutdown of the program

makes a clean shutdown of the program.

Module shutdown function.

The main header file for egointerface module.

Safe shutdown.

Does a safe shutdown. Disconnects from IPC. Preform log closing operations and update log statistics.

Safe shutdown of module.

Make a clean exit.

Shuts down cm module with a clean exit.

Does a safe shutdown. Disconnects from IPC.

To do a safe ctrl +c exit.

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

The main header file for this module.

Returns:
nothing for now (should return an error code)
#ifndef _DES70_10_H_
#define _DES70_10_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/lar.h>
//#include <lar/readcommandlineparameters.h>

//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


typedef struct{
    int baudrate;

    int sys_config;
    int cur_reg_gain_p;
    int cur_reg_gain_i;
    int max_cur_output;
    int speed_reg_gain_p;
    int speed_reg_gain_i;
    int internal_param1;
    int internal_param2;
    int internal_param3;
    int max_speed_error;
    int setting_unit_gain;
    int setting_unit_offset;
    int setting_unit_delay;
    int peak_current;
    int max_cont_current;
    int therm_const;
    int max_speed;
    int acceleration;
    int speed_constant;
    int enc_resolution;
    int pole_pair_number;
    int internal_param4;
    int rpm2qc_factor;
    int index_offset;
    int pwm_period;
    int max_duty_cycle;
    int cur_det_ph_u_offset;
    int cur_det_ph_v_offset;
    int ad_conv_offset;
    int can_module_id;
    int can_service_id;
    int can_rx_pdo_id;
    int can_tx_pdo_id;
    int can_bcr1;
    int can_bcr2;
    int can_op_mode;
    int can_rx_sdo_id;
    int can_tx_sdo_id;
    int can_rtr0_id;
    int can_rtr1_id;
    int can_config;
    int internal_param5;
    int error_proc;
    int max_speed_curr;
    int hall_angle_offs;
}TYPE_des_sysparam;

enum ENUM_DES_SYS_PARAMS
{
    BAUDRATE = 0, 
    SYS_CONFIG = 1,
    CUR_REG_GAIN_P = 2,
    CUR_REG_GAIN_I = 3,
    MAX_CUR_OUTPUT = 4,
    SPEED_REG_GAIN_P = 5,
    SPEED_REG_GAIN_I = 6,
    INTERNAL_PARAM1 = 7,
    INTERNAL_PARAM2 = 8,
    INTERNAL_PARAM3 = 9,
    MAX_SPEED_ERROR = 10,
    SETTING_UNIT_GAIN = 11,
    SETTING_UNIT_OFFSET = 12,
    SETTING_UNIT_DELAY = 13,
    PEAK_CURRENT = 14,
    MAX_CONT_CURRENT = 15,
    THERM_CONST = 16,
    MAX_SPEED = 17,
    ACCELERATION = 18,
    SPEED_CONSTANT = 19,
    ENC_RESOLUTION = 20,
    POLE_PAIR_NUMBER = 21,
    INTERNAL_PARAM4 = 22,
    RPM_2QC_FACTOR = 23,
    INDEX_OFFSET = 24,
    PWM_PERIOD = 25,
    MAX_DUTY_CYCLE = 26,
    CUR_DET_PH_U_OFFSET = 27,
    CUR_DET_PH_V_OFFSET = 28,
    AD_CONV_OFFSET = 29,
    CAN_MODULE_ID = 30,
    CAN_SERVICE_ID = 31,
    CAN_RX_PDO_ID = 32,
    CAN_TX_PDO_ID = 33,
    CAN_BCR1 = 34,
    CAN_BCR2 = 35,
    CAN_OP_MODE = 36,
    CAN_RX_SDO_ID = 37,
    CAN_TX_SDO_ID = 38,
    CAN_RTR0_ID = 39,
    CAN_RTR1_ID = 40,
    CAN_CONFIG = 41,
    INTERNAL_PARAM5 = 42,
    ERROR_PROC = 43,
    MAX_SPEED_CURR = 44,
    HALL_ANGLE_OFFS = 45
};

typedef struct{
    int sys_op_status;
    int actual_mean_cur_d;
    int actual_mean_cur_q;
    int cur_setting_val;
    int rel_rot_pos_rev;
    int speed_setting_val;
    int actual_mean_speed_val;
    int abs_rotor_pos;
    int standard_error;
    int can_error;
    int actual_cur_q;
    int actual_speed_val;
    int error_hist1;
    int error_hist2;
    int enc_counter;
    int enc_counter_last_ind;
    int hall_sens_pat;
}TYPE_DES_status_var;

enum ENUM_DES_STATUS_VAR
{
    SYS_OP_STATUS = 128,
    ACTUAL_MEAN_CUR_D = 129,
    ACTUAL_MEAN_CUR_Q = 130,
    CUR_SETTING_VAL = 131,
    REL_ROT_POS_REV = 132,
    SPEED_SETTING_VAL = 133,
    ACTUAL_MEAN_SPEED_VAL = 134,
    ABS_ROTOR_POS = 135,
    STANDARD_ERROR = 136,
    CAN_ERROR = 137,
    ACTUAL_CUR_Q = 138,
    ACTUAL_SPEED_VAL = 139,
    ERROR_HIST1 = 140,
    ERROR_HIST2 = 141,
    ENC_COUNTER = 142,
    ENC_COUNTER_LAST_IND = 143,
    HALL_SENS_PAT = 144,
};

typedef struct{
    unsigned char OpCode;
    unsigned char data[520];
    int size;
    int crc;
}TYPE_msg_frame;


//####################################################################
// Prototypes:  for private functions can be declared #################
// in des70_10.c or preferably in des70_10_functions.c  ##
//####################################################################



//-------   des70_10_init.cpp       -------
int InitDES_communication(char* com_device, int* port, int baud, TYPE_executionflags* flg);

//-------   des70_10_functions.cpp  -------
int calc_crc_16(TYPE_msg_frame* msg);
int write_msg_inbuf(const int port, unsigned char* data, int size);
int check_msg_aceptance(const int port, float wait_time, unsigned char* msg);
int send_OpCode(const int port, unsigned char tries, unsigned char OpCode, char flg);
int send_data(const int port, TYPE_msg_frame* msg, char flg);
int read_buffer(const int port, TYPE_msg_frame* msg, char flg);
int send_msg_frame(const int port, TYPE_msg_frame* msg, char flg);
int DES_ST_read_sys_status(const int port, int* sys_status, char flg);
int DES_ST_read_error(const int port, int* errors, char flg);
int DES_ST_clear_errors(const int port, char flg);
int DES_ST_reset(const int port, char flg);
int DES_ST_enable(const int port, int* newState, char flg);
int DES_SPF_read_temp_param(const int port, int paramNb, int dataFormat, int* response, char flg);
int DES_SPF_set_temp_param(const int port, int paramNb, int dataFormat, int* newValue, char flg);
int DES_SPF_read_all_temp_param(const int port, TYPE_des_sysparam* sysparam, char flg);
int DES_SF_set_velocity(const int port, int newVelocity, char flg);
int DES_SF_set_current(const int port, int newCurrent, char flg);
int DES_SF_stop_motion(const int port, char flg);
int DES_MF_read_velocity_is_must(const int port, int vel_type, int* velocity, int* requested_vel, char flg);
int InitDES(const int port, TYPE_des_sysparam* newSysParam, char flg);
int stopDES(const int port, char flg);
int DES_set_new_baud(int* port, int baud, char flg);



#ifdef _DES70_10_FUNCTIONS_C_

#else

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
x the type of signal sent: SIGINT etc
#ifndef _POWERMANAGER_H_
#define _POWERMANAGER_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/powermanager_interface.h>

#define _SERIALPORT_ "/dev/ttyUSB0"
//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in powermanager.c or preferably in powermanager_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_command_msg(void);
void initialize_communications(void);
int send_to_plc(unsigned char byte_value);
//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _POWERMANAGER_CPP_ /*or _POWERMANAGER_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?


TYPE_executionflags flags; //the command line parameters flags


//creates a the default structure that will deal retrieve parameters.
// explain fields (use a handler whenever a parameter changes)
// var1 in this case is actually

int PortHandle;
powermanager_status_message status_msg;
powermanager_command_message command_msg;

#else

extern TYPE_executionflags flags;
extern powermanager_status_message status_msg;
extern powermanager_command_message command_msg;
extern int PortHandle;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
x the SIGNAL
Todo:
many modules use this. Should be an util library.
#ifndef _XBEE_H_
#define _XBEE_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/xbee_interface.h>
#include <strings.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in xbee.c or preferably in xbee_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
void initialize_xbee(void);
void xbee_transmit_data(void);
void xbee_receive_data(void);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _XBEE_CPP_ /*or _XBEE_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?

char *COM_DEVICE_XBEE;      //will receive com device address
double read_frequency;      //will receive com device access frequency
TYPE_executionflags flags; //the command line parameters flags
xbee_rx_data_message rx_message; //this is a message structure
xbee_tx_data_message tx_message; //this is a message structure
TYPE_xbee_public_params params; //this is a parameters structure
int device_handler_xbee;
char* tx_string;

//creates a the default structure that will deal with retrieved parameters.
// explain fields (use a handler whenever a parameter changes)
// the values in the field xbee_data_param_shared_var, from lar.ini, will be installed in var1
// the var type is an integer: CARMEN_PARAM_INT
carmen_param_t xbee_local_parameters[] = {
    {(char*)"xbee", (char*)"frequency", CARMEN_PARAM_DOUBLE, &read_frequency, 1, NULL},
    {(char*)"xbee", (char*)"comport", CARMEN_PARAM_STRING, &COM_DEVICE_XBEE, 0, NULL}}; //prepare param struct
    
#else

extern char *COM_DEVICE_XBEE;       //will receive com device address
extern double read_frequency;       //will receive com device access frequency
extern TYPE_executionflags flags;
extern xbee_rx_data_message rx_message; 
extern xbee_tx_data_message tx_message;
extern TYPE_xbee_public_params params;
extern int device_handler_xbee;
extern char* tx_string;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc

Disconnects from ipc and releases video writer

Parameters:
x Signal value. To shutdown signal must be SIGINT
#ifndef _OT_H_
#define _OT_H_

#include <lar/lar.h>
//#include "/home/atlas/lar/src/perception/planarobstacles/potkf_tese/potkf_interface.h"



enum enum_state {SEARCHING,TRACKING,TARGET_LOST,INITIALISE};


typedef struct
{
    enum_state state;
    unsigned int target_id;
    double current_angle,current_distance;
    double velocity_module,velocity_angle;
    double predicted_angle,predicted_distance;
    double size;
    int life_time;
    int occluded_time;
    int classification;
}t_status;


typedef struct
{
    double start_angle;
    double end_angle;

    double start_range;
    double end_range;

    double min_size;
    double max_size;

    int min_life_time;
    int max_life_time;

}t_search_area;


int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
void potkf_handler(potkf_reduced_data_message*msg);
bool search_for_new_target(potkf_reduced_data_message*potkf_msg,t_status*status,t_search_area*area);
void init_search_area(t_search_area*area);
bool get_new_target_information(potkf_reduced_data_message*potkf_msg,t_status*status);
void foveationcontrol(t_status*status);
void print_status(t_status*status);
void foveationcontrol_home(void);

#ifdef _OT_CPP_

bool potkf_heartbeat;
TYPE_executionflags flags; //the command line parameters flags

#else

extern TYPE_executionflags flags;
extern bool potkf_heartbeat;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _MODULETEMPLATE_H_
#define _MODULETEMPLATE_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/moduletemplate_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in moduletemplate.c or preferably in moduletemplate_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(void);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _MODULETEMPLATE_CPP_ /*or _MODULETEMPLATE_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?


TYPE_executionflags flags; //the command line parameters flags
moduletemplate_data_message msg; //this is a structure
TYPE_moduletemplate_public_params params; //this is a structure

//creates a the default structure that will deal with retrieved parameters.
// explain fields (use a handler whenever a parameter changes)
// the values in the field moduletemplate_data_param_shared_var, from lar.ini, will be installed in var1
// the var type is an integer: CARMEN_PARAM_INT
carmen_param_t moduletemplate_local_parameters[] = {
    {(char*)"moduletemplate", (char*)"shared_var", CARMEN_PARAM_INT, &msg.var1, 1, _cast_to_carmen_param_change_handler_t_ handler_param_daemon}
    }; //prepare param struct
#else

extern TYPE_executionflags flags;
extern moduletemplate_data_message msg;
extern TYPE_moduletemplate_public_params params;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
x signal
x the type of signal sent, SIGINT etcr
signal signal recived
Returns:
void
Parameters:
x the type of signal sent, SIGINT is the only one handled
#ifndef _AGENTS_H_
#define _AGENTS_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

// #include <lar/agents_interface.h>
#include <lar/agents_interface.h>
#include <lar/agent_tracker_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################

typedef struct{
    int xbee_address;       
    double sleeptime;       
    double kp;      
} TYPE_agents_local_params;

//####################################################################
// Prototypes:  for private functions can be declared #################
// in agents.c or preferably in agents_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
void handler_distance_data(char *a, char *b, char *c);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _AGENTS_CPP_ /*or _AGENTS_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################

TYPE_executionflags flags; //the command line parameters flags
agents_data_message agents_message; //this is a structure
xbee_tx_data_message xbee_tx_message; //this is a structure
TYPE_agents_local_params local_params; //this is a structure for parameters intallation
agent_clearance_distance_data_message distance_data_msg;
double linear_speed, reference_distance, error;

#else

extern TYPE_executionflags flags;
extern agents_data_message agents_message; //this is a structure
extern xbee_tx_data_message xbee_tx_message; //this is a structure
extern TYPE_agents_local_params local_params;
extern agent_clearance_distance_data_message distance_data_msg;
extern double linear_speed, reference_distance, error;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _AGENT_BEHAVIOUR_H_
#define _AGENT_BEHAVIOUR_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/agent_behaviour_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in agent_behaviour.c or preferably in agent_behaviour_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _AGENT_BEHAVIOUR_CPP_ /*or _AGENT_BEHAVIOUR_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?


TYPE_executionflags flags; //the command line parameters flags
agent_behaviour_data_message msg; //this is a message structure
agent_behaviour_virtual_sensors_data_message virtual_sensors_data_msg; //this is a message structure
TYPE_agent_behaviour_public_params params; //this is a parameters structure
agents_data_message agents_message;

//creates a the default structure that will deal retrieve parameters.
// explain fields (use a handler whenever a parameter changes)
// var1 in this case is actually 
carmen_param_t agent_behaviour_params[] = {
    {(char*)"agents", (char*)"data_param_shared_var", CARMEN_PARAM_INT, &msg.var1, 1, handler_param_daemon}
    }; //prepare param struct
#else

extern TYPE_executionflags flags;
extern agent_behaviour_data_message msg;
extern agent_behaviour_virtual_sensors_data_message virtual_sensors_data_msg;
extern TYPE_agent_behaviour_public_params params;
extern agents_data_message agents_message;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _AGENT_CLEARANCE_H_
#define _AGENT_CLEARANCE_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/agent_clearance_interface.h>
#include "/usr/local/include/cvblobs/BlobResult.h"


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################
typedef struct{
    double sleeptime;       
} TYPE_agent_clearance_local_params;


//####################################################################
// Prototypes:  for private functions can be declared #################
// in agent_clearance.c or preferably in agent_clearance_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
void handler_rx_msg_received(void);
void arena_image_handler(camera_image_message *msg_firei);
void heartbeat_handler_n0(carmen_heartbeat_message *);
void get_image(IplImage *image);
void flood_fill_fixed_threshold(void);
void init_images(void);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _AGENT_CLEARANCE_CPP_


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################


TYPE_executionflags flags; //the command line parameters flags
agent_clearance_distance_data_message distance_message; //this is a message structure
TYPE_agent_clearance_local_params local_parameters; //this is a parameters structure
xbee_rx_data_message rx_message;

camera_image_message image_message;
int image_message_alloc;
char firei_n0_image_message_heartbeat;
int msecstowait;
int height, width;
double ts;

IplImage* img;
IplImage* gray;
IplImage* adapt_thresholded;
IplImage* fill_temp;
IplImage* filled;
IplImage* filled_final;
IplImage* tmp;
IplImage* image;
IplImage* border;
IplImage* lanemarkers;
IplImage* tophat_image;
IplImage* work_image;
IplImage* hsv;
IplImage* hue;
IplImage* saturation;
IplImage* value;
IplImage* hf;
IplImage* sf;
IplImage* vf;

//creates a the default structure that will deal retrieved parameters.
carmen_param_t agent_clearance_params[] = {
    {(char*)"agents", (char*)"sleeptime", CARMEN_PARAM_DOUBLE, &local_parameters.sleeptime, 1, NULL}}; //declared the install struct
    
#else

extern TYPE_executionflags flags;
extern agent_clearance_distance_data_message distance_message; //this is a message structure
extern TYPE_agent_clearance_local_params local_parameters;
extern xbee_rx_data_message rx_message;

extern int height, width;
extern char firei_n0_image_message_heartbeat;

extern IplImage* img;
extern IplImage* gray;
extern IplImage* adapt_thresholded;
extern IplImage* fill_temp;
extern IplImage* filled;
extern IplImage* filled_final;
extern IplImage* tmp;
extern IplImage* image;
extern IplImage* border;
extern IplImage* lanemarkers;
extern IplImage* tophat_image;
extern IplImage* work_image;
extern IplImage* hsv;
extern IplImage* hue;
extern IplImage* saturation;
extern IplImage* value;
extern IplImage* hf;
extern IplImage* sf;
extern IplImage* vf;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _AGENT_TRACKER_H_
#define _AGENT_TRACKER_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/agent_tracker_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in agent_tracker.c or preferably in agent_tracker_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _AGENT_TRACKER_CPP_ /*or _AGENT_TRACKER_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?


TYPE_executionflags flags; //the command line parameters flags
agent_tracker_data_message msg; //this is a message structure
agent_tracker_virtual_sensors_data_message virtual_sensors_data_msg; //this is a message structure
TYPE_agent_tracker_public_params params; //this is a parameters structure
agents_data_message agents_message;

//creates a the default structure that will deal retrieve parameters.
// explain fields (use a handler whenever a parameter changes)
// var1 in this case is actually 
carmen_param_t agent_tracker_params[] = {
    {(char*)"agents", (char*)"data_param_shared_var", CARMEN_PARAM_INT, &msg.var1, 1, handler_param_daemon}
    }; //prepare param struct
#else

extern TYPE_executionflags flags;
extern agent_tracker_data_message msg;
extern agent_tracker_virtual_sensors_data_message virtual_sensors_data_msg;
extern TYPE_agent_tracker_public_params params;
extern agents_data_message agents_message;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _PDHFFC_H_
#define _PDHFFC_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/pdhffc_interface.h>

#include "pdhffc_pid.h"
#include "pdhffc_templatetracking.h"


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in pdhffc.c or preferably in pdhffc_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void draw_cross(IplImage *dst, int x, int y, int r, int g, int b);
void draw_double_arrow(int x0, int y0, int x1, int y1, IplImage *dst, CvScalar color, int thickness, int line_type, int shift);
void draw_blind_zone(IplImage *dst, int target_x, int target_y, int bz_x, int bz_y, int r, int g, int b);
//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _PDHFFC_CPP_ /*or _PDHFFC_C_, depends on the file type*/

TYPE_executionflags flags; //the command line parameters flags
pdhffc_information_message msg;

carmen_ptucontrol_command_message ptucommand;
cTemplateTracking *TT;
camera_params_t cam0_params;
camera_params_t cam1_params;
#else


extern TYPE_executionflags flags;
extern pdhffc_information_message msg;
extern carmen_ptucontrol_command_message ptucommand;
extern cTemplateTracking *TT;
extern camera_params_t cam0_params;
extern camera_params_t cam1_params;
#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent, SIGINT etcr
x signal recieved
Returns:
void
#ifndef _TLHFCS_H_
#define _TLHFCS_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################


#include <lar/tlhfcs_interface.h>
#include <lar/tlcstm_messages.h>
#include <lar/soundplayer_interface.h>

#include "tlhfcs_init.h"



//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################

typedef struct
{
    char *filename;
    CvHaarClassifierCascade* classifier;
}TYPE_ligths_cascade;

typedef struct
{
    IplImage* img;
    char name[2500];
}TYPE_image;



typedef  struct{
    int red[3]; 
    int green[3];   
    int darkgreen[3];   
    int blue[3];    
    int darkblue[3];    
    int yellow[3];  
    int darkyellow[3];  
    int cyan[3];    
    int darkcyan[3];    
    int orange[3];  
    int magenta[3]; 
    int darkmagenta[3]; 
    int black[3];   
}TYPE_color;


typedef struct
{
    TYPE_image ligths;
    TYPE_image gui_ligths;
    TYPE_image gray;
    TYPE_image s_filter;
    TYPE_image v_filter;
    TYPE_image sand_v_filter;
    TYPE_image red_filter;
    TYPE_image green_filter;
    TYPE_image yellow_filter;
    TYPE_image detected_signs;
    CvSize img_size;
    CvSize sign_in_size;
}TYPE_ligths_imgs;

typedef struct
{
    int maxH;
    int minH;
    int maxS;
    int minS;
    int maxV;
    int minV;
}TYPE_hsv_limits;

typedef struct
{
    double max_color_ratio;
    double max_black_ratio;
    int sign_min_size;
    int sign_max_size;
    double color_obj;
    double bavg_obj;
    double err;
    double avg_around_color_min;
    double avg_around_color_max;

}TYPE_decision_limits;


#define MAX_OBJ 30

typedef struct
{
    TYPE_image srcRGB;
    TYPE_image gui_debug;
    TYPE_image possible_sign[MAX_OBJ];
    TYPE_image mask_p_sign[MAX_OBJ];
    TYPE_image vf[MAX_OBJ];

    CvRect roi[MAX_OBJ];

    double color_r[MAX_OBJ];
    double black_r[MAX_OBJ];
    double res[MAX_OBJ];

    double cratio_weigth;
    double bavg_weigth;

    int num_total;
    int selected;
    int previous_tot;

    TYPE_ligths_cascade cascade;

    TYPE_decision_limits decision_limits;
    int threshold_lim;
}TYPE_sign_analysis;

typedef struct
{
    double cratio_weigth;
    double bavg_weigth;

    TYPE_ligths_imgs imgs;

    TYPE_hsv_limits red_limits, green_limits, yellow_limits;

    TYPE_sign_analysis rc_analysis, gau_analysis, yal_analysis, yar_analysis, park_analysis;

    char use_angle;

    char heigth_updated;

}TYPE_ligths_analysis;



typedef struct
{
    double cofidence;
    int x;
    int y;
    int width;
    int height;
    char name[80];
    int sign;
    int* color_rec;
    int* color_str;
    double* color_r;
    double* black_r;
}TYPE_detected_sign;


//####################################################################
// Prototypes:  for private functions can be declared #################
// in tlhfcs.c or preferably in tlhfcs_functions.c  ##
//####################################################################
//int main(int argc, char **argv);
void shutdown_module(int x);
//void handler_param_daemon(char *a, char *b, char *c);

void heartbeat_handler_n0(carmen_heartbeat_message *heartbeat_msg);

void heartbeat_handler_n1(carmen_heartbeat_message *heartbeat_msg);

void heartbeat_handler_n2(carmen_heartbeat_message *heartbeat_msg);

void heartbeat_handler_n3(carmen_heartbeat_message *heartbeat_msg);

void handler_load_rc_haar_cascade(void);
void handler_load_gau_haar_cascade(void);
void handler_load_yal_haar_cascade(void);
void handler_load_yar_haar_cascade(void);
void handler_load_park_haar_cascade(void);

void handler_sign_in_height_update(void);
void handler_sign_size_update(void);
void handler_bavg_weight_update(void);
void handler_color_weight_update(void);

void detect_and_draw_objects( int, CvScalar);
void draw_cross(IplImage *src,int line,int column,int lenght, int *color);
void draw_gui_sign_data(TYPE_sign_analysis* SA, IplImage* src, int* lx, int* ly, int img_height, CvFont* tmp_font, int* color_line, int* color_text, char* sign_name, int search);

void detect_haar_signal(CvHaarClassifierCascade* classifier, TYPE_image* srcRGB,TYPE_sign_analysis* sign_analysis, TYPE_executionflags* flgs, int* color);

void color_segmentation(TYPE_hsv_limits* hsv_limits, const IplImage* srcRGB, IplImage* vf, double* ratio, double* b_avg,char debug, char* name);

void refresh_windows(void);
void init_color_table(TYPE_color* );

void find_tl_sign(TYPE_sign_analysis* sign_analysis, TYPE_hsv_limits*, int* color, TYPE_executionflags* flgs, char* name);

void get_image_from_camera3(void);
void init_color_values(void);
void get_image_from_camera3(void);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _TLHFCS_CPP_ /*or _TLHFCS_C_, depends on the file type*/



TYPE_detected_sign detected_sign;

TYPE_color color_table;

TYPE_executionflags flags; //the command line parameters flags
tlcstm_data_message tl_msg;
//TYPE_tlhfcs_public_params params;

TYPE_ligths_analysis LA;

camera_image_message c0;
int c0_alloc=1;
camera_image_message c1;
int c1_alloc=1;
camera_image_message c2;
int c2_alloc=1;
camera_image_message c3;
int c3_alloc=1;

char firei_n0_msg_heart_beat = 0;
char firei_n1_msg_heart_beat = 0;
char firei_n2_msg_heart_beat = 0;
char firei_n3_msg_heart_beat = 0;


soundplayer_command_message sound_msg;
tlcstm_command_message command;

char cascade_filename[1024];

double ts;
int cycle_freq;

c_videosaving* videosaving;
c_timer timer;

CvFont Font;
CvFont Font1;

IplImage* image_cam3 = cvCreateImage(LA.imgs.img_size, IPL_DEPTH_8U , 3);

char str0[20];
int centerx,centery;


carmen_param_t module_refresh_params[] = {
    {(char*)"freq", (char*)"tlhfcs", CARMEN_PARAM_INT, &cycle_freq, 1, NULL},
};

carmen_param_t colordetection_params[] = {
    {(char*)"cd", (char*)"red_H_max", CARMEN_PARAM_INT, &LA.red_limits.maxH, 1, NULL},
    {(char*)"cd", (char*)"red_H_min", CARMEN_PARAM_INT, &LA.red_limits.minH, 1, NULL},
    {(char*)"cd", (char*)"red_S_max", CARMEN_PARAM_INT, &LA.red_limits.maxS, 1, NULL},
    {(char*)"cd", (char*)"red_S_min", CARMEN_PARAM_INT, &LA.red_limits.minS, 1, NULL},
    {(char*)"cd", (char*)"red_V_max", CARMEN_PARAM_INT, &LA.red_limits.maxV, 1, NULL},
    {(char*)"cd", (char*)"red_V_min", CARMEN_PARAM_INT, &LA.red_limits.minV, 1, NULL},
    {(char*)"cd", (char*)"green_H_max", CARMEN_PARAM_INT, &LA.green_limits.maxH, 1, NULL},
    {(char*)"cd", (char*)"green_H_min", CARMEN_PARAM_INT, &LA.green_limits.minH, 1, NULL},
    {(char*)"cd", (char*)"green_S_max", CARMEN_PARAM_INT, &LA.green_limits.maxS, 1, NULL},
    {(char*)"cd", (char*)"green_S_min", CARMEN_PARAM_INT, &LA.green_limits.minS, 1, NULL},
    {(char*)"cd", (char*)"green_V_max", CARMEN_PARAM_INT, &LA.green_limits.maxV, 1, NULL},
    {(char*)"cd", (char*)"green_V_min", CARMEN_PARAM_INT, &LA.green_limits.minV, 1, NULL},
    {(char*)"cd", (char*)"yellow_H_max", CARMEN_PARAM_INT, &LA.yellow_limits.maxH, 1, NULL},
    {(char*)"cd", (char*)"yellow_H_min", CARMEN_PARAM_INT, &LA.yellow_limits.minH, 1, NULL},
    {(char*)"cd", (char*)"yellow_S_max", CARMEN_PARAM_INT, &LA.yellow_limits.maxS, 1, NULL},
    {(char*)"cd", (char*)"yellow_S_min", CARMEN_PARAM_INT, &LA.yellow_limits.minS, 1, NULL},
    {(char*)"cd", (char*)"yellow_V_max", CARMEN_PARAM_INT, &LA.yellow_limits.maxV, 1, NULL},
    {(char*)"cd", (char*)"yellow_V_min", CARMEN_PARAM_INT, &LA.yellow_limits.minV, 1, NULL},
    }; //prepare param struct

carmen_param_t tlhfcs_camera_params[] = {
    {(char*)"camera3", (char*)"imagewidth", CARMEN_PARAM_INT, &LA.imgs.img_size.width, 1, NULL},
    {(char*)"camera3", (char*)"imageheight", CARMEN_PARAM_INT, &LA.imgs.img_size.height, 1, NULL},
};//prepare param struct from the image that camera3 will give

carmen_param_t tlhfcs_params[] = {
    {(char*)"tlhfcs", (char*)"sign_in_height", CARMEN_PARAM_INT, &LA.imgs.sign_in_size.height, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_in_height_update},
    {(char*)"tlhfcs", (char*)"sign_min_size", CARMEN_PARAM_INT, &LA.rc_analysis.decision_limits.sign_min_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size_update},
    {(char*)"tlhfcs", (char*)"sign_max_size", CARMEN_PARAM_INT, &LA.rc_analysis.decision_limits.sign_max_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size_update},
    {(char*)"tlhfcs", (char*)"thresh_limit", CARMEN_PARAM_INT, &LA.rc_analysis.threshold_lim, 1, NULL},
    {(char*)"tlhfcs", (char*)"cratio_weigth", CARMEN_PARAM_DOUBLE, &LA.cratio_weigth, 1, _cast_to_carmen_param_change_handler_t_ handler_color_weight_update},
    {(char*)"tlhfcs", (char*)"bavg_weigth", CARMEN_PARAM_DOUBLE, &LA.bavg_weigth, 1, _cast_to_carmen_param_change_handler_t_ handler_bavg_weight_update},
    //-----------------------------------
    //params for Red Cross
    //-----------------------------------
    {(char*)"tlhfcs", (char*)"rc_cascade_path", CARMEN_PARAM_STRING, &LA.rc_analysis.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_rc_haar_cascade},
    {(char*)"tlhfcs", (char*)"rc_max_cratio", CARMEN_PARAM_DOUBLE, &LA.rc_analysis.decision_limits.max_color_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"rc_max_bratio", CARMEN_PARAM_DOUBLE, &LA.rc_analysis.decision_limits.max_black_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"rc_color_obj", CARMEN_PARAM_DOUBLE, &LA.rc_analysis.decision_limits.color_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"rc_bavg_obj", CARMEN_PARAM_DOUBLE, &LA.rc_analysis.decision_limits.bavg_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"rc_err", CARMEN_PARAM_DOUBLE, &LA.rc_analysis.decision_limits.err, 1, NULL},
    //-----------------------------------
    //params for Green Arrow Up
    //-----------------------------------
    {(char*)"tlhfcs", (char*)"gau_cascade_path", CARMEN_PARAM_STRING, &LA.gau_analysis.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_gau_haar_cascade},
    {(char*)"tlhfcs", (char*)"gau_max_cratio", CARMEN_PARAM_DOUBLE, &LA.gau_analysis.decision_limits.max_color_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"gau_max_bratio", CARMEN_PARAM_DOUBLE, &LA.gau_analysis.decision_limits.max_black_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"gau_color_obj", CARMEN_PARAM_DOUBLE, &LA.gau_analysis.decision_limits.color_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"gau_bavg_obj", CARMEN_PARAM_DOUBLE, &LA.gau_analysis.decision_limits.bavg_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"gau_err", CARMEN_PARAM_DOUBLE, &LA.gau_analysis.decision_limits.err, 1, NULL},
    //-----------------------------------
    //params for Yellow Arrow Left
    //-----------------------------------
    {(char*)"tlhfcs", (char*)"yal_cascade_path", CARMEN_PARAM_STRING, &LA.yal_analysis.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_yal_haar_cascade},
    {(char*)"tlhfcs", (char*)"yal_max_cratio", CARMEN_PARAM_DOUBLE, &LA.yal_analysis.decision_limits.max_color_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"yal_max_bratio", CARMEN_PARAM_DOUBLE, &LA.yal_analysis.decision_limits.max_black_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"yal_color_obj", CARMEN_PARAM_DOUBLE, &LA.yal_analysis.decision_limits.color_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"yal_bavg_obj", CARMEN_PARAM_DOUBLE, &LA.yal_analysis.decision_limits.bavg_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"yal_err", CARMEN_PARAM_DOUBLE, &LA.yal_analysis.decision_limits.err, 1, NULL},
    //-----------------------------------
    //params for Yellow Arrow Right
    //-----------------------------------
    {(char*)"tlhfcs", (char*)"yar_cascade_path", CARMEN_PARAM_STRING, &LA.yar_analysis.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_yar_haar_cascade},
    {(char*)"tlhfcs", (char*)"yar_max_cratio", CARMEN_PARAM_DOUBLE, &LA.yar_analysis.decision_limits.max_color_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"yar_max_bratio", CARMEN_PARAM_DOUBLE, &LA.yar_analysis.decision_limits.max_black_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"yar_color_obj", CARMEN_PARAM_DOUBLE, &LA.yar_analysis.decision_limits.color_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"yar_bavg_obj", CARMEN_PARAM_DOUBLE, &LA.yar_analysis.decision_limits.bavg_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"yar_err", CARMEN_PARAM_DOUBLE, &LA.yar_analysis.decision_limits.err, 1, NULL},
    //-----------------------------------
    //params for Park
    //-----------------------------------
    {(char*)"tlhfcs", (char*)"park_cascade_path", CARMEN_PARAM_STRING, &LA.park_analysis.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_park_haar_cascade},
    {(char*)"tlhfcs", (char*)"park_max_cratio", CARMEN_PARAM_DOUBLE, &LA.park_analysis.decision_limits.max_color_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"park_max_bratio", CARMEN_PARAM_DOUBLE, &LA.park_analysis.decision_limits.max_black_ratio, 1, NULL},
    {(char*)"tlhfcs", (char*)"park_color_obj", CARMEN_PARAM_DOUBLE, &LA.park_analysis.decision_limits.color_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"park_bavg_obj", CARMEN_PARAM_DOUBLE, &LA.park_analysis.decision_limits.bavg_obj, 1, NULL},
    {(char*)"tlhfcs", (char*)"park_err", CARMEN_PARAM_DOUBLE, &LA.park_analysis.decision_limits.err, 1, NULL},
};//prepare param struct for this module

#else

extern TYPE_executionflags flags;
extern tlcstm_data_message tl_msg;
extern TYPE_ligths_analysis LA;
extern CvFont Font;
extern CvFont Font1;
extern TYPE_color color_table;
extern TYPE_detected_sign detected_sign;
extern char cascade_filename[1024];

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent, SIGINT etcr
#ifndef _VSCSHFBA_H_
#define _VSCSHFBA_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################


#include <lar/vscshfba_interface.h>
#include <lar/tlcstm_messages.h>
#include <lar/soundplayer_interface.h>
#include <cvblobs/BlobResult.h>



//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


typedef struct
{
    char *filename;
    CvHaarClassifierCascade* classifier;
}TYPE_cascade;


typedef struct
{
    IplImage* img;
    char name[25];
}TYPE_image;


typedef struct
{
    IplImage* src;
    IplImage* gui;

    IplImage* hsv;

    IplImage* red_h;
    IplImage* red_s;
    IplImage* red_v;
    IplImage* red_h_bin;
    IplImage* red_h_bin2;
    IplImage* red_h_bin3;
    IplImage* red_s_bin;
    IplImage* red_v_bin;
    IplImage* red_mask;

    IplImage* white_h;
    IplImage* white_s;
    IplImage* white_v;
    IplImage* white_h_bin;
    IplImage* white_s_bin;
    IplImage* white_v_bin;
    IplImage* white_mask;

    IplImage* black_h;
    IplImage* black_s;
    IplImage* black_v;
    IplImage* black_h_bin;
    IplImage* black_s_bin;
    IplImage* black_v_bin;
    IplImage* black_mask;

    IplImage* blue_h;
    IplImage* blue_s;
    IplImage* blue_v;
    IplImage* blue_h_bin;
    IplImage* blue_s_bin;
    IplImage* blue_v_bin;
    IplImage* blue_mask;

    IplImage* tmp_h;
    IplImage* tmp_s;
    IplImage* tmp_v;

    CvSize imgs_size;
    CvSize look_sign_in_size;
    CvSize gui_size;
    int heigth_updated;
    int use_shm;
}TYPE_imgs;



typedef  struct{
    int red[3]; 
    int green[3];   
    int darkgreen[3];   
    int blue[3];    
    int darkblue[3];    
    int yellow[3];  
    int darkyellow[3];  
    int cyan[3];    
    int darkcyan[3];    
    int orange[3];  
    int magenta[3]; 
    int darkmagenta[3]; 
    int black[3];   
}TYPE_color;

typedef struct
{
    int num_hits;
    double tic;
    double main_color_ratio;
    double num_internal_spots;
    double confidence;
    double moments_ratio;
    int accepted;
    CvPoint center;
    CvRect region;
    IplImage* mask0;
    IplImage* mask1;
    IplImage* mask2;
    IplImage* tmp;
}TYPE_sign_data;

typedef struct
{
    CvSeq* sign_seq;
    CvMemStorage* memstorage;
    CvSize tol_area;
    TYPE_cascade cascade;
    TYPE_sign_data selected_sign; 

    int min_sign_size;
    int max_sign_size;
    int enclosing_size;
    int num_consecutive_hits;
    int aceptance_box;

    double color_obj;
    double color_err;
    double color_max;
    double moment_obj;
    double moment_err;
    double moment_max;
    double overall_confidence;

    char str[10][50];
    char name[10];
}TYPE_sign_analysis;


typedef struct
{
    double num_hits;    
    double color;       
    double moment;      
}TYPE_weights;

//####################################################################
// Prototypes:  for private functions can be declared #################
// in vscshfba.c or preferably in vscshfba_functions.c  ##
//####################################################################
//void handler_load_M1_haar_cascade(void);
void handler_load_W_N_cascade(void);
void handler_load_W_D_cascade(void);
void handler_load_M_B_cascade(void);
void handler_load_M_L_cascade(void);
void handler_load_I_60_cascade(void);
void handler_load_I_H_cascade(void);
void handler_sign_size(void);


void shutdown_module(int x);

void heartbeat_handler_n3(carmen_heartbeat_message *heartbeat_msg);
void handler_sign_in_height_update(void);
void init_color_table(TYPE_color* p);

//file vscshfba_functions.cpp
void detect_haar_signal(TYPE_sign_analysis* sign_analysis, IplImage* src, IplImage* dst, TYPE_executionflags* flgs, int* color_cross, int* color_box);
void set_imageROIs(TYPE_imgs* imgs, CvRect* roi, char flg_set_roi);
void check_mask_size(TYPE_sign_data* sign, CvSize* size);
void draw_cross(IplImage *src,int line,int column,int lenght, int *color);
void reset_imageROIs(TYPE_imgs* imgs);
void check_haar_feature_tic(TYPE_sign_analysis* sign_analysis, double* num_cycles);
void draw_gui_sign_data(IplImage* src, int* lx, int* ly, int img_height, CvFont* tmp_font, int* color_line, int* color_text, TYPE_sign_analysis* sign, int x_space);
void set_cam_params(int x);
void confirm_sign_tipology(TYPE_sign_analysis* sign_analysis, TYPE_imgs* imgs, TYPE_color_lim* color_lim, TYPE_weights* weights, TYPE_executionflags* flgs, int flg_ROIS);
void show_masks(TYPE_sign_analysis* sign_analysis, TYPE_executionflags* flgs, int* start_x_pos, int* start_y_pos, int step);

//functions prototype implemented in main file vscshfba.cpp
int get_image_from_camera3(IplImage* dst, int* update_size, int* heart_beat, CvSize* cap_img_size);
void set_cam_params(int x);

#define AVG(a, b) (((a)+(b))/2)
//#define MAX(a, b) ((a>b)? (a) : (b))
//#define MIN(a, b) ((a>b)? (b) : (a))
#define SET_RED_ROI 0b00000001
#define SET_WHITE_ROI 0b00000010
#define SET_BLACK_ROI 0b00000100
#define SET_BLUE_ROI 0b00001000
#define NUM_OF_CYCLES 10

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _VSCSHFBA_CPP_ /*or _VSCSHFBA_C_, depends on the file type*/


//TYPE_detected_sign detected_sign;

TYPE_cascade cascade;

TYPE_color color_table;

TYPE_acl_color_limits color_limits;


TYPE_sign_analysis W_DA, W_NA; 
TYPE_sign_analysis I_60A, I_HA; 
TYPE_sign_analysis M_BA, M_LA; 

TYPE_sign_data* sign_check;
TYPE_sign_data* accepted_sign;
char sign_name_detected[50];
char searching[50];
CvMoments cent_moments;

CBlobResult *blobs;
double res;     
char cascade_filename[1024];
double cycle_freq;
c_timer timer;
CvFont Font;
CvFont Font1;
CvFont Font2;

TYPE_imgs imgs;

int updated_size;
TYPE_weights weight;


int firei_n3_msg_heart_beat = 0;
double ts;
camera_image_message c3;
int c3_alloc=1;
IplImage* image_cam3 = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U , 3);


soundplayer_command_message sound_msg;
vscshfba_command_message command;
vscshfba_data_message vscshfba_msg;


TYPE_executionflags flags; //the command line parameters flags

c_videosaving* videosaving;


//write int gui image all info required
int lx=0;
int ly = 0;
int step = 0;

int wind_pos_x = 0;
int wind_pos_y = 0;

//char str0[40], str1[40];

IplConvKernel* morph_element;


carmen_param_t module_refresh_params[] = {
    {(char*)"freq", (char*)"vscshfba", CARMEN_PARAM_DOUBLE, &cycle_freq, 1, NULL},
};

carmen_param_t acl_colordetection_params[] = {
    {(char*)"acl", (char*)"red_H_max", CARMEN_PARAM_DOUBLE, &color_limits.red.maxH, 1, NULL},
    {(char*)"acl", (char*)"red_H_min", CARMEN_PARAM_DOUBLE, &color_limits.red.minH, 1, NULL},
    {(char*)"acl", (char*)"red_S_max", CARMEN_PARAM_DOUBLE, &color_limits.red.maxS, 1, NULL},
    {(char*)"acl", (char*)"red_S_min", CARMEN_PARAM_DOUBLE, &color_limits.red.minS, 1, NULL},
    {(char*)"acl", (char*)"red_V_max", CARMEN_PARAM_DOUBLE, &color_limits.red.maxV, 1, NULL},
    {(char*)"acl", (char*)"red_V_min", CARMEN_PARAM_DOUBLE, &color_limits.red.minV, 1, NULL},

    {(char*)"acl", (char*)"white_H_max", CARMEN_PARAM_DOUBLE, &color_limits.white.maxH, 1, NULL},
    {(char*)"acl", (char*)"white_H_min", CARMEN_PARAM_DOUBLE, &color_limits.white.minH, 1, NULL},
    {(char*)"acl", (char*)"white_S_max", CARMEN_PARAM_DOUBLE, &color_limits.white.maxS, 1, NULL},
    {(char*)"acl", (char*)"white_S_min", CARMEN_PARAM_DOUBLE, &color_limits.white.minS, 1, NULL},
    {(char*)"acl", (char*)"white_V_max", CARMEN_PARAM_DOUBLE, &color_limits.white.maxV, 1, NULL},
    {(char*)"acl", (char*)"white_V_min", CARMEN_PARAM_DOUBLE, &color_limits.white.minV, 1, NULL},

    {(char*)"acl", (char*)"black_H_max", CARMEN_PARAM_DOUBLE, &color_limits.black.maxH, 1, NULL},
    {(char*)"acl", (char*)"black_H_min", CARMEN_PARAM_DOUBLE, &color_limits.black.minH, 1, NULL},
    {(char*)"acl", (char*)"black_S_max", CARMEN_PARAM_DOUBLE, &color_limits.black.maxS, 1, NULL},
    {(char*)"acl", (char*)"black_S_min", CARMEN_PARAM_DOUBLE, &color_limits.black.minS, 1, NULL},
    {(char*)"acl", (char*)"black_V_max", CARMEN_PARAM_DOUBLE, &color_limits.black.maxV, 1, NULL},
    {(char*)"acl", (char*)"black_V_min", CARMEN_PARAM_DOUBLE, &color_limits.black.minV, 1, NULL},

    {(char*)"acl", (char*)"blue_H_max", CARMEN_PARAM_DOUBLE, &color_limits.blue.maxH, 1, NULL},
    {(char*)"acl", (char*)"blue_H_min", CARMEN_PARAM_DOUBLE, &color_limits.blue.minH, 1, NULL},
    {(char*)"acl", (char*)"blue_S_max", CARMEN_PARAM_DOUBLE, &color_limits.blue.maxS, 1, NULL},
    {(char*)"acl", (char*)"blue_S_min", CARMEN_PARAM_DOUBLE, &color_limits.blue.minS, 1, NULL},
    {(char*)"acl", (char*)"blue_V_max", CARMEN_PARAM_DOUBLE, &color_limits.blue.maxV, 1, NULL},
    {(char*)"acl", (char*)"blue_V_min", CARMEN_PARAM_DOUBLE, &color_limits.blue.minV, 1, NULL},
    }; 


carmen_param_t vscshfba_camera_params[] = {
    {(char*)"camera1", (char*)"imagewidth", CARMEN_PARAM_INT, &imgs.imgs_size.width, 1, NULL},
    {(char*)"camera1", (char*)"imageheight", CARMEN_PARAM_INT, &imgs.imgs_size.height, 1, NULL},

};

carmen_param_t vscshfba_params[] = {
    {(char*)"vscshfba", (char*)"sign_in_height", CARMEN_PARAM_INT, &updated_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_in_height_update},

    {(char*)"vscshfba", (char*)"weight_color", CARMEN_PARAM_DOUBLE, &weight.color, 1, NULL},
    {(char*)"vscshfba", (char*)"weight_moment", CARMEN_PARAM_DOUBLE, &weight.moment, 1, NULL},
    {(char*)"vscshfba", (char*)"weight_num_hits", CARMEN_PARAM_DOUBLE, &weight.num_hits, 1, NULL},

    //data for information recommended speed 60
    {(char*)"vscshfba", (char*)"info_60_color_obj", CARMEN_PARAM_DOUBLE, &I_60A.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"info_60_color_max", CARMEN_PARAM_DOUBLE, &I_60A.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"info_60_moment_obj", CARMEN_PARAM_DOUBLE, &I_60A.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"info_60_moment_max", CARMEN_PARAM_DOUBLE, &I_60A.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"info_60_aceptance", CARMEN_PARAM_DOUBLE, &I_60A.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"info_60_cascade", CARMEN_PARAM_STRING, &I_60A.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_I_60_cascade},

    //data for information hospital near
    {(char*)"vscshfba", (char*)"info_H_color_obj", CARMEN_PARAM_DOUBLE, &I_HA.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"info_H_color_max", CARMEN_PARAM_DOUBLE, &I_HA.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"info_H_moment_obj", CARMEN_PARAM_DOUBLE, &I_HA.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"info_H_moment_max", CARMEN_PARAM_DOUBLE, &I_HA.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"info_H_aceptance", CARMEN_PARAM_DOUBLE, &I_HA.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"info_H_cascade", CARMEN_PARAM_STRING, &I_HA.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_I_H_cascade},


    {(char*)"vscshfba", (char*)"mand_bus_color_obj", CARMEN_PARAM_DOUBLE, &M_BA.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_bus_color_max", CARMEN_PARAM_DOUBLE, &M_BA.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_bus_moment_obj", CARMEN_PARAM_DOUBLE, &M_BA.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_bus_moment_max", CARMEN_PARAM_DOUBLE, &M_BA.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_bus_aceptance", CARMEN_PARAM_DOUBLE, &M_BA.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_bus_cascade", CARMEN_PARAM_STRING, &M_BA.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_M_B_cascade},

    {(char*)"vscshfba", (char*)"mand_lights_color_obj", CARMEN_PARAM_DOUBLE, &M_LA.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_lights_color_max", CARMEN_PARAM_DOUBLE, &M_LA.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_lights_moment_obj", CARMEN_PARAM_DOUBLE, &M_LA.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_lights_moment_max", CARMEN_PARAM_DOUBLE, &M_LA.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_lights_aceptance", CARMEN_PARAM_DOUBLE, &M_LA.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"mand_lights_cascade", CARMEN_PARAM_STRING, &M_LA.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_M_L_cascade},

    {(char*)"vscshfba", (char*)"warn_dip_color_obj", CARMEN_PARAM_DOUBLE, &W_DA.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_dip_color_max", CARMEN_PARAM_DOUBLE, &W_DA.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_dip_moment_obj", CARMEN_PARAM_DOUBLE, &W_DA.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_dip_moment_max", CARMEN_PARAM_DOUBLE, &W_DA.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_dip_aceptance", CARMEN_PARAM_DOUBLE, &W_DA.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_dip_cascade", CARMEN_PARAM_STRING, &W_DA.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_W_D_cascade},

    {(char*)"vscshfba", (char*)"warn_narrow_color_obj", CARMEN_PARAM_DOUBLE, &W_NA.color_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_narrow_color_max", CARMEN_PARAM_DOUBLE, &W_NA.color_max, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_narrow_moment_obj", CARMEN_PARAM_DOUBLE, &W_NA.moment_obj, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_narrow_moment_max", CARMEN_PARAM_DOUBLE, &W_NA.moment_max, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_narrow_aceptance", CARMEN_PARAM_DOUBLE, &W_NA.overall_confidence, 1, NULL},
    {(char*)"vscshfba", (char*)"warn_narrow_cascade", CARMEN_PARAM_STRING, &W_NA.cascade.filename, 1, _cast_to_carmen_param_change_handler_t_ handler_load_W_N_cascade},

    {(char*)"vscshfba", (char*)"sign_min_size", CARMEN_PARAM_INT, &W_NA.min_sign_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size},
    {(char*)"vscshfba", (char*)"sign_max_size", CARMEN_PARAM_INT, &W_NA.max_sign_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size},

    {(char*)"vscshfba", (char*)"enclosing_size", CARMEN_PARAM_INT, &W_NA.enclosing_size, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size},
    {(char*)"vscshfba", (char*)"aceptance_box", CARMEN_PARAM_INT, &W_NA.aceptance_box, 1, _cast_to_carmen_param_change_handler_t_ handler_sign_size},
};

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent, SIGINT etcr
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
in,: x the type of intercepted signal, SIGINT
#ifndef _EGOMOTIONGPSIMU_H_
#define _EGOMOTIONGPSIMU_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/egomotiongpsimu_interface.h>
#include<amlpp/amlpp.h>
#include <gtk/gtk.h>

using namespace amlpp;

//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


// Class used to create the nonlinear observer objects
class Observer
{
    // the observer gains
    RealMatrix k11;
    RealMatrix k12;
   
    RealMatrix k21;
    RealMatrix k22; 
   
    RealMatrix k31;
    RealMatrix k32;

    RealMatrix Gain;
    RealMatrix GainWGPS;
    RealMatrix GainWOGPS;
   
    // the observer states 
    RealMatrix State;
    RealMatrix StateDot;
    RealMatrix Residual;
   
    // validity of the GPS measurement
    bool GPSisValid;
   
    //Transformation matrices
    RealMatrix R33_b2n;
    RealMatrix R33_n2b;
    RealMatrix T33_b2n;
       
  public:
    Observer();
    ~Observer(){};
    RealMatrix NlinObsStateUpdateV1(RealMatrix Measurements, Real Tb, Real deltaT);
    void NlinObsSetGain(); // set the Observer Gain
    void NlinObsChooseGainOnGPSValidity(bool GPSisValid); // Choose among applicable gains with and without GPS
    void NlinObsSetK(const char *ktype, double kval); // Set the individual Gain Matrices.
    void CalcRotationMatrix(double psi, double theta, double phi); // calculate the rotation matrix based on the Euler angles (Cardan Sequence)
    void NlinObsSetInitalCondition(RealMatrix Measurements);
};

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _EGOMOTIONGPSIMU_CPP_

//####################################################################
// Prototypes:  for private functions can be declared #################
// in egomotiongpsimu.c or preferably in egomotiongpsimu_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void shutdown_module_noIPC(int x);
void handler_param_daemon(char *a, char *b, char *c);

void drawGPSpoints(IplImage*img, int x, int y);
void drawEstimatedpoints(IplImage*img, int x, int y);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################

TYPE_executionflags flags; //the command line parameters flags
egomotiongpsimu_data_message msg; //this is a structure
TYPE_egomotiongpsimu_public_params params; //this is a structure

bool gprmc_update = FALSE;
bool gpgga_update = FALSE;
bool xsense_update = FALSE;
bool GPSisValid = FALSE;


//creates a the default structure that will deal with retrieved parameters.
// explain fields (use a handler whenever a parameter changes)
// the values in the field egomotiongpsimu_data_param_shared_var, from lar.ini, will be installed in var1
// the var type is an integer: CARMEN_PARAM_INT
// carmen_param_t egomotiongpsimu_local_parameters[] = {
//  {(char*)"egomotiongpsimu", (char*)"shared_var", CARMEN_PARAM_INT, &msg.var1, 1, handler_param_daemon}
//      }; //prepare param struct

#else 



extern TYPE_executionflags flags;
extern egomotiongpsimu_data_message msg;
extern TYPE_egomotiongpsimu_public_params params;
extern void shutdown_module(int x);

#ifdef _EGOMOTIONGPSIMU_FUNCTIONS_CPP_

Real g_arr[] = {0,0,-9.81}; // acceleration of gravity on a (North West Up) NWU reference frame
RealMatrix g(g_arr,3,1); // put the array into a matrix for further calculations


// #else
// extern components egointerface;
// extern void next_handler( GtkWidget *widget, gpointer   data );
// extern void previous_handler( GtkWidget *widget,gpointer   data );
// extern gboolean delete_event( GtkWidget *widget,GdkEvent  *event,gpointer   data );
// extern void destroy( GtkWidget *widget,gpointer   data );
// extern void createWindow();
// extern void createButtons();
// extern void layoutWidgets();
// extern void show();
// extern void draw_brush (GtkWidget *widget, gdouble x, gdouble y);
// extern gboolean expose_event( GtkWidget *widget, GdkEventExpose *event );
// extern gboolean configure_event( GtkWidget *widget, GdkEventConfigure *event );
// extern gboolean button_press_event( GtkWidget *widget, GdkEventButton *event );
// extern gboolean motion_notify_event( GtkWidget *widget, GdkEventMotion *event );
// extern void createDrawingArea();
 #endif

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _LASERPROJECTIONONIMAGE_H_
#define _LASERPROJECTIONONIMAGE_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/laserprojectiononimage_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in laserprojectiononimage.c or preferably in laserprojectiononimage_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
void project_pointcloud_to_image(xb3_3dpointcloud_message *pointcloud, int cam_number, double pan, double tilt, IplImage *dst, unsigned char r=255, unsigned char g=0,unsigned char b=0);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _LASERPROJECTIONONIMAGE_CPP_ /*or _LASERPROJECTIONONIMAGE_C_, depends on the file type*/


//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
//mike confusion, uses a message structure to install parameters. message and parameters should not be different?


TYPE_executionflags flags; //the command line parameters flags
camera_image_message msg_flea2;
IplImage* image;
camera_image_message msg_flea2_c1;
IplImage* image_c1;
xb3_3dpointcloud_message pointcloud_msg_hokuyo;
xb3_3dpointcloud_message pointcloud_msg_3dlaser;
carmen_ptucontrol_status_message ptu_status;
#else

extern TYPE_executionflags flags;
extern camera_image_message msg_flea2;
extern IplImage* image;
extern camera_image_message msg_flea2_c1;
extern IplImage* image_c1;
extern xb3_3dpointcloud_message pointcloud_msg_hokuyo;
extern xb3_3dpointcloud_message pointcloud_msg_3dlaser;
extern carmen_ptucontrol_status_message ptu_status;
#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
#ifndef _GPS_H_
#define _GPS_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         ##############################################
//####################################################################

//from gps-io.c
#include <lar/gps_interface.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>

//from old gps.h
#define MAX_NAME_LENGTH                256
#define MAX_COMMAND_LENGTH             256
#define EPSILON                     0.0001
#define TIMEOUT                         -1
#define WRONG                            0
#define OK                               1

//from old gps-io.c
#define DEFAULT_GPS_PORT      "/dev/ttyUSB0"
#define DEFAULT_GPS_BAUD      4800
#define DEFAULT_GPS_PARITY    NO
#define DEFAULT_GPS_DATABITS  8
#define DEFAULT_GPS_STOPBITS  1
#define DEFAULT_GPS_HWF       1
#define DEFAULT_GPS_SWF       0
#define BUFFER_LENGTH         512

//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ##############################
//####################################################################
enum PARITY_TYPE   { NO, EVEN, ODD };

typedef struct {
  char                       ttyport[MAX_NAME_LENGTH];
  int                        baud;
  enum PARITY_TYPE           parity;
  FILE *                     fp;
  int                        fd;
  int                        databits;
  int                        stopbits;
  int                        hwf;
  int                        swf;
} SerialDevice;

//####################################################################
// Prototypes:  for private functions can be declared ################
// in gps.c or preferably in gps_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);
int carmen_gps_parse_data( char * line, int num_chars );
void DEVICE_set_params( SerialDevice dev );
void DEVICE_set_baudrate( SerialDevice dev, int brate );
int DEVICE_connect_port( SerialDevice *dev );
int DEVICE_send( SerialDevice dev, unsigned char *cmd, int len );
int DECVICE_recieve( SerialDevice dev, unsigned char *cmd, int *len );
int DEVICE_read_data( SerialDevice dev );
int DEVICE_bytes_waiting( int sd );
void DEVICE_init_params( SerialDevice *p );


#ifdef _GPS_CPP_ /*or _GPS_C_, depends on the file type*/

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################

TYPE_executionflags flags; //the command line parameters flags
char* comport;
int baudrate;
gps_gpgga_data_message gpgga_msg; //this is a structure
gps_gprmc_data_message gprmc_msg; //this is a structure
gps_gpgga_data_message *gps_extern_gpgga_ptr; //this are pointers to the structure
gps_gprmc_data_message *gps_extern_gprmc_ptr; //this are pointers to the structure

carmen_param_t gps_params[] = {
    {(char*)"gps", (char*)"comport", CARMEN_PARAM_STRING, &comport, 0, NULL},
    {(char*)"gps", (char*)"baudrate", CARMEN_PARAM_INT, &baudrate, 0, NULL}
    }; //prepare param struct

#else

extern TYPE_executionflags flags;
extern gps_gpgga_data_message gpgga_msg; //this is a structure
extern gps_gprmc_data_message gprmc_msg; //this is a structure
extern gps_gpgga_data_message * gps_extern_gpgga_ptr;
extern gps_gprmc_data_message * gps_extern_gprmc_ptr;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent: SIGINT etc
interrupt signal
Returns:
void
#ifndef _XSENS_H_
#define _XSENS_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/xsens_interface.h>
#include <curses.h>
#include "cmtdef.h"
#include "xsens_time.h"
#include "xsens_list.h"
#include "cmtscan.h"
#include "cmt3.h"
#include "example_linux.h"
// this macro tests for an error and exits the program with a message if there was one
#define EXIT_ON_ERROR(res,comment) if (res != XRV_OK) { printw("Error %d occurred in " comment ": %s\n",res,xsensResultText(res)); exit(1); }

using namespace xsens;

//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################


//####################################################################
// Prototypes:  for private functions can be declared #################
// in xsens.c or preferably in xsens_functions.c  ##
//####################################################################
int main(int argc, char **argv);
void shutdown_module(int x);
void handler_param_daemon(char *a, char *b, char *c);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _XSENS_CPP_ /*or _XSENS_C_, depends on the file type*/

TYPE_executionflags flags; //the command line parameters flags
xsens_data_message data_msg;
// TYPE_xsens_public_params params;
char *comport;
Packet* packet;
xsens::Cmt3 cmt3; //create an xsens structure

carmen_param_t xsens_params[] = {
    {(char*)"xsens", (char*)"comport", CARMEN_PARAM_STRING, &comport, 0, NULL}
//  {(char*)"xsens", (char*)"comport", CARMEN_PARAM_STRING, &msg.comport, 0, NULL}
    }; //prepare param struct

#else

extern TYPE_executionflags flags;
extern xsens_data_message msg;
// extern TYPE_xsens_public_params params;
extern char *comport;
extern Packet* packet;
extern xsens::Cmt3 cmt3; //create an xsens structure

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent, SIGINT etcr
x the SIGNAL
Todo:
many modules use this. Should be an util library.
Parameters:
x the SIGNAL
Todo:
many modules use this. Should be an util library.
#ifndef _ACL_H_
#define _ACL_H_

#define _DO_NOT_USE_OPENCV_ 0
#define _DO_NOT_USE_CARMEN_ 0

//####################################################################
// Includes: no need to include headers from carmen modules carmen.h #
// already does         #####################################
//####################################################################

#include <lar/lar.h>
#include <lar/acl_interface.h>


//####################################################################
// Typedefs: required typedefs are declared here. All declared types #
// should have TYPE_[the name]          ###############################
//####################################################################
#define MAX_PTS 4
#define MAX_REGIONS 10
#define NUM_FOR_AVG_CALC 25

typedef struct
{
    double avg;
    double std;
    double minVal, maxVal;
}TYPE_color_values;


typedef struct {
    CvPoint pts[MAX_PTS];
    int num_pts;
    char name[20];
    TYPE_color_values h_values, v_values, s_values;
    IplImage* mask;
    IplImage* img_debug;

    CvMemStorage* mem_storage;
    CvSeq* hsv_lim_seq;
}TYPE_region;



typedef struct{
    TYPE_region* region[MAX_REGIONS];
    int num_regions;
    CvSize src_img_size;
    double times_std;
    double move_avg;

    IplImage* src;
    IplImage* gui;
    IplImage* hsv;
    IplImage* h;
    IplImage* s;
    IplImage* v;
}TYPE_pts_mask;

typedef struct
{
    double h_min;
    double h_max;
    double s_min;
    double s_max;
    double v_min;
    double v_max;
}TYPE_hsv_avg_std;

//####################################################################
// Prototypes:  for private functions can be declared #################
// in acl.c or preferably in acl_functions.c  ##
//####################################################################
void heartbeat_handler_n3(carmen_heartbeat_message *heartbeat_msg);
int main(int argc, char **argv);
void shutdown_module(int x);

void set_mask(IplImage* src, TYPE_region* region, TYPE_executionflags* flg);
void draw_bound(IplImage* src, TYPE_region* region);

int load_pts(char *file_name, TYPE_pts_mask* mask);
void get_values(char *str, TYPE_region* region, int start);
void read_line(FILE* buffer,char *line);

//####################################################################
// Global vars: They will be in the scope of modulename.c main's #####
// otherwise are declared extern #####################################
//####################################################################
#ifdef _ACL_CPP_ /*or _ACL_C_, depends on the file type*/

#define saturatemax(val,max) ((val)>(max) ?( max) :( val))
#define saturatemin(val,min) ((val)<(min) ?( min) :( val))
#define AVG(a,b) ((a+b)/2.0)


TYPE_pts_mask pts_mask;
TYPE_region* actual_region;
CvPoint pts[MAX_PTS];

TYPE_acl_color_limits color_limits;


TYPE_hsv_avg_std tmp_hsv_avg_std;


CvFont Font;

int num_pts=-1;

char filename[1024];
FILE* file_data;



camera_image_message c3;
int c3_alloc=1;

char firei_n3_msg_heart_beat = 0;

c_timer timer;
double ts;

int cycle_freq;

TYPE_executionflags flags; //the command line parameters flags
acl_data_message msg;

carmen_param_t module_refresh_params[] = {
    {(char*)"freq", (char*)"acl", CARMEN_PARAM_INT, &cycle_freq, 1, NULL},
};

carmen_param_t acl_camera_params[] = {
    {(char*)"camera3", (char*)"imagewidth", CARMEN_PARAM_INT, &pts_mask.src_img_size.width, 1, NULL},
    {(char*)"camera3", (char*)"imageheight", CARMEN_PARAM_INT, &pts_mask.src_img_size.height, 1, NULL},
};//prepare param struct from the image that camera3 will give

carmen_param_t acl_params[] = {
    {(char*)"acl", (char*)"times_std", CARMEN_PARAM_DOUBLE, &pts_mask.times_std, 1, NULL},
    {(char*)"acl", (char*)"move_avg", CARMEN_PARAM_DOUBLE, &pts_mask.move_avg, 1, NULL},
    }; //prepare param struct
#else

extern TYPE_executionflags flags;
extern acl_data_message msg;

#endif

#endif

Does a safe shutdown. Disconnects from IPC. Other modules could deallocate memory, disconnect from hardware etc.

Parameters:
x the type of signal sent, SIGINT etcr

makes a clean shutdown of the program

Disconnects from ipc and releases video writer

Parameters:
x Signal value. To shutdown signal must be SIGINT

References printc.

void simplify_data ( t_data data,
int  n 
)
void smooth_clusters ( t_cluster **  clusters,
int  size,
t_data data,
t_config config 
)
void spatial_moving_average_filter ( t_data data,
int  window_size,
t_config config 
)

Performes a limited moving average of the data vector.

Parameters:
data general data storage vector
window_size size of the moving average
config generic configuration data
Returns:
void
void textcolor ( int  attr,
int  fg,
int  bg 
)
int tictoc ( int  status  ) 
int timediff ( struct timeval  t1,
struct timeval  t2 
)
void update_tracks ( t_object_list **  list,
int  size 
)
void update_transition_matrix ( t_object_list **  ,
int   
)

Updates kalman matrices in each iteration.

Parameters:
list object containing the models to be iterated
size number of objects
Returns:
void

Variable Documentation

IplImage* img
carmen_laser_laser_message* lasermsg
CvVideoWriter* vid
float xv[NZEROS+1] [static]
float yv[NPOLES+1] [static]
Generated on Wed Jun 2 12:43:20 2010 for LAR Atlas by  doxygen 1.6.3