Log recording module
[Logging]

This module recordes messages sent via IPC into data files. The module is compromised of two diferent programs, logger and log_recorder. The logger works in the v1.0 log format (1 header file ASCII, 1 data file binary), the log_recorder works in the v2.0 log format (1 header XML, various data files, binary). More...

Collaboration diagram for Log recording module:

Data Structures

struct  TYPE_log
struct  logger_data_struct
class  logger

Files

file  logger.cpp
 

Main logger file.


file  logger.h
 

Main logger header, global vars, typedefs, parameters.


file  logger_functions.cpp
 

Various logger functions.


file  logger_functions.h
 

Header containing logger prototypes.


file  logger_types.h
 

WORK IN PROGRESS.


file  recorder.cpp
 

Main recorder file.


file  recorder.h
 

Main header.


file  recorder_common.h
 

Recorder common includes and type defs.


Defines

#define LAR_LASER_NAME   "lar_laser"
#define perr(a)   _perr(__FUNCTION__,__LINE__,(a));
 Custom error print function, this function prints a error message in the formagt: Error!! (__FUNCTION__,__LINE__) custom_message.
#define pwarn(a)   _pwarn(__FUNCTION__,__LINE__,(a));
 Custom warning print function, this function prints a warning message in the formagt: Warning!! (__FUNCTION__,__LINE__) custom_message.
#define pdeb(a)   _pdeb(__FUNCTION__,__LINE__,(a));
 Custom debug print function, this function prints a debug message in the formagt: Debug! (__FUNCTION__,__LINE__) custom_message.
#define p(a)   _p(a);
 Custom print function, this function prints a message in the formagt: MODULE_NAME (__FUNCTION__,__LINE__) custom_message.
#define null   NULL
 Same as NULL.
#define LOG_VERSION   "v2.11"
 Log_recorder version.
#define MESSAGE_TYPES_FILE   "messages.xml"
 File containing message types.

Functions

int main (int argc, char **argv)
void initialize_format (void)
 This functions initializes the format structure.
void shutdown_module (int sig)
 makes a clean shutdown of the program
void robot_motion_command_handler (robot_motion_command_message *motion_command)
 Handler for robot motion messages, when a message is recived it is saved to the log.
void robot_lights_command_handler (robot_lights_command_message *lights_command)
 Handler for robot lights messages, when a message is recived it is saved to the log.
void laser3d_pointcloud_handler (TYPE_laser3d_pointcloud_message *laser3d_message)
 Handler for laser3d point cloud messages, when a message is recived it is saved to the log.
void camera_n0_handler (camera_image_message *camera_n0)
 Handler for camera n0 messages, when a message is recived it is saved to the log.
void camera_n1_handler (camera_image_message *camera_n1)
 Handler for camera n1 messages, when a message is recived it is saved to the log.
void camera_n2_handler (camera_image_message *camera_n2)
 Handler for camera n2 messages, when a message is recived it is saved to the log.
void camera_n3_handler (camera_image_message *camera_n3)
 Handler for camera n3 messages, when a message is recived it is saved to the log.
void imu_handler (xsens_data_message *imu)
 Handler for imu messages, when a message is recived it is saved to the log.
void xb3_handler (xb3_3dpointcloud_message *xb3)
 Handler for xb3 messages, when a message is recived it is saved to the log.
void xb3_image_handler (xb3_stereoimage_message *xb3)
 Handler for xb3 image messages, when a message is recived it is saved to the log.
void hokuyo_point_cloud_handler (hokuyo_pointcloud_message *hokuyo)
 Handler for hokuyo_point_cloud messages, when a message is recived it is saved to the log.
void gpgga_handler (gps_gpgga_data_message *gpgga)
 Handler for gpgga messages, when a message is recived it is saved to the log.
void gprmc_handler (gps_gprmc_data_message *gprmc)
 Handler for gprmc messages, when a message is recived it is saved to the log.
void ipm_heartbeat_handler (void)
 Handler for ipm messages, when a message is recived it is saved to the log.
void camera_n3_heartbeat_handler (void)
 Handler for camera_n3 server messages, when a message is recived it is saved to the log.
void hokuyo_heartbeat_handler (void)
 Handler for hokuyo server messages, when a message is recived it is saved to the log.
void print_log_status (TYPE_log *log_param)
 This function indicates what messages will be logged.
void lar_unified_write_message (void *message, carmen_FILE *outfile, double timestamp, char *message_name, FORMATTER_PTR fmt)
 This function saves a message to a file in a byte array format, this uses the old standard in which each byte is recorder in hexadecimal format.
void auxfile_unified_write_message (void *message, carmen_FILE *outfile, carmen_FILE *datafile, double timestamp, char *message_name, FORMATTER_PTR fmt)
 This function saves a message to a file in a byte array format, this uses the new standard in which each message is recoded sequecialy in a separate file.
void lar_logwrite_write_header (carmen_FILE *outfile)
 This function writes the start of the logger file. (New standard only).
void manager_shutdown_module (int x)
void pusage (int argc, char **argv)
 Prints module usage.
void MessageCatcher (MSG_INSTANCE msgInstance, BYTE_ARRAY callData, void *)
 This function intercepts all messages recived by this module This function intercepts all messages recived by this module, fill the current message with data recived, adds this new message to the log header and writes the information to the respective log data file.
void _perr (const char *function_name, unsigned int line, const char *text)
void _pwarn (const char *function_name, unsigned int line, const char *text)
void _pdeb (const char *function_name, unsigned int line, const char *text)
void _p (const char *text)
xmlChar * ConvertInput (const char *in, const char *encoding)
void update_xpath_nodes (xmlNodeSetPtr nodes, const xmlChar *value)
void AddComment (xmlNodePtr node, const char *text)
 Add comment This function added a commengt to a XML doc tree.
 logger::logger ()
 Constructor for the logger class.
 logger::~logger ()
 Deconstructur for the logger class.
