1

我有 IMU 传感器,它可以为我提供原始数据,例如方向、角度和线性加速度。我正在使用 ROS 并做一些 Gazebo 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 包来考虑所有这些转换并给我最准确的线速度估计。有什么帮助吗?谢谢

4

1 回答 1

0

我首先建议您尝试将输入传感器数据拟合到robots_localization包中的 EKF 或 UKF 节点中。该软件包是 ROS 生态系统中使用最多和最优化的姿态估计软件包。

它旨在处理 3D 传感器输入,但您必须配置参数(没有真正的默认值,所有配置)。除了上面的配置文档,github 上还有很好的 yaml 参数配置示例(例如)(你需要一个独立于启动文件的文件)和示例启动文件(例如)

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

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

于 2021-09-24T16:39:48.007 回答