# MPU9150 双重积分位移漂移且速度不归零

> 原文链接：https://robotics.hellobike.com/pitfalls/2015-12-18-robotics-se-8680
> 频道：pitfalls | 更新日期：2015-12-18 | 标签：auto, stackexchange, accelerometer, algorithm
> 核心摘要：用加速度积分求位移时漂移，采纳答案建议用真实采样时间 dT 做数值积分，而不是 speed。

# MPU9150 双重积分位移漂移且速度不归零

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[calculating position based on accelerometer data](https://robotics.stackexchange.com/questions/8680/calculating-position-based-on-accelerometer-data)（Robotics Stack Exchange #8680）

**状态**：已解决

## 问题

MPU 9150 静止时加速度接近零，但移动再放回后积分得到的速度不回到零，位置尤其 `Z` 方向持续缓慢变化，多次移动后 `vx`、`vy`、`vz` 漂移增大。

## 环境

Linux / ROS 机器人软件与控制通用开发环境

## 解决办法

1. 数值积分应使用公式 `integrated value += derivative * elapsed time`，把代码中的 `speed` 改为真实经过时间 `elapsed time`/`dT`。
2. 建议把积分放在定时中断中，用中断周期作为 `dT`，保证积分时间一致。
3. 不要像加速度或速度那样直接对四元数做普通数值积分；应由陀螺仪角速度和当前四元数计算 `qdot`，再用 `q_k = q_{k-1} + qdot_k * dT` 更新。

原问题作者：maximus；采纳答案作者：Chuck。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #8680：calculating position based on accelerometer data](https://robotics.stackexchange.com/questions/8680/calculating-position-based-on-accelerometer-data)