int logger::SetLogFiles (const char *filename)
 This function sets the log file that will be used This function checks if the filename passed by already exists and if so, the filename will be append with _A, if that file also exist we test the next char, and so on.
int logger::ReadFormatsFromFile (void)
 Read messages formats from a XML file.
void logger::InstallParameters (int argc, char **argv)
 This function install all recorder parameters This function mallocs the number of parameters corresponding to the message types in the MESSAGE_TYPES_FILE and install them. This function also sets the param deamon to allow unfound variables.
int logger::StartLog (void)
 This function start the log parser This function creates a new log parser and sets the begin of the XML log header.
int logger::WriteHeader (void)
 Write log header This function writes the log header, the header constains, list of sessions, list of sensors and list of messages.
int logger::WriteSession (void)
 Write session This function writes a log session onto a file. The log session contains the time and data of the log, the computer name, the session id, the start and end location, the driver of the car, car odometer information and weather conditions.
int logger::WriteSensorList (void)
 Write sensor list This function writes a sensor list onto the log.
int logger::WriteSensor (unsigned int number)
 Write a single sensor This function writes a single sensor into the log. Sensor are obtained using logger::GetSensors, sensor information contain: id, type, vendor, data interface, placement and if it a camera it also contains focal distance and resolution.
int logger::WriteMessageTypes (void)
 Write a list of all message types This function writes a list of all message types to be logged.
int logger::InitMessageLoging (void)
 Writes the begin of the messages element This function writes the begin of the messages element of the log.
int logger::AddMessage ()
 Addes a single message to the log header This function addes a new entry to the log header. Message format is m=message, t=message_type sp=start_position, l=length, c=comment.
int logger::GetSensors (void)
 This function obtains the list of sensors This function obtains the list of sensors to be used in this log, for now this is just a dummy function.
int logger::UpdateStatistics (void)
 Updade a posteriory statistics This function updates the log header with a posteriory statistics, it opens the file again parses it and updates the correct fields using Xpath.
void logger::SubscribeMessages ()
 Subscribe IPC Messages This function subscribes all the predefined message types.
int logger::CloseLog (void)
 Close Log file This function cleans the XML parser and dumps memory, it also closes all data files.

Variables

logger_data_struct logger_data []
TYPE_executionflags flags
 Include the interface.
TYPE_log log_param
carmen_FILE * outfile
carmen_FILE * datafile
double logger_starttime
char hokuyo_message_heartbeat
ipm_data_messageipm_data_msg
ipm_heartbeat_message ipm_heartbeat
camera_image_message camera_n3_server
carmen_laser_laser_message * hokuyo_message
carmen_param_t logger_params []
logger control
 Main log class control.
logger control
 Main log class control.

Detailed Description

This module recordes messages sent via IPC into data files. The module is compromised of two diferent programs, logger and log_recorder. The logger works in the v1.0 log format (1 header file ASCII, 1 data file binary), the log_recorder works in the v2.0 log format (1 header XML, various data files, binary).

Author:
jalmeida
Version:
2.11
Date:
18 May 2010

Define Documentation

#define LAR_LASER_NAME   "lar_laser"
#define LOG_VERSION   "v2.11"

Log_recorder version.

#define MESSAGE_TYPES_FILE   "messages.xml"

File containing message types.

Referenced by logger::ReadFormatsFromFile().

#define null   NULL

Same as NULL.

#define p (  )     _p(a);

Custom print function, this function prints a message in the formagt: MODULE_NAME (__FUNCTION__,__LINE__) custom_message.

#define pdeb (  )     _pdeb(__FUNCTION__,__LINE__,(a));

Custom debug print function, this function prints a debug message in the formagt: Debug! (__FUNCTION__,__LINE__) custom_message.

#define perr (  )     _perr(__FUNCTION__,__LINE__,(a));

Custom error print function, this function prints a error message in the formagt: Error!! (__FUNCTION__,__LINE__) custom_message.

#define pwarn (  )     _pwarn(__FUNCTION__,__LINE__,(a));

Custom warning print function, this function prints a warning message in the formagt: Warning!! (__FUNCTION__,__LINE__) custom_message.


Function Documentation

void _p ( const char *  text  ) 
void _pdeb ( const char *  function_name,
unsigned int  line,
const char *  text 
)
void _perr ( const char *  function_name,
unsigned int  line,
const char *  text 
)
void _pwarn ( const char *  function_name,
unsigned int  line,
const char *  text 
)
void AddComment ( xmlNodePtr  node,
const char *  text 
)

Add comment This function added a commengt to a XML doc tree.

Parameters:
nodes the parent node
text text to write in the comment

Referenced by logger::InitMessageLoging(), logger::WriteHeader(), logger::WriteMessageTypes(), logger::WriteSensorList(), and logger::WriteSession().

Here is the caller graph for this function:

int logger::AddMessage (  )  [inherited]
void auxfile_unified_write_message ( void *  message,
carmen_FILE *  outfile,
carmen_FILE *  datafile,
double  timestamp,
char *  message_name,
FORMATTER_PTR  fmt 
)

This function saves a message to a file in a byte array format, this uses the new standard in which each message is recoded sequecialy in a separate file.

Parameters:
message message to be recorded
outfile logger header file
datafile logger data file
timestamp time stamp to use
message_name name of the message
fmt format of the message, necessary to corvert to byte array
Returns:
void
void camera_n0_handler ( camera_image_message camera_n0  ) 

Handler for camera n0 messages, when a message is recived it is saved to the log.

Parameters:
camera_n0 message recived
Returns:
void
void camera_n1_handler ( camera_image_message camera_n1  ) 

Handler for camera n1 messages, when a message is recived it is saved to the log.

