在将项目修改为velodyne格式的雷达数据后,出现了轨迹乱飞的现象。原因是原项目/livox/imu的重力加速度是1,在接受IMU数据时代码中手动乘以了一个10,如下所示(//1127下面),而velodyne和绝大部分imu是有重力值的,因此这里存在了一个重力加速度,把10去掉就可以了,修改后的代码如下:
void imuCB(const sensor_msgs::msg::Imu::SharedPtr msg)
{
std::lock_guard<std::mutex> lock(m_state_data.imu_mutex);
double timestamp = Utils::getSec(msg->header);
if (timestamp < m_state_data.last_imu_time)
{
RCLCPP_WARN(this->get_logger(), "IMU Message is out of order");
std::deque<IMUData>().swap(m_state_data.imu_buffer);
}
// 1127
// m_state_data.imu_buffer.emplace_back(V3D(msg->linear_acceleration.x, msg->linear_acceleration.y, msg->linear_acceleration.z) * 10.0,
m_state_data.imu_buffer.emplace_back(V3D(msg->linear_acceleration.x, msg->linear_acceleration.y, msg->linear_acceleration.z),
V3D(msg->angular_velocity.x, msg->angular_velocity.y, msg->angular_velocity.z),
timestamp);
m_state_data.last_imu_time = timestamp;
}
在将项目修改为velodyne格式的雷达数据后,出现了轨迹乱飞的现象。原因是原项目/livox/imu的重力加速度是1,在接受IMU数据时代码中手动乘以了一个10,如下所示(//1127下面),而velodyne和绝大部分imu是有重力值的,因此这里存在了一个重力加速度,把10去掉就可以了,修改后的代码如下: