#ifndef main_INC #define main_INC //#define USE_ROS /* Uncomment to use with ROS */ #ifndef USE_ROS #include #include #endif /* ----- USE_ROS ----- */ #include #include #include #define MAXLINE 8192 #define MAXFILENAME 1024 // A struct for storing x,y,z data. typedef struct { double x,y,z; } tuple; // A struct for storing velocity in world frame typedef struct { double east, north, up; } velocity_t; // A struct for storing attitude data. typedef struct { double roll,pitch,yaw; } attitude_t; // A struct for storing UTM data. typedef struct { double northing,easting,up; int zone_i; char zone_c; } UTM; // A struct for storing GPS data. typedef struct { double latitude, longitude, altitude; } gps; // Message types typedef enum {BESTUTM,IMG,INSCOVS,INSPVAS,RAWIMUS} message_type; /* * The message struct is a general container for all message types. Not all * members are used for all messages, so care must be taken not to use garbage * values. */ typedef struct { int secs,nsecs; } timestamp; typedef struct { // These should always be set. timestamp stamp; message_type msg_type; // Only the members needed by the msg_type are stored. tuple angular_velocity; attitude_t attitude; char image_names[2][MAXFILENAME]; tuple linear_acceleration; gps position; UTM utm; velocity_t velocity; } message; int parseLine(char *line, message *msg); #ifdef USE_ROS void imuCallback(); #else /* ----- not USE_ROS ----- */ void imgCallback(const message *msg); void imuCallback(const message &msg, Eigen::Matrix &X, Eigen::Quaternion &q); void pvaCallback(const message &msg, Eigen::Matrix &X, Eigen::Quaternion &q); void utmCallback(const message &msg, Eigen::Matrix &X); #endif /* ----- not USE_ROS ----- */ #endif /* ----- #ifndef main_INC ----- */