Parameters:
camera_n1 message recived
Returns:
void
void camera_n2_handler ( camera_image_message camera_n2  ) 

Handler for camera n2 messages, when a message is recived it is saved to the log.

Parameters:
camera_n2 message recived
Returns:
void
void camera_n3_handler ( camera_image_message camera_n3  ) 

Handler for camera n3 messages, when a message is recived it is saved to the log.

Parameters:
camera_n3 message recived
Returns:
void
void camera_n3_heartbeat_handler ( void   ) 

Handler for camera_n3 server messages, when a message is recived it is saved to the log.

Returns:
void
int logger::CloseLog ( void   )  [inherited]

Close Log file This function cleans the XML parser and dumps memory, it also closes all data files.

Returns:
return error, 0 means no error,

End Document

Free the writer

References logger::struct_file_handle::doc, logger::encoding, logger::file_handle, fp, i, logger::message_types, logger::struct_file_handle::name, perr, logger::rc, logger::SEQUENCIAL, logger::text, logger::total_message_types, logger::TREE, logger::write_mode, and logger::struct_file_handle::writer.

xmlChar* ConvertInput ( const char *  in,
const char *  encoding 
)
int logger::GetSensors ( void   )  [inherited]

This function obtains the list of sensors This function obtains the list of sensors to be used in this log, for now this is just a dummy function.

Returns:
return error, 0 means no error,

Todo:
Get sensors from a external XML list

References i, interface(), logger::number_sensors, and logger::sensors.

Here is the call graph for this function:

void gpgga_handler ( gps_gpgga_data_message gpgga  ) 

Handler for gpgga messages, when a message is recived it is saved to the log.

Parameters:
gpgga message recived
Returns:
void
void gprmc_handler ( gps_gprmc_data_message gprmc  ) 

Handler for gprmc messages, when a message is recived it is saved to the log.

Parameters:
gprmc message recived
Returns:
void
void hokuyo_heartbeat_handler ( void   ) 

Handler for hokuyo server messages, when a message is recived it is saved to the log.

Returns:
void
void hokuyo_point_cloud_handler ( hokuyo_pointcloud_message hokuyo  ) 

Handler for hokuyo_point_cloud messages, when a message is recived it is saved to the log.

Parameters:
hokuyo_point_cloud message recived
Returns:
void
void imu_handler ( xsens_data_message imu  ) 

Handler for imu messages, when a message is recived it is saved to the log.

Parameters:
imu message recived
Returns:
void
void initialize_format ( void   ) 

This functions initializes the format structure.

Returns:
void
int logger::InitMessageLoging ( void   )  [inherited]

Writes the begin of the messages element This function writes the begin of the messages element of the log.

Returns:
return error, 0 means no error,

Start MESSAGES

Flush the buffer

Messages

References AddComment(), logger::file_handle, logger::struct_file_handle::messages, perr, logger::rc, logger::struct_file_handle::root, logger::SEQUENCIAL, logger::session_id, logger::text, logger::TREE, logger::write_mode, and logger::struct_file_handle::writer.

Here is the call graph for this function:

void logger::InstallParameters ( int  argc,
char **  argv 
) [inherited]

This function install all recorder parameters This function mallocs the number of parameters corresponding to the message types in the MESSAGE_TYPES_FILE and install them. This function also sets the param deamon to allow unfound variables.

Parameters:
argc Argument count
argv Argument value

Allow unfound parametersg

Mallocs the paramets structure

Sets all parameters

Install the parameters

References i, logger::struct_message_types::log_message, logger::message_types, null, p, params, pwarn, logger::text, logger::total_message_types, and TRUE.

void ipm_heartbeat_handler ( void   ) 

Handler for ipm messages, when a message is recived it is saved to the log.

Returns:
void
void lar_logwrite_write_header ( carmen_FILE *  outfile  ) 

This function writes the start of the logger file. (New standard only).

Parameters:
outfile logger header file
Returns:
void
void lar_unified_write_message ( void *  message,
carmen_FILE *  outfile,
double  timestamp,
char *  message_name,
FORMATTER_PTR  fmt 
)

This function saves a message to a file in a byte array format, this uses the old standard in which each byte is recorder in hexadecimal format.

Parameters:
message message to be recorded
outfile logger file
timestamp time stamp to use
message_name name of the message
fmt format of the message, necessary to corvert to byte array
Returns:
void
void laser3d_pointcloud_handler ( TYPE_laser3d_pointcloud_message laser3d_message  ) 

Handler for laser3d point cloud messages, when a message is recived it is saved to the log.

Parameters:
laser3d_message message recived
Returns:
void
logger::logger (  )  [inherited]
int main ( int  argc,
char **  argv 
)

pusage tests the number of arguments and exits on a bad value printing the use of the module.

We must first set the log to were the data will be saved, this is preformed using SetLogFiles

Read XML file containing the message types that will be logged

Install the parameters corresponing to the message formats

set the handler for signals. Will handle ctrl+c (SIGINT) with a clean exit

Then we get a list of sensors that are being used

The startlog function opens the log file in the XML format and writes the first part of the header (XML format and encoding)

Then we use writeheader to complete the rest of the header part of the log, list of sessions, list of sensors and list of message types

The function initmessageloging will write the first part of the messages log, just the opening of the messages element

Now that we are ready to recive data we subscribe all the messages

Get log start time

And main carmen_ipc_sleep cicle begins

void manager_shutdown_module ( int  x  ) 
void MessageCatcher ( MSG_INSTANCE  msgInstance,
BYTE_ARRAY  callData,
void *   
)

This function intercepts all messages recived by this module This function intercepts all messages recived by this module, fill the current message with data recived, adds this new message to the log header and writes the information to the respective log data file.

Parameters:
msgInstance Message instance passed by the IPC.
callData Byte array containing a marsheld message.
clientData Not used.

Referenced by logger::SubscribeMessages().

