如何进行转换以从线加速度IMU数据中获得正确的线速度?



我有IMU传感器,给我的原始数据,如方向,角和线性加速度。我使用ROS和做一些凉亭UUV模拟。此外,我想从原始IMU数据中得到线速度。如果我在一段时间内做积分,就会有累积的误差,比如机器人转弯时的时间就不准确了。如果我使用

acceleration_x = (msg->linear_acceleration.x + 9.81 * sin(pitch)) * cos(pitch); 
acceleration_y = (msg->linear_acceleration.y - 9.81 * sin(roll)) * cos(roll);

所以积分线性加速度是很糟糕的,

Velocity_x= Velocity_old_x+acceleration_x*dt;

因为集成了加速度而没有考虑传感器的任何可能的旋转,这意味着如果传感器旋转,结果可能会很糟糕。所以我需要一些ROS包来考虑所有这些变换并给出最准确的线速度估计。任何帮助吗?由于

我首先建议您尝试将输入传感器数据拟合到来自robot_localization包的EKF或UKF节点中。这个包是最常用的&ROS生态系统中最优化的姿态估计包。

它被设计用来处理3D传感器输入,但你必须配置参数(没有真正的默认值,所有配置)。除了上面的配置文档,github有很好的yaml参数配置示例(示例)(您将需要一个与启动文件分开的文件)和示例启动文件(示例)。

如果您正在谈论最小化累积误差,将IMU或里程计速度数据输入EKF/UKF将为您提供odom->base_link帧变换,根据定义,这是您可以做的最好的。除非你有一个绝对的参考系测量,否则绝对姿势误差会逐渐累积。(前GPS或相机/激光雷达处理的位置估计)。具体到你要求的速度,退一步求导,除非你有一个绝对的参考系估计你的速度或姿势,你会累积误差只是积分你的加速度,这是你能做的最好的,根据定义。

如果它是一个水下机器人,你可以在你的车辆上安装一个速度/水流速度传感器。或者你可以使用相机/激光雷达/声纳处理来获得绝对参考帧或至少在执行周期之间的位置差异。否则你的精度& &;结果仅限于您拥有的传感器。

最新更新