\begingroup

我希望我的代码能够确定 LIS2DE12 加速度计的运动方向。我做了一个测试,将加速度计放在面包板上(连接到 STM32),并在面包板静止时以及我将面包板向一个方向滑动时通过 UART 记录值。

当棋盘不动时,这些值才有意义:

Timestamp: 26852, X: -0.63, Y: -0.47, Z: 10.04  
Timestamp: 26869, X: -0.47, Y: -0.47, Z: 9.89  
Timestamp: 26886, X: -0.78, Y: -0.63, Z: 10.20  

z 轴是重力轴,虽然它并不完美,但接近 9.8 m/s^2。x 轴和 y 轴接近 0。当我将板子朝一个方向移动时,只需在桌子上沿 x 方向滑动它,我预计值会持续向正方向或负方向增加。但值到处跳动,从正方向变为负方向或反之亦然,并在增加和减少之间切换。这里可能发生了什么?

这些是运动期间的数据样本:

Timestamp: 26920, X: 4.24, Y: 1.73, Z: 11.30
Timestamp: 26936, X: -0.47, Y: -2.04, Z: 10.20
Timestamp: 26953, X: 0.47, Y: -1.10, Z: 8.47
Timestamp: 26969, X: 2.51, Y: -1.73, Z: 13.02
Timestamp: 26986, X: 0.16, Y: -2.35, Z: 10.51
Timestamp: 27003, X: -1.10, Y: 0.94, Z: 8.32
Timestamp: 27019, X: 2.82, Y: 1.57, Z: 12.71
Timestamp: 27035, X: 0.63, Y: -0.94, Z: 12.87
Timestamp: 27052, X: 2.35, Y: -6.28, Z: 11.61
Timestamp: 27069, X: -0.31, Y: 0.31, Z: 10.98
Timestamp: 27086, X: -1.73, Y: 0.47, Z: 3.92
Timestamp: 27102, X: 1.73, Y: -5.65, Z: 10.20
Timestamp: 27119, X: 0.00, Y: -8.63, Z: 8.32
Timestamp: 27135, X: 3.92, Y: 0.47, Z: 16.16
Timestamp: 27151, X: 2.98, Y: -7.06, Z: 13.65
Timestamp: 27168, X: -1.73, Y: -1.88, Z: 11.45

\endgroup

10

  • \begingroup
    数据表中加速度的单位是什么?ms^-2 还是 g?
    \endgroup


    – 

  • 3
    \begingroup
    我认为,如果您预计在以近似恒定的速度沿着桌子滑动某物时加速度会不断增加,那么您需要重新阅读物理书的一般力学部分。
    \endgroup


    – 

  • \begingroup
    数据以 m/s^2 为单位(这是在代码中计算的)。我最初只期望加速度不断增加,然后如果它在某个点以恒定速度移动,那么加速度不应该再次回到接近 0 吗?我只想知道有关初始运动的信息。
    \endgroup


    – 

  • 2
    \begingroup
    您的应用程序中的采样率是多少?您发布的数据似乎有所不同,至少在 13-17 毫秒之间 – 我猜是毫秒?这是否足够快,能够看到加速度在用手在桌子上移动某物的时间范围内趋于平稳?
    \endgroup


    – 

  • 1
    \begingroup
    如果您看到梯形曲线,那么您看到的就是速度表。在加速过程中,速度会增加到一个固定速度,然后以该速度变平,再降为零。加速度只会告诉您是否改变了速度。您无法区分恒定速度和恒定无速度。这种速度曲线的加速度将是梯形斜坡第一部分的尖峰,当梯形变平时回到零,然后在梯形下降侧出现负尖峰,当速度为 0 时回到零
    \endgroup


    – 


最佳答案
3

\begingroup

这些读数可能是正确的。

9.8 是一个很大的加速度,就像从桌子上掉下东西一样。你移动它的速度有那么快吗?

以恒定速度移动的物体不会加速(除了重力之外……)。您可以积分加速度来获得速度,但正如您所见,噪声基底很大。尝试在代码中编写速度输出,只需将加速度读数相加(如果您愿意,可以乘以 delta-t)

我建议你先在手机上安装一个可以绘制加速度计图表的应用程序,然后稍微玩一下。例如,我录制了飞机起飞的画面,将它们整合起来,得到了大致正确的速度,但我认为这种运动和加速度是你用便宜的加速度计可以可靠测量的最小值。

\endgroup