Here is the caller graph for this function:

void print_log_status ( TYPE_log log_param  ) 

This function indicates what messages will be logged.

Parameters:
log_param log parameters strucutre
Returns:
void
void pusage ( int  argc,
char **  argv 
)

Prints module usage.

Parameters:
argc argument count as recived by the program
argv argument value as recived by the program Is the number of arguments is diferent from 2 we print a error message and usage.
int logger::ReadFormatsFromFile ( void   )  [inherited]

Read messages formats from a XML file.

XPath context

XPath object

Get the message type file version

Get version

Remove the leter v form vX.XX and pass the number to message types file version

Get the message number

Get total number of messages types

Alloc message types

Get all names

Get all formats

Complete the rest of the fields

Cleanup of XPath data

dump the resulting document

free the document

References logger::struct_message_types::data_file, logger::struct_file_handle::doc, logger::encoding, FALSE, logger::file_handle, logger::struct_file_handle::folder, format, logger::struct_message_types::formatter, fp, logger::struct_message_types::fp, i, logger::struct_message_types::log_message, logger::log_version, logger::message_types, MESSAGE_TYPES_FILE, logger::mtf_version, logger::struct_file_handle::name, logger::struct_message_types::name, perr, pwarn, logger::struct_file_handle::short_name, t, logger::text, logger::total_message_types, logger::struct_message_types::total_messages, logger::struct_file_handle::xpathCtx, and logger::struct_file_handle::xpathObj.

void robot_lights_command_handler ( robot_lights_command_message lights_command  ) 

Handler for robot lights messages, when a message is recived it is saved to the log.

Parameters:
lights_command message recived
Returns:
void
void robot_motion_command_handler ( robot_motion_command_message motion_command  ) 

Handler for robot motion messages, when a message is recived it is saved to the log.

Parameters:
motion_command message recived
Returns:
void
int logger::SetLogFiles ( const char *  name  )  [inherited]

This function sets the log file that will be used This function checks if the filename passed by already exists and if so, the filename will be append with _A, if that file also exist we test the next char, and so on.

Parameters:
name name of the main log file
Returns:
- this function returns always 1 and crc field at msg structure

References logger::file_handle, logger::struct_file_handle::folder, fp, i, logger::struct_file_handle::name, p, logger::struct_file_handle::short_name, logger::struct_file_handle::stripedname, and logger::tmp.

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
int logger::StartLog ( void   )  [inherited]

This function start the log parser This function creates a new log parser and sets the begin of the XML log header.

Returns:
return error, 0 means no error,

Start the writer

Use indent on XML

Start LOG

Set logid

Set logid

Create new DOM

Set root node with attributes

References logger::compression, logger::struct_file_handle::doc, logger::encoding, logger::file_handle, LOG_VERSION, logger::struct_file_handle::name, perr, logger::rc, logger::struct_file_handle::root, logger::SEQUENCIAL, logger::TREE, TRUE, logger::write_mode, and logger::struct_file_handle::writer.

void logger::SubscribeMessages ( void   )  [inherited]

Subscribe IPC Messages This function subscribes all the predefined message types.

References i, logger::message_types, MessageCatcher(), null, and logger::total_message_types.

Here is the call graph for this function:

void update_xpath_nodes ( xmlNodeSetPtr  nodes,
const xmlChar *  value 
)
int logger::UpdateStatistics ( void   )  [inherited]

Updade a posteriory statistics This function updates the log header with a posteriory statistics, it opens the file again parses it and updates the correct fields using Xpath.

Returns:
return error, 0 means no error,

Change the total message number corresponding to this specific type of message

Change the mean_mps corresponding to this specific type of message

References logger::struct_file_handle::doc, logger::encoding, logger::file_handle, i, logger::log_start_time, logger::message_types, logger::struct_file_handle::name, perr, logger::text, logger::total_message_types, logger::total_number_messages, update_xpath_nodes(), logger::struct_file_handle::xpathCtx, and logger::struct_file_handle::xpathObj.

Here is the call graph for this function:

int logger::WriteHeader ( void   )  [inherited]

Write log header This function writes the log header, the header constains, list of sessions, list of sensors and list of messages.

Returns:
return error, 0 means no error,

Start Header

End Header

Flush the buffer

References AddComment(), logger::file_handle, logger::struct_file_handle::header, perr, logger::rc, logger::struct_file_handle::root, logger::SEQUENCIAL, logger::TREE, logger::write_mode, logger::WriteMessageTypes(), logger::struct_file_handle::writer, logger::WriteSensorList(), and logger::WriteSession().

Here is the call graph for this function:

int logger::WriteMessageTypes ( void   )  [private, inherited]

Write a list of all message types This function writes a list of all message types to be logged.

Returns:
return error, 0 means no error,

Start MESSAGE_TYPES

Start M_TYPE

Add message type id

Add the type name

Add the format

Add the data file

End M_TYPE

End MESSAGE_TYPES

Message typesg

Total number of messsages

Add message type id

Add the type name

Add the format

Add the data file

Total number of messsages

Add the data file

References AddComment(), logger::struct_message_types::data_file, logger::file_handle, format, logger::struct_message_types::format, logger::struct_file_handle::header, i, logger::message_types, logger::struct_file_handle::messages_types, logger::struct_message_types::name, logger::node, perr, logger::rc, logger::SEQUENCIAL, logger::text, logger::total_message_types, logger::struct_file_handle::total_messages, logger::struct_file_handle::total_messages_type, logger::total_number_messages, logger::TREE, logger::write_mode, and logger::struct_file_handle::writer.

Referenced by logger::WriteHeader().

Here is the call graph for this function:

Here is the caller graph for this function:

int logger::WriteSensor ( unsigned int  number  )  [private, inherited]

