Android 获得归一化加速 [英] Android get normalized acceleration

查看:52
本文介绍了Android 获得归一化加速的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望获得 Android 手机的加速度矢量.问题是,加速度计坐标是相对于手机的旋转.我想要的是绝对"加速度,即,无论手机面向哪个方向,它都应该返回相同的值.(我想检测正在滑雪的用户是否在不使用 GPS 的情况下从斜坡上滑下.我还需要能够区分滑行和上缆车.)

I wish to get the acceleration vector of an Android phone. The problem is, the accelerometer coordinates are relative to the phone's rotation. What I want is the "absolute" acceleration, i.e., it should return the same values whichever way the phone is facing. (I want to detect if a user that is skiing is sliding down a slope without using GPS. I also need to be able to differentiate sliding and going up the chairlift.)

我可能可以通过将加速度计与陀螺仪结合来获得这些值,但我不知道如何用陀螺仪来抵消加速度计的值.

I can probably get those values by combining the accelerometer with the gyroscope, but I have no idea how I could offset the accelerometer's values with the gyroscope's.

这可能吗,如果可能,怎么做?

Is this possible, and if so, how?

推荐答案

你所描述的无法完成,除非你重新定义一下问题.为了帮助您重新定义它,我将概述主要问题:

What you describe can't be done, unless you redefine the problem a bit. To help you redefine it, I'll outline the main issues:

首先,我猜您所说的绝对加速度"是指相对于地理参考的加速度.不能单独使用加速度计完成,因为它不知道地理参考.如果您移动得足够远以获取 GPS 定位,或者使用指南针,您或许可以解决这个问题,但每个问题都有其自身的问题(尽管至少问题是可以解决的).

First, I'm guessing that what you mean by "absolute acceleration" is acceleration with respect to geographical reference. The can't be done with the accelerometer alone, since it has no idea about geographical references. If you move far enough for the gps, or use the compass, you might be able to get around this, but each of these has its own issues (though at least the problem is soluble).

