设备倾斜时加速


13

我目前正在研究使用始终在线的3D加速度计(使用刻度+ -2g)和3D陀螺仪(使用刻度+ -250g)-传感器的设备。

我可以读取每个可能的向量(X,Y,Z)及其加速度(g's)和角速率(dps)以及设备当前所在的角度。但是我的问题是,当设备处于倾斜状态(无倾斜时为0g)时,加速度取决于当前设备的角度,介于(向下)0g->-1g或介于(向上)0g-> 1g之间。下面是希望清除想法的图片。

希望这会有所帮助

该设备将位于汽车中,并应在汽车减速(制动)时测量加速度。但是,如果设备已经处于倾斜状态,则加速度计将测量倾斜引起的某些加速度,这使得很难分辨设备是否确实具有某种加速度,或者仅仅是倾斜导致了加速度。

当设备没有倾斜并且在平坦表面上时,X和Y轴产生0g,Z轴产生1g。如果向上倾斜,则倾斜会使X轴的读数接近1g,向下倾斜,则使-1g读数。当设备与原始位置成90 *度时达到+ -1g

我一直在思考如何消除倾斜引起的加速度,而仅测量设备的实际加速度,但是无法利用我可以产生的以下数据来解决该问题。

基本上,我认为即使传感器像图片一样倾斜,我也只能测量X轴加速度(图片)。

希望由于我的英语能力以及我尝试解释我的问题的方式,这个消息不会太难理解。


2
您为什么不只是测量没有有趣的加速度发生的时间,并将其用作比较点?
PlasmaHH

我认为那行不通。如果设备完全静止,则X和Y轴分别为0g和Z轴为1g。倾斜会导致X轴读数根据倾斜而从-1g到1g,如我所说。制动会导致X轴测量值减小(负加速度,因此汽车正在减速)。例如,如果设备已经向下倾斜,那么它的范围在0g-(-1g)之间,我怎么能知道这不是制动引起的加速度?
jumbojohn

为什么不计算三个轴的总加速度,而不仅仅是Y轴?我认为这是对所有三个轴都正确考虑的基本知识!像这样的
charansai

LSM6DSM没有磁力计。您从何处获得此信息?我认为您实际上正在使用ST的X-NUCLEO-IKS01A1板,该板同时具有LSM6DSM陀螺仪/加速度计 LIS3MDL磁力计。
MrGerber '18

@MrGerber谢谢您的注意。误读传感器的数据表对我来说很不好。
jumbojohn

Answers:


18

仅是解决方案的草图。

考虑所有三个轴。

不管倾斜如何,由于重力而引起的加速度始终为1G,作为X,Y,Z的矢量和。您可以将静止或稳定运动时的加速度描绘为半径为1G的球体上的一个点。(如果您完全水平,则该点将为(0,0,-1),即在您的正下方)。

制动引起的加速度会使球体本身变形;X,Y,Z的向量总和将不再是1G。

所以

A=X2+Y2+Z2

给你总的加速度。如果等于G,则您处于静止状态;否则,您正在加速,是G与真实加速度的矢量和。A

现在,您必须找到真实的加速度,该加速度通常是向前(或向后)方向上的矢量,解释了和G 之间的差异。您需要从减去G球面上的某个点,以找到(希望唯一)解决方案)向量仅具有X(向前/向后)分量。那就是你的加速。(我将三角学作为一个简单的难题,希望这个想法很清楚)。AAA

除非您也要转弯或打滑,否则请确保来自方向盘和ABS的输入;成为数据融合问题。这种方法将提供加速度的估计。为了合理地检查和优化该估计,可以使用卡尔曼滤波器将其与其他(也是不可靠的)数据源(如Phil Frost的答案)结合使用。


实际上,我之前从未使用过加速度计/陀螺仪,因此,总体图尚不完全清楚这些功能是如何工作的,而数学并不是我最擅长的技能之一,因此,我将感谢您的提示/澄清,谢谢。
jumbojohn

虽然正确,但我强烈怀疑误差幅度会很重要。同样不要忘记,垂直加速度会使球体变形(例如减速带,坑洼),因此您可能需要根据应用程序解决该问题。
克里斯·H

但是如果你看起来足够努力,引力并不是恒定的。虽然美国最高的公路仅使$ g $减少了约0.1%,但从两极到赤道相差0.5%。 地质也可以使这个数量级发生变化。可能不是改变游戏规则的人,但不要忽略校准
Chris H

您只需要根据您的位置修改G球体的半径,或者在启动引擎之前对其进行测量即可;那不是问题。我同意虽然可能需要在打滑和转向的同时处理颠簸。
Brian Drummond

在启动引擎之前进行校准是我一直在考虑的事情。虽然如果建造者不是最终用户,则校准很快。
克里斯H

9

您的主要错误在于没有将加速度视为单个矢量。当汽车静止时,该矢量将始终向上1 g。不要只看原始加速度计数据的X分量。做真正的矢量数学。

但是我的问题是,当设备处于倾斜状态(无倾斜时为0g)时,加速度介于(向下)0g->-1g或介于(向上)0g-> 1g之间。

不,这是重点。您所说的对于加速度计输出的X分量可能是正确的,但在汽车静止时对于加速度而言却不是正确的。

理想的测量加速度将始终是汽车的实际加速度(相对于地球),加上重力导致的1 g加速度。后者始终朝上。如果您知道汽车的方向,则可以由于重力而减去这1克来找到您实际要寻找的加速度。

注意,这种读数存在相当大的误差,尤其是来自廉价MEMS传感器的误差。尽管您应该能够对诸如硬加速或硬制动之类的短期事件有一个很好的了解,但是这些数据远不足以使惯性导航最多持续几秒钟。