Write a single sensor This function writes a single sensor into the log. Sensor are obtained using logger::GetSensors, sensor information contain: id, type, vendor, data interface, placement and if it a camera it also contains focal distance and resolution.

Parameters:
number sensor id number
Returns:
return error, 0 means no error,

Start SENSOR

End SENSOR

References logger::file_handle, logger::struct_sensor::id, interface(), logger::struct_sensor::interface, perr, logger::rc, logger::struct_file_handle::sensor_list, logger::sensors, logger::SEQUENCIAL, logger::TREE, logger::struct_sensor::type, logger::struct_sensor::vendor, logger::write_mode, and logger::struct_file_handle::writer.

Referenced by logger::WriteSensorList().

Here is the call graph for this function:

Here is the caller graph for this function:

int logger::WriteSensorList ( void   )  [private, inherited]

Write sensor list This function writes a sensor list onto the log.

Returns:
return error, 0 means no error,

Start SENSOR_LIST

End SENSOR_LIST

Sensor list

References AddComment(), logger::file_handle, logger::struct_file_handle::header, i, logger::number_sensors, perr, logger::rc, logger::struct_file_handle::sensor_list, logger::SEQUENCIAL, logger::TREE, logger::write_mode, logger::struct_file_handle::writer, and logger::WriteSensor().

Referenced by logger::WriteHeader().

Here is the call graph for this function:

Here is the caller graph for this function:

int logger::WriteSession ( void   )  [private, inherited]

Write session This function writes a log session onto a file. The log session contains the time and data of the log, the computer name, the session id, the start and end location, the driver of the car, car odometer information and weather conditions.

Returns:
return error, 0 means no error,

Get date

Start SESSION

Start WEATHER_CONDITION

End WEATHER_CONDITION

End SESSION

Session

Weather

References AddComment(), logger::file_handle, logger::struct_file_handle::header, perr, logger::rc, logger::struct_file_handle::root, logger::SEQUENCIAL, logger::session_id, logger::text, tm, logger::TREE, logger::write_mode, and logger::struct_file_handle::writer.

Referenced by logger::WriteHeader().

Here is the call graph for this function:

Here is the caller graph for this function:

void xb3_handler ( xb3_3dpointcloud_message xb3  ) 

Handler for xb3 messages, when a message is recived it is saved to the log.

Parameters:
xb3 message recived
Returns:
void
void xb3_image_handler ( xb3_stereoimage_message xb3  ) 

Handler for xb3 image messages, when a message is recived it is saved to the log.

Parameters:
xb3 message recived
Returns:
void
logger::~logger (  )  [inherited]

Deconstructur for the logger class.


Variable Documentation

Main log class control.

Main log class control.

carmen_FILE* datafile

Include the interface.

#ifndef _FOVEATIONCONTROL_INTERFACE_H_
#define _FOVEATIONCONTROL_INTERFACE_H_

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

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

//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################
typedef TYPE_xbcameratmatrix_params TYPE_foveationcontrolmatrix_params;

//####################################################################
// Prototypes:  public functions can be declared here  ################
//####################################################################

int foveationcontrol_publish_pointto_xyz(foveationcontrol_pointto_xyz_message *msg);
int foveationcontrol_subscribe_pointto_xyz(foveationcontrol_pointto_xyz_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);
void param_daemon_install_foveationcontrolmatrix_params(TYPE_foveationcontrolmatrix_params *p, int subscribe_changes, int verbose);

#endif

#ifndef _LAR_H_
#define _LAR_H_

#define PFLN {printf("DEBUG PRINT FILE %s LINE %d\n",__FILE__,__LINE__);}
#define PLN {printf("DEBUG PRINT LINE %d\n",__LINE__);}

#define PVV(a) {printf("DEBUG PRINT FILE %s LINE %d value = %d\n",__FILE__, __LINE__,(int)(a));}
#define _cast_to_carmen_param_change_handler_t_ (void (*)(char*, char*,char*))

#define printc(a,b) {printf("%c[1;%d;48m", 0x1B, (b) +30);printf(a);printf("\33[0m");fflush(stdout);}
#define printnc(a,b,c) {printf("%c[1;%d;48m", 0x1B, (c) +30);printf(a,b);printf("\33[0m");fflush(stdout);}

#include <sys/ipc.h> //System includes to use shared mem
#include <sys/shm.h> //System includes to use shared mem

using namespace std;
#include <iostream>

#if (! _DO_NOT_USE_OPENCV_) /*opencv includes*/
  #include <opencv/cv.h>
  #include <opencv/cxcore.h>
  #include <opencv/highgui.h>
  #include <opencv/cvaux.h>
#endif

#if (! _DO_NOT_USE_CARMEN_ ) /*carmen includes*/
  #include <carmen/carmen.h>
#endif


//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################

typedef struct {
    int send;           
    double timestamp;   
    char *host;         
}global_dummy_message;


typedef struct {
    int shm_id;         
    int shm_size;       
    double timestamp;   
    char *host;         
}global_shminfo_message;

//####################################################################
// LAR includes:        ##############################################
//####################################################################


#include <lar/timer.h>
#include <lar/pixelaccess.h>
#include <lar/errorhandling.h>
#include <lar/readcommandlineparameters.h>
#include <lar/lensundistort.h>
#include <lar/videosaving.h>
#include <lar/imageprocessing.h>
#include <lar/acl_interface.h>
#include <lar/crc.h>

#include <lar/moduletemplate_interface.h>

#include <lar/xbee_interface.h>
#include <lar/ptucontrol_interface.h>
#include <lar/atlas2000_interface.h>
#include <lar/atlasmv_interface.h>
#include <lar/powermanager_interface.h>
#include <lar/des70_10.h>


#include <lar/soundplayer_interface.h>
#include <lar/soundplayer_messages.h>
#include <lar/processcontrol_interface.h>
#include <lar/processcontrol_messages.h>

#include <lar/gps_interface.h>

