2018-03-07 19:43:30 -05:00
/*
* IMU.h
*
* Created on: 2018-03-05
* Author: mathieu
*/
#ifndef IMU_H_
#define IMU_H_
2018-03-07 20:55:10 -05:00
#include <opencv2/core/core.hpp>
2018-03-07 19:43:30 -05:00
#include <rtabmap/utilite/ULogger.h>
namespace rtabmap {
// Correspondence class to sensor_msgs/IMU
class IMU
{
public :
IMU () {}
2019-05-07 18:57:53 -04:00
IMU ( const cv :: Vec4d & orientation , // qx qy qz qw
2018-03-07 19:43:30 -05:00
const cv :: Mat & orientationCovariance ,
2018-03-21 21:31:41 -04:00
const cv :: Vec3d & angularVelocity ,
2018-03-07 19:43:30 -05:00
const cv :: Mat & angularVelocityCovariance ,
2018-03-21 21:31:41 -04:00
const cv :: Vec3d & linearAcceleration ,
2018-03-07 19:43:30 -05:00
const cv :: Mat & linearAccelerationCovariance ,
const Transform & localTransform = Transform :: getIdentity ()) :
orientation_ ( orientation ),
orientationCovariance_ ( orientationCovariance ),
angularVelocity_ ( angularVelocity ),
angularVelocityCovariance_ ( angularVelocityCovariance ),
linearAcceleration_ ( linearAcceleration ),
linearAccelerationCovariance_ ( linearAccelerationCovariance ),
localTransform_ ( localTransform )
{
}
2018-03-21 21:31:41 -04:00
IMU ( const cv :: Vec3d & angularVelocity ,
2018-03-07 19:43:30 -05:00
const cv :: Mat & angularVelocityCovariance ,
2018-03-21 21:31:41 -04:00
const cv :: Vec3d & linearAcceleration ,
2018-03-07 19:43:30 -05:00
const cv :: Mat & linearAccelerationCovariance ,
const Transform & localTransform = Transform :: getIdentity ()) :
angularVelocity_ ( angularVelocity ),
angularVelocityCovariance_ ( angularVelocityCovariance ),
linearAcceleration_ ( linearAcceleration ),
linearAccelerationCovariance_ ( linearAccelerationCovariance ),
localTransform_ ( localTransform )
{
}
2019-05-07 18:57:53 -04:00
// qx qy qz qw
2018-03-21 21:31:41 -04:00
const cv :: Vec4d & orientation () const { return orientation_ ;}
2018-03-07 19:43:30 -05:00
const cv :: Mat & orientationCovariance () const { return orientationCovariance_ ;} // 3x3 double Row major about x, y, z axes, empty if orientation is not set
2018-03-21 21:31:41 -04:00
const cv :: Vec3d & angularVelocity () const { return angularVelocity_ ;}
2018-03-07 19:43:30 -05:00
const cv :: Mat & angularVelocityCovariance () const { return angularVelocityCovariance_ ;} // 3x3 double Row major about x, y, z axes, empty if angularVelocity is not set
2018-03-21 21:31:41 -04:00
const cv :: Vec3d linearAcceleration () const { return linearAcceleration_ ;}
2018-03-07 19:43:30 -05:00
const cv :: Mat & linearAccelerationCovariance () const { return linearAccelerationCovariance_ ;} // 3x3 double Row major x, y z, empty if linearAcceleration is not set
const Transform & localTransform () const { return localTransform_ ;}
bool empty () const
{
2018-07-18 16:15:41 -04:00
return localTransform_ . isNull ();
2018-03-07 19:43:30 -05:00
}
private :
2018-03-21 21:31:41 -04:00
cv :: Vec4d orientation_ ;
2018-03-07 19:43:30 -05:00
cv :: Mat orientationCovariance_ ; // 3x3 double Row major about x, y, z axes, empty if orientation is not set
2018-03-21 21:31:41 -04:00
cv :: Vec3d angularVelocity_ ;
2018-03-07 19:43:30 -05:00
cv :: Mat angularVelocityCovariance_ ; // 3x3 double Row major about x, y, z axes, empty if angularVelocity is not set
2018-03-21 21:31:41 -04:00
cv :: Vec3d linearAcceleration_ ;
2018-03-07 19:43:30 -05:00
cv :: Mat linearAccelerationCovariance_ ; // 3x3 double Row major x, y z, empty if linearAcceleration is not set
Transform localTransform_ ;
};
class IMUEvent : public UEvent
{
public :
IMUEvent () :
stamp_ ( 0.0 )
{}
IMUEvent ( const IMU & data , double stamp ) :
data_ ( data ),
stamp_ ( stamp )
{
}
virtual std :: string getClassName () const { return "IMUEvent" ;}
const IMU & getData () const { return data_ ;}
double getStamp () const { return stamp_ ;}
private :
IMU data_ ;
double stamp_ ;
};
}
#endif /* IMU_H_ */