由于重力引起的(测得的)加速度不会在“向上”方向吗?像这样,您从静止的设备上获得的重力将与您在任何引力场之外获得的读数相同,但在(相对于设备)“向上”方向上会加速吗?
psmears

@psmears:是的,你是对的。力是向下的,但表观加速度是向上的。固定。
奥林·拉斯洛普

5

如其他答案所述,加速度计提供三维矢量,该矢量是由于发动机,制动器或其他作用在轿厢上的力而在轿厢上产生的重力和其他加速度的总和。然后,您的目标是从加速度计的输出中减去重力加速度,以找到剩余的其他力。

为了获得最佳精度,您不能假设重力始终相对于加速度计“向下”。例如,汽车可能在山上。您必须使用三维矢量数学来完成所有计算,并且必须对汽车的方向进行一些估算,以便知道要减去的重力矢量的方向。

一个卡尔曼滤波器是这里的常用方法。想法是获取可能会改变汽车方向的所有数据,然后对测量结果进行加权平均,再将其与您对汽车所作用的物理学知识相结合,得出概率估计。汽车的新方向,哪个方向是“向下”。

您拥有的数据越多,您对汽车物理模型的建模就越准确,那么这种估算就越准确。

例如,如果您有一个陀螺仪,并且测量了汽车的俯仰角,则可以预测重力矢量将朝着汽车的后部旋转。在短期内,例如当汽车刚刚开始上山时,这可以帮助重力矢量迅速采取正确的方向。

您可能还假设汽车平均不会制动或加速。因此,加速度计的低通滤波输出可能会反馈到“向下”方向的估计中。这提供了不受惯性漂移影响的长期测量。

因此,将来自加速度计和陀螺仪的数据进行组合以估计重力方向比单独进行任何一种测量都可以提供更准确的估计。

您可以进一步结合您对车辆可能的工作范围的了解。例如,汽车不能在太陡的山坡上行驶或行驶,因此当加速度计指示如此极端的角度时,您可以减轻重量,假设其大部分输出是由制动器或发动机而不是重力引起的。

您知道驾驶员是否踩了刹车,这将移动加速度矢量,您可以从估计的“下降”分量中减去它。

或者,如果您具有GPS和地图数据,则可以根据位置合并对汽车坡度的估计。如果您具有高精度数据,则可能会确切地知道车辆在哪个山坡上。如果您只有低精度的数据,这仍然很有用。例如,如果汽车在堪萨斯州,则不太可能出现山丘。如果汽车在旧金山,山坡的可能性更大,您可以减轻加速度计的重量。

如果您具有油耗和速度的数据,并且知道在上坡时会消耗更多的油,则可以使用它来根据燃油效率来估计汽车的上下倾斜。

等等。您知道的越多,估计就越好。


3

您将需要一种融合算法,并使用3D加速度计,3D陀螺仪和3D磁性传感器。通过这种融合算法,您可以获得姿态,地心引力可帮助您检测地平线-俯仰/偏航/侧倾角。其他两个传感器mag / gyro有助于滤除动态运动。当您的汽车也将向左/向右转时,..离心力将被添加。一旦有了姿态,就可以减去重力矢量并分解所有三个轴上的合成加速度。


3

作为一种非常基本的方法,您可以使用高通滤波器来消除加速度的恒定部分(与重力相对应),并使加速度的可变部分归因于汽车动力学。假设raw是一个包含X,Y和Z测量值的矢量,并且acc是没有重力的汽车加速度。然后

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

的各个分量acc仍受倾斜影响,但矢量范数不受以下影响:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

当然,这种方法不是很精确,特别是当倾斜度以很高的速率变化时。就幼稚的数学而言,这是差不多的。如果需要更高的精度,请学习如何使用卡尔曼滤波器。


1

答案在于“减速”的精确定义。

根据您的问题:

该设备将位于汽车中,并应在汽车减速(制动)时测量加速度。

但是,减速并不等于制动。有两个可能的定义:

  1. 汽车相对于地面的速度正在降低。
  2. 正在应用汽车制动器。

这种差异在上坡和下坡时很明显。在下坡时,如果不施加制动,汽车的速度将会提高。在上坡时,即使不刹车,速度也会减慢。

事实证明,检测1.比2困难得多。让我们定义相对于汽车方向的轴:X:前后方向,Y:左右方向,Z:上下方向。所有轴都对准汽车。

解决方案:

  1. 对于定义1.,最佳方法是假设汽车的速度只能在X方向上变化。然后,测得的加速度a = g + v,其中g是归因于反重力的加速度,v是归因于速度变化的加速度。您可以假设g的长度始终等于9.8 m /s²,并且v始终沿X方向。因此(g_x + v_x,g_y,g_z)=(a_x,a_y,a_z),得出v_x = a_x-sqrt((9.8m /s²)²-g_y²-g_z²)。只要| v |,就可以使用 小于| g |,换句话说,由于电动机或制动器引起的加速度小于1G。除非您的汽车装有火箭助推器,否则应该是非常安全的假设。

  2. 对于定义2,您可以直接获取x轴读数。如果汽车没有加速或制动,则作用在其上的唯一的重力反作用力就是路面的法向力。该力始终相对于汽车在z方向上,因此不会改变x轴读数。制动器和电动机仅在x方向上起作用,在此读数中将直接可见。


0

您的应用程序似乎使用了“过度杀伤”设备。您应该使用仅能测量x和y加速度的设备,这样倾斜度不会有可测量的影响。尽管加速度可能更大或更小,但由于倾斜,该设备将仅测量车辆所在飞机上加速度的x和y分量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.