#include <lar/xsens_interface.h>

#include <lar/firei_interface.h>
#include <lar/flea2_interface.h>
#include <lar/xb3_interface.h>

//this must be after the xb3_interface
#include <lar/foveationcontrol_interface.h>

#include <lar/hokuyo_utm_interface.h>
#include <lar/laser3d_interface.h>


#include <lar/ipm_interface.h>
#include <lar/egomotiongpsimu_interface.h>

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

#include <lar/cdltm_interface.h>
//#include <lar/lmssp_interface.h>
#include <lar/rtbm_interface.h>

#include <lar/potkf_interface.h>

#include <lar/tlcstm_interface.h>
#include <lar/cwtm_interface.h>
#include <lar/tlhfcs_interface.h>
#include <lar/pdtm_interface.h>
#include <lar/cwpc_interface.h>
#include <lar/vscshfba_interface.h>

#include <lar/cm_interface.h>


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


#include <lar/roc_interface.h>

#endif

Include global headers.

#ifndef _POWERMANAGER_INTERFACE_H_
#define _POWERMANAGER_INTERFACE_H_

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

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

//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################


typedef enum {
            Y0_LAS0 = 130,
            Y1_PTU,
            Y2_R1394_0,
            Y3_BUMBLEBEE,
            Y4_NA,
            Y5_NA,
            Y6_NA,
            Y7_NA,
            Y10_ROUTER,
            Y11_SWITCH,
            Y12_GPS,
            Y13_NA
            }ENUM_plc_outputs;

//####################################################################
// Prototypes:  public functions can be declared here  ################
//####################################################################

int powermanager_publish_status(powermanager_status_message *msg);
int powermanager_subscribe_status(powermanager_status_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);
int powermanager_turn_on(ENUM_plc_outputs output);
int powermanager_turn_off(ENUM_plc_outputs output);
int powermanager_reset(ENUM_plc_outputs output);
int powermanager_subscribe_command(powermanager_command_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);


#endif

#ifndef _LAR_H_
#define _LAR_H_

#define PFLN {printf("DEBUG PRINT FILE %s LINE %d\n",__FILE__,__LINE__);}
#define PLN {printf("DEBUG PRINT LINE %d\n",__LINE__);}

#define PVV(a) {printf("DEBUG PRINT FILE %s LINE %d value = %d\n",__FILE__, __LINE__,(int)(a));}
#define _cast_to_carmen_param_change_handler_t_ (void (*)(char*, char*,char*))

#define printc(a,b) {printf("%c[1;%d;48m", 0x1B, (b) +30);printf(a);printf("\33[0m");fflush(stdout);}
#define printnc(a,b,c) {printf("%c[1;%d;48m", 0x1B, (c) +30);printf(a,b);printf("\33[0m");fflush(stdout);}

#include <sys/ipc.h> //System includes to use shared mem
#include <sys/shm.h> //System includes to use shared mem

using namespace std;
#include <iostream>

#if (! _DO_NOT_USE_OPENCV_) /*opencv includes*/
  #include <opencv/cv.h>
  #include <opencv/cxcore.h>
  #include <opencv/highgui.h>
  #include <opencv/cvaux.h>
#endif

#if (! _DO_NOT_USE_CARMEN_ ) /*carmen includes*/
  #include <carmen/carmen.h>
#endif


//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################

typedef struct {
    int send;           
    double timestamp;   
    char *host;         
}global_dummy_message;


typedef struct {
    int shm_id;         
    int shm_size;       
    double timestamp;   
    char *host;         
}global_shminfo_message;

//####################################################################
// LAR includes:        ##############################################
//####################################################################


#include <lar/timer.h>
#include <lar/pixelaccess.h>
#include <lar/errorhandling.h>
#include <lar/readcommandlineparameters.h>
#include <lar/lensundistort.h>
#include <lar/videosaving.h>
#include <lar/imageprocessing.h>
#include <lar/acl_interface.h>
#include <lar/crc.h>

#include <lar/moduletemplate_interface.h>

#include <lar/xbee_interface.h>
#include <lar/ptucontrol_interface.h>
#include <lar/atlas2000_interface.h>
#include <lar/atlasmv_interface.h>
#include <lar/powermanager_interface.h>
#include <lar/des70_10.h>


#include <lar/soundplayer_interface.h>
#include <lar/soundplayer_messages.h>
#include <lar/processcontrol_interface.h>
#include <lar/processcontrol_messages.h>

#include <lar/gps_interface.h>

#include <lar/xsens_interface.h>

#include <lar/firei_interface.h>
#include <lar/flea2_interface.h>
#include <lar/xb3_interface.h>

//this must be after the xb3_interface
#include <lar/foveationcontrol_interface.h>

#include <lar/hokuyo_utm_interface.h>
#include <lar/laser3d_interface.h>


#include <lar/ipm_interface.h>
#include <lar/egomotiongpsimu_interface.h>

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

#include <lar/cdltm_interface.h>
//#include <lar/lmssp_interface.h>
#include <lar/rtbm_interface.h>

#include <lar/potkf_interface.h>

#include <lar/tlcstm_interface.h>
#include <lar/cwtm_interface.h>
#include <lar/tlhfcs_interface.h>
#include <lar/pdtm_interface.h>
#include <lar/cwpc_interface.h>
#include <lar/vscshfba_interface.h>

#include <lar/cm_interface.h>


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


#include <lar/roc_interface.h>

#endif

Include global headers.

#ifndef _XBEE_INTERFACE_H_
#define _XBEE_INTERFACE_H_

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

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

//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################
typedef struct{
    double sleeptime;       
    char otherparam;        
} TYPE_xbee_public_params;

//####################################################################
// Prototypes:  public functions can be declared here  ################
//####################################################################