1

  • \begingroup
    我快速地将面包板在桌子上滑动,大约一英尺一秒。我并没有以恒定的速度移动它,这可以从加速度计的值中看出,我认为至少在最初,初始加速度的值会有一定的一致性,这就是我想知道的。很难相信我无法从加速度计中获得如此简单的信息。
    \endgroup


    – 

\begingroup

手动以稳定的加速度移动物体非常困难。您“只是在桌子上滑动它”的实验可能会有相当恒定的速度。速度或更严格地说,速率的任何轻微变化都会表现为剧烈波动的加速度。请记住,加速度是速度的微分,因此噪音更大。

更好的实验是将其沿 x 或 y 方向倾斜,以观察地球引力的 sin(alpha) 分量。噪音小,非常稳定且易于设置,使用尺子或量角器,非常准确。如果您的手机上有倾斜仪应用程序,它就是这样工作的。

如果您想要进行更动态的实验,那么不要报告加速度,而是先对速度求和,然后对位置求和,并报告这些结果。花一些时间研究由于偏移和初始条件而导致的漂移率(欢迎来到棘手的惯性导航世界),然后在桌子上移动它(或者如果您正确处理所有三个轴,则可以将其移出桌子)。速度和位置将更容易手动控制,并且由于求和固有的低通滤波效果,噪音会更小。

\endgroup

\begingroup

加速度是速度的导数,也是位置的二阶导数。

用手移动物体不太可能获得恒定速度,因此加速度为零。随着速度的变化,加速度也会变化,如果速度增加(即使只是轻微增加),加速度为正;如果速度降低(即使只是轻微降低),加速度为负。

要确定行进的方向,您需要对加速度进行积分(总和)以获得速度。

就你的情况而言,一旦你整合,你就会得到以下结果:

时间戳 斧头 三角洲
26920 4.24 1.73 11.3
26936 -0.47 -2.04 10.2 16 0.06784 0.02768 0.1808
26953 0.47 -1.1 8.47 17 0.05985 -0.007 0.3542
26969 2.51 -1.73 13.02 16 0.06737 -0.0246 0.48972
26986 0.16 -2.35 10.51 17 0.11004 -0.05401 0.71106
27003 -1.1 0.94 8.32 17 0.11276 -0.09396 0.88973
27019 2.82 1.57 12.71 16 0.09516 -0.07892 1.02285
27035 0.63 -0.94 12.87 16 0.14028 -0.0538 1.22621
27052 2.35 -6.28 11.61 17 0.15099 -0.06978 1.445
27069 -0.31 0.31 10.98 17 0.19094 -0.17654 1.64237
27086 -1.73 0.47 3.92 17 0.18567 -0.17127 1.82903
27102 1.73 -5.65 10.2 16 0.15799 -0.16375 1.89175
27119 0 -8.63 8.32 17 0.1874 -0.2598 2.06515
27135 3.92 0.47 16.16 16 0.1874 -0.39788 2.19827
27151 2.98 -7.06 13.65 16 0.25012 -0.39036 2.45683
27168 -1.73 -1.88 11.45 17 0.30078 -0.51038 2.68888

您可以看到沿 X 轴的速度确实始终为正。

您可以在这张图上看到速度绝对不是恒定的,甚至不是单调增加的,这解释了加速度在正值和负值之间交替:

另请注意:

  • 沿 Z 轴的加速度不是“真实”加速度(如果是的话,静止时为 0),因此您不能真正使用它来计算 Z 轴上的速度或位置(但您可以使用它来确定传感器/电路板的部分方向——完整方向需要在其上加上磁力计)。
  • 积分会累积误差。即使是非常小的误差,如果反复累积,也会很快导致大误差。这称为漂移。例如,,在计算位置的情况下(即双重积分):

    即使是最好的加速度计,其标准误差为 10 微克,也会在 17 分钟内累积 50 米(164 英尺)的误差

  • 虽然在位置的情况下可以通过重置方式(例如通过使用 GPS 或其他地理定位方法来获取实际位置),但在速度的情况下这要困难得多,因此即使加速度正好变为 0,你也无法知道你是处于静止状态还是以恒定速度移动。
  • 考虑到静止时的加速度(以及加速度的变化),很有可能出现以下情况:

    • 你的加速度计实际上并没有处于静止状态(可能会有轻微的振动)
    • 您的加速度计实际上不是水平的(因此部分重力包含在 X 和 Y 加速度中)
    • 您有校准问题
    • 您的加速度计配置或数据处理方式存在其他问题
  • 这也意味着结果的准确性甚至低于预期

\endgroup