33 #ifndef IMUPUBLISHER_H
34 #define IMUPUBLISHER_H
37 #include <sensor_msgs/Imu.h>
42 std::vector<double> stddev;
45 if (stddev.size() == 3)
47 auto squared = [](
double x) {
return x * x; };
48 std::transform(stddev.begin(), stddev.end(), variance_out, squared);
52 ROS_WARN(
"Wrong size of param: %s, must be of size 3",
param.c_str());
57 memset(variance_out, 0, 3 *
sizeof(
double));
92 bool quaternion_available = packet.containsOrientation();
93 bool gyro_available = packet.containsCalibratedGyroscopeData();
94 bool accel_available = packet.containsCalibratedAcceleration();
96 geometry_msgs::Quaternion quaternion;
97 if (quaternion_available)
101 quaternion.w = q.w();
102 quaternion.x = q.x();
103 quaternion.y = q.y();
104 quaternion.z = q.z();
107 geometry_msgs::Vector3 gyro;
110 XsVector g = packet.calibratedGyroscopeData();
116 geometry_msgs::Vector3 accel;
119 XsVector a = packet.calibratedAcceleration();
126 if (quaternion_available || accel_available || gyro_available)
128 sensor_msgs::Imu
msg;
130 msg.header.stamp = timestamp;
133 msg.orientation = quaternion;
134 if (quaternion_available)
142 msg.orientation_covariance[0] = -1;
145 msg.angular_velocity = gyro;
154 msg.angular_velocity_covariance[0] = -1;
157 msg.linear_acceleration = accel;
166 msg.linear_acceleration_covariance[0] = -1;