第二个问题是,单独使用加速度计完全无法区分重力和加速度(这被称为等效原理").因此,任何测得的加速度总是重力和加速度的矢量和,但这些方程总是有多种解,在加速度小于重力的通常情况下,你真的无法确定加速度的任何信息.不过,由于重力在某种程度上是恒定的,因此也有一些方法可以解决这个问题,例如使用陀螺仪,或者您的用户可以将手机保持在固定方向(例如,通过查看地平线等外部线索),以及这些方法可能会让你减去重力的影响,但这通常是一个不平凡的问题.

The second issue is that gravity and acceleration are completely indistinguishable using an accelerometer alone (this is known as the "equivalence principle"). Therefore, any measured acceleration will always be the vector sum of gravity and the acceleration, but there are always multiple solutions to these equations, and in the usual cases where the acceleration is smaller than gravity, you really can't determine anything about the acceleration. Since gravity is somewhat constant though, there are ways around this too, using, say, a gyroscope, or maybe your user could hold the phone in a fixed orientation (e.g., by looking at external cues like the horizon), and either of these approaches might let you subtract the influence of gravity, but it's generally a non-trivial problem.

最后一点是,您似乎在地球固定坐标系中思考,而手机的加速度计只是手机固定的.那是加速度计的 z 轴,许多与地球上的上下没有任何关系——这种关系将取决于手机的方向.真的,很多人更喜欢地球固定系统,但手机不知道这一点.您可以使用外部线索(GPS、磁场、陀螺仪、重力、地平线等)来尝试对齐它们,但如果只提供加速度计的单个任意读数,则信息不存在.

The final point to not is that you seem to be thinking in an earth-fixed coordinate system and the phone's accelerometer is only phone-fixed. That is the accelerometer's z-axis many not have anything to do with up and down on the earth -- and the relationship will depend on the orientation of the phone. Really, many people would prefer an earth-fixed system, but the phone just doesn't know that. You can use external cues (GPS, magnetic field, gyroscope, gravity, horizon, etc) to try to align them, but given only a single arbitrary reading form the accelerometer, the information just isn't there.

定义:
加速度矢量:这是加速度计的 x、y、z 读数(每个读数取决于手机方向),有时写为 A=(ax,ay, az).
加速度大小:这是a=sqrt(ax2 + ay2 + az2),这不应该取决于手机的方向(如果不同的轴被校准为相同).如果手机是静止的,这基本上只是重力读数.另请注意,使用此方法会丢失加速度矢量中的许多信息.
归一化加速度:加速度方向,幅度为1,,A/a
地球坐标加速度:我认为这就是您真正想要的,只是没有简单的方法可以得到它,实际上即使可以,我认为它也不会像它可能的那样有用乍一看.

Definitions:
acceleration vector: this is the x, y, z reading from the accelerometer (and each reading will depend on the phones orientation), sometimes written as A=(ax, ay, az).
acceleration magnitude: this is a=sqrt(ax2 + ay2 + az2), and this should not depend on the phones orientation (if the different axes are calibrated to be the same). If the phone is stationary, this will basically just be a reading of gravity. Note also that a lot of the information in the acceleration vector is lost using this measure.
normalized acceleration: The acceleration direction, that has magniture 1, i.e., A/a
acceleration in earth coordinates: I think this is what you really want, there's just no easy way to get it, and really even if you could, I don't think it would be as useful as it might seem at first.

滑雪:
我认为您可以根据加速度计的测量值确定某人何时滑雪.使用加速度计,诸如颠簸和转弯之类的事情都应该非常独特.对于这些,我将使用完整的加速度矢量.例如,在轮流中,加速度大小将保持大致恒定,方向将扫过.还要注意自由落体(即,基本上当滑雪者的天空/脚/屁股/等不在地面上时,无论他们是在颠簸/跳跃时向上,还是从吊椅上掉下来),自由落体时的加速度大小为零.对于升降椅,似乎它可能会在一个平面内具有独特的节奏摇摆.

Skiing:
I think you have a good shot at determining when someone is skiing based on the measurements from the accelerometer. Things like bumps and turns should all be quite distinctive using the accelerometer. For these I'd use the full acceleration vector. For example, in turns, the acceleration magnitude would stay roughly constant and the direction would sweep. Also note that free-fall (i.e., basically whenever the skier doesn't have their skies/feet/butt/etc on the ground, whether they're going upward when launching off a bump/jump, or falling out of the chairlift), the acceleration magnitude will be zero in free-fall. For the chairlift, it seems that it will likely have a distinctive rhythmic sway mostly within a single plane.

所有这些都可以弄清楚.我建议,如果你真的想解决这个问题,那就是在滑雪时记录你的加速度计的数据,看看你是否可以根据数据的特征来确定你什么时候滑雪.(我的猜测是,你的主要绊脚石将是数学,因为想出一个可以区分滑雪特征的算法可能有点棘手,所以看起来回顾向量是个好主意数学,以及点积和叉积之类的东西,此外,我怀疑关于另一个称为 FFT 或傅立叶变换的主题的一点点可能有助于理清滑雪与在升降椅上摇摆的时间和频率特征.)

All of these things could be figured out. I'd recommend, if you really want to solve this problem, is to record data from your accelerometer while skiing, and see if you can determine when you're skiing based on the characteristics of the data. (My guess is, that your major stumbling block with this will be math, because it might be a bit tricky to come up with an algorithm the can distinguish the signatures of skiing, so it seems that it would be a good idea to review vector math, and things like dot-products and cross-products, and also, I suspect that a little bit on another topic known as FFTs or Fourier transforms might be useful in sorting out the time and frequency signatures of skiing vs swinging in the chair lift.)

您也可以折叠 GPS 测量值,这不会那么可靠,或者提供良好的时间分辨率,但至少可以用来仔细检查您的算法.

You could also fold in GPS measurements, which wouldn't be as reliable, or give good time resolution, but could at least be used to double-check your algorithm.

这篇关于Android 获得归一化加速的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