int xbee_publish_rx_data(xbee_rx_data_message *msg);
int xbee_subscribe_rx_data(xbee_rx_data_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);
int xbee_publish_tx_data(xbee_tx_data_message *msg);
int xbee_subscribe_tx_data(xbee_tx_data_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);
void xbee_param_daemon_install_public_parameters(TYPE_xbee_public_params *p, int subscribe_changes, int verbose);

#endif

#ifndef _LAR_H_
#define _LAR_H_

#define PFLN {printf("DEBUG PRINT FILE %s LINE %d\n",__FILE__,__LINE__);}
#define PLN {printf("DEBUG PRINT LINE %d\n",__LINE__);}

#define PVV(a) {printf("DEBUG PRINT FILE %s LINE %d value = %d\n",__FILE__, __LINE__,(int)(a));}
#define _cast_to_carmen_param_change_handler_t_ (void (*)(char*, char*,char*))

#define printc(a,b) {printf("%c[1;%d;48m", 0x1B, (b) +30);printf(a);printf("\33[0m");fflush(stdout);}
#define printnc(a,b,c) {printf("%c[1;%d;48m", 0x1B, (c) +30);printf(a,b);printf("\33[0m");fflush(stdout);}

#include <sys/ipc.h> //System includes to use shared mem
#include <sys/shm.h> //System includes to use shared mem

using namespace std;
#include <iostream>

#if (! _DO_NOT_USE_OPENCV_) /*opencv includes*/
  #include <opencv/cv.h>
  #include <opencv/cxcore.h>
  #include <opencv/highgui.h>
  #include <opencv/cvaux.h>
#endif

#if (! _DO_NOT_USE_CARMEN_ ) /*carmen includes*/
  #include <carmen/carmen.h>
#endif


//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################

typedef struct {
    int send;           
    double timestamp;   
    char *host;         
}global_dummy_message;


typedef struct {
    int shm_id;         
    int shm_size;       
    double timestamp;   
    char *host;         
}global_shminfo_message;

//####################################################################
// LAR includes:        ##############################################
//####################################################################


#include <lar/timer.h>
#include <lar/pixelaccess.h>
#include <lar/errorhandling.h>
#include <lar/readcommandlineparameters.h>
#include <lar/lensundistort.h>
#include <lar/videosaving.h>
#include <lar/imageprocessing.h>
#include <lar/acl_interface.h>
#include <lar/crc.h>

#include <lar/moduletemplate_interface.h>

#include <lar/xbee_interface.h>
#include <lar/ptucontrol_interface.h>
#include <lar/atlas2000_interface.h>
#include <lar/atlasmv_interface.h>
#include <lar/powermanager_interface.h>
#include <lar/des70_10.h>


#include <lar/soundplayer_interface.h>
#include <lar/soundplayer_messages.h>
#include <lar/processcontrol_interface.h>
#include <lar/processcontrol_messages.h>

#include <lar/gps_interface.h>

#include <lar/xsens_interface.h>

#include <lar/firei_interface.h>
#include <lar/flea2_interface.h>
#include <lar/xb3_interface.h>

//this must be after the xb3_interface
#include <lar/foveationcontrol_interface.h>

#include <lar/hokuyo_utm_interface.h>
#include <lar/laser3d_interface.h>


#include <lar/ipm_interface.h>
#include <lar/egomotiongpsimu_interface.h>

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

#include <lar/cdltm_interface.h>
//#include <lar/lmssp_interface.h>
#include <lar/rtbm_interface.h>

#include <lar/potkf_interface.h>

#include <lar/tlcstm_interface.h>
#include <lar/cwtm_interface.h>
#include <lar/tlhfcs_interface.h>
#include <lar/pdtm_interface.h>
#include <lar/cwpc_interface.h>
#include <lar/vscshfba_interface.h>

#include <lar/cm_interface.h>


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


#include <lar/roc_interface.h>

#endif

Include global headers.

#ifndef _MODULETEMPLATE_INTERFACE_H_
#define _MODULETEMPLATE_INTERFACE_H_

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

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

//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################
typedef struct{
    double sleeptime;       
    char otherparam;        
} TYPE_moduletemplate_public_params;

//####################################################################
// Prototypes:  public functions can be declared here  ################
//####################################################################

int moduletemplate_publish_data(moduletemplate_data_message *msg);
int moduletemplate_subscribe_data(moduletemplate_data_message *msg, carmen_handler_t handler, carmen_subscribe_t subscribe_how);
void moduletemplate_param_daemon_install_public_parameters(TYPE_moduletemplate_public_params *p, int subscribe_changes, int verbose);

#endif

#ifndef _LAR_H_
#define _LAR_H_

#define PFLN {printf("DEBUG PRINT FILE %s LINE %d\n",__FILE__,__LINE__);}
#define PLN {printf("DEBUG PRINT LINE %d\n",__LINE__);}

#define PVV(a) {printf("DEBUG PRINT FILE %s LINE %d value = %d\n",__FILE__, __LINE__,(int)(a));}
#define _cast_to_carmen_param_change_handler_t_ (void (*)(char*, char*,char*))

#define printc(a,b) {printf("%c[1;%d;48m", 0x1B, (b) +30);printf(a);printf("\33[0m");fflush(stdout);}
#define printnc(a,b,c) {printf("%c[1;%d;48m", 0x1B, (c) +30);printf(a,b);printf("\33[0m");fflush(stdout);}

#include <sys/ipc.h> //System includes to use shared mem
#include <sys/shm.h> //System includes to use shared mem

using namespace std;
#include <iostream>

#if (! _DO_NOT_USE_OPENCV_) /*opencv includes*/
  #include <opencv/cv.h>
  #include <opencv/cxcore.h>
  #include <opencv/highgui.h>
  #include <opencv/cvaux.h>
#endif

#if (! _DO_NOT_USE_CARMEN_ ) /*carmen includes*/
  #include <carmen/carmen.h>
