#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 #include "body.h" #include "state.h" #define MAXLINE 8192 #define MAXFILENAME 1024 // A struct for storing PVA covariance. typedef struct { Eigen::Matrix3d position,velocity,attitude; } covariance_t; // 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; covariance_t covariance; } message; int parseLine(char *line, message *msg); timestamp update_dt(const timestamp t, timestamp *t_old); #ifdef USE_ROS void imuCallback(); #else /* ----- not USE_ROS ----- */ void covCallback(const message &msg, Eigen::Matrix &P, const Eigen::Quaternion &q); void imgCallback(const message *msg); void imuCallback(const message &msg, Eigen::Matrix &X, Eigen::Matrix &P, const Eigen::Quaternion &q, const timestamp dt); 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 ----- */