#endif


//####################################################################
// Typedefs:Declare here structs that have interesting params for ####
// other modules besides this one, but that will not be sent through #
// messages. A function to install this struct with param daemon #####
// should be declared ################################################
//####################################################################

typedef struct {
    int send;           
    double timestamp;   
    char *host;         
}global_dummy_message;


typedef struct {
    int shm_id;         
    int shm_size;       
    double timestamp;   
    char *host;         
}global_shminfo_message;

//####################################################################
// LAR includes:        ##############################################
//####################################################################


#include <lar/timer.h>
#include <lar/pixelaccess.h>
#include <lar/errorhandling.h>
#include <lar/readcommandlineparameters.h>
#include <lar/lensundistort.h>
#include <lar/videosaving.h>
#include <lar/imageprocessing.h>
#include <lar/acl_interface.h>
#include <lar/crc.h>

#include <lar/moduletemplate_interface.h>

#include <lar/xbee_interface.h>
#include <lar/ptucontrol_interface.h>
#include <lar/atlas2000_interface.h>
#include <lar/atlasmv_interface.h>
#include <lar/powermanager_interface.h>
#include <lar/des70_10.h>


#include <lar/soundplayer_interface.h>
#include <lar/soundplayer_messages.h>
#include <lar/processcontrol_interface.h>
#include <lar/processcontrol_messages.h>

#include <lar/gps_interface.h>

#include <lar/xsens_interface.h>

#include <lar/firei_interface.h>
#include <lar/flea2_interface.h>
#include <lar/xb3_interface.h>

//this must be after the xb3_interface
#include <lar/foveationcontrol_interface.h>

#include <lar/hokuyo_utm_interface.h>
#include <lar/laser3d_interface.h>


#include <lar/ipm_interface.h>
#include <lar/egomotiongpsimu_interface.h>

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

#include <lar/cdltm_interface.h>
//#include <lar/lmssp_interface.h>
#include <lar/rtbm_interface.h>

#include <lar/potkf_interface.h>

#include <lar/tlcstm_interface.h>
#include <lar/cwtm_interface.h>
#include <lar/tlhfcs_interface.h>
#include <lar/pdtm_interface.h>
#include <lar/cwpc_interface.h>
#include <lar/vscshfba_interface.h>

#include <lar/cm_interface.h>


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


#include <lar/roc_interface.h>

#endif

Include global headers.

carmen_laser_laser_message* hokuyo_message
Initial value:
{
    {(char*)ROBOT_MOTION_COMMAND_FMT , NULL},
    {(char*)ROBOT_LIGHTS_COMMAND_FMT , NULL},
    {(char*)LASER3D_POINTCLOUD_MESSAGE_FMT , NULL},
    {(char*)CAMERA_N0_IMAGE_FMT , NULL},
    {(char*)CAMERA_N1_IMAGE_FMT , NULL},
    {(char*)CAMERA_N2_IMAGE_FMT , NULL},
    {(char*)CAMERA_N3_IMAGE_FMT , NULL},
    {(char*)IPM_SERVER_DATA_MESSAGE_FMT, NULL},
    {(char*)IPM_HEARTBEAT_MESSAGE_FMT , NULL},
    {(char*)CAMERA_N3_IMAGE_FMT , NULL},
    {(char*)HOKUYO_UTM_SERVER_DATA_FMT , NULL},
    {(char*)HOKUYO_UTM_HEARTBEAT_FMT , NULL},
    {(char*)XSENS_DATA_MESSAGE_FMT , NULL},
    {(char*)XB3_3DPOINTCLOUD_MESSAGE_FMT , NULL},
    {(char*)GPS_GPGGA_DATA_MESSAGE_FMT , NULL},
    {(char*)GPS_GPRMC_DATA_MESSAGE_FMT , NULL},
    {(char*)HOKUYO_POINTCLOUD_MESSAGE_FMT , NULL},
    {(char*)XB3_STEREOIMAGE_MESSAGE_FMT , NULL}

}
carmen_param_t logger_params[]
Initial value:
 {
{(char*)"recorder", (char*)"robot_motion_command", CARMEN_PARAM_ONOFF, &log_param.motion_command, 0, NULL},
{(char*)"recorder", (char*)"cameras_image", CARMEN_PARAM_ONOFF, &log_param.firei_cameras, 0, NULL},
{(char*)"recorder", (char*)"camera_n3_shm", CARMEN_PARAM_ONOFF, &log_param.firei_server_camera_3, 0, NULL},
{(char*)"recorder", (char*)"ipm_shm", CARMEN_PARAM_ONOFF, &log_param.ipm, 0, NULL},
{(char*)"recorder", (char*)"laser3d_pointcloud", CARMEN_PARAM_ONOFF, &log_param.laser3d, 0, NULL},
{(char*)"recorder", (char*)"hokuyo_shm", CARMEN_PARAM_ONOFF, &log_param.laser2d, 0, NULL},
{(char*)"recorder", (char*)"xsens_data", CARMEN_PARAM_ONOFF, &log_param.imu, 0, NULL},
{(char*)"recorder", (char*)"xb3_3dpointcloud", CARMEN_PARAM_ONOFF, &log_param.xb3, 0, NULL},
{(char*)"recorder", (char*)"stereoimage", CARMEN_PARAM_ONOFF, &log_param.xb3_image, 0, NULL},
{(char*)"recorder", (char*)"gps_gpgga_data", CARMEN_PARAM_ONOFF, &log_param.gps, 0, NULL},
{(char*)"recorder", (char*)"hokuyo_pointcloud", CARMEN_PARAM_ONOFF, &log_param.hokuyo_point_cloud, 0, NULL},
}
carmen_FILE* outfile
Generated on Wed Jun 2 12:43:14 2010 for LAR Atlas by  doxygen 1.6.3