Articles of 加速度计

在android中计算用户移动速度

我需要计算用户移动的速度 。 所以我们需要两件事来计算速度,即GPS和Accelerometer 。 但两者都有其局限性。 1) GPS一直无法使用。虽然我得到了用户的当前位置,但我只是从Network provider而不是GPS 。 2) Accelerometer不准确。 那么我应该采用哪种方法?

Android Accelerometer移动球

我已经在网上发布的教程的帮助下开发了一个示例应用程序。 我的目标是访问加速度计并根据手机方向移动球。 我成功地certificate了这一点。 但我有两个问题 球越过了屏幕 球运动不平滑(看起来它消失并重新出现在屏幕上) 这是我的代码。 我们需要做些什么来改变球的平滑和准确的运动,正如我们在很多比赛中看到的那样。 public class Accelerometer extends Activity implements SensorEventListener{ /** Called when the activity is first created. */ CustomDrawableView mCustomDrawableView = null; ShapeDrawable mDrawable = new ShapeDrawable(); public static int x; public static int y; private Bitmap mBitmap; private Bitmap mWood; private SensorManager sensorManager = null; /** Called when […]

使用Android的线性加速与应用低通滤波器

我试图确定使用Android的线性加速数据的好处,而不是简单地应用Androids API参考中提供的低通滤波器,并在此其他stackoverflow问题中讨论 。 我问我正试图获得一个记录线性加速度的免费应用程序(以及我的其他要求(采样率,将数据写入文件等等))。 我找不到一个,所以我考虑过只使用一个使用标准加速度计记录的应用程序然后我只是将低通滤波器应用于数据。 或者,我可以编写自己的应用程序来完成我需要的工作 – 但我在Android开发方面没有太多经验,这需要一些时间。

检测设备方向

我需要检测Android设备方向更改,而无需手动使用传感器数据,同时保持活动方向坚持某些方向 onConfigurationChange不起作用,因为我的活动会不会旋转。 使用传感器数据来检测方向变化我认为这是一个轮子的发明,因为android已经有嵌入式算法实现来检测设备方向的变化。 另一方面,方向变化的检测不是这样的简单检查。 public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3) { return; } //getResources().getConfiguration().orientation; if (event.values[1] -6.5) { if (orientation!=1) { Log.d(“Sensor”, “Protrait”); } orientation=1; } else { if (orientation!=0) { Log.d(“Sensor”, “Landscape”); } orientation=0; } } 它确实需要真正的数据处理,例如噪声过滤和突然短暂的抖动/旋转。 那么任何想法如何使用传统服务检测设备方向? (再次,我会将我的活动粘贴到某个方向,所以onConfigurationChange将不起作用)

MATLAB从加速度到速度到位置的积分时,我的y值非常高

我从加速度计获得原始加速度数据,并试图对其进行双重积分以获得位置。 用于获取数据的Android手机在平面上设置3秒钟以减少漂移。 我将静止期间的加速度平均值设为零。 这很好,但是当我们整合到速度和位置(使用cumtrapz)时,我们得到了不切实际的高y值(速度的米/秒和位置的米)。 原始数据以一定的速度挥动手机。 有没有人知道为什么这个位置获得如此高的价值? 下面的图表显示了我描述的内容以及我的代码。 编辑:即使手机没有旋转,这些值也是不切实际的,并不表示手机的移动方式。 在附图中,手机在平坦表面上以盒子的形状移动而不涉及旋转。 %VarName2 = accelerometer values in X direction %VarName3 = accelerometer values in Y direction %VarName4 = accelerometer values in Z direction %elapsedArray = time values for each sample of accelerometer data ddx = VarName2 – mean(VarName2(1:limit)); ddx = ddx(1:length(ddx)-200); elapsedArray = elapsedArray(1:length(elapsedArray)-200); ddy = VarName3 – […]

垂直运动传感器

我正在开发一款需要检测垂直运动的Android应用程序。 向上移动平板电脑时,陀螺仪,加速度计和线性加速度传感器会给出相应的值,指示向上或向下运动。 我遇到的问题是,当您将平板电脑向用户倾斜或远离用户时,这些传感器也会读取向上/向下的动作。 例如,陀螺仪中的x值表示垂直平面。 但是当您向前倾斜设备时,x值将会改变。 当我进行此动作时,读取垂直运动的同一传感器会为此读取一个值。 其他传感器也是如此。 我试图使用方向与陀螺仪一起制作条件语句,如果音高没有变化,但是xvariables上升/下降,那么我们就有垂直运动。 这个问题是,如果用户向上移动但略微倾斜,它将不再起作用。 我也试过这样做,如果倾斜有变化,那么就没有垂直运动了。 但是迭代速度如此之快,以至于倾斜度可能会有1/100秒的变化,但对于下一次却没有。 有什么方法我只能读取垂直变化而不是设备间距的变化吗? 这是我想要检测的: 编辑: “请提出一个数学上合理的定义,你认为’向上移动’。”这是我最初的问题,我怎么能写一个函数来定义平板电脑向上或向下移动的时间? 我认为垂直翻译向上移动。 现在我怎么检测到这个? 我根本不知道从哪里开始,谢谢。

Android:没有内存分配的读取加速度计?

我正在开发Android游戏(2.1+),使用加速度计作为用户输入。 我使用传感器监听器,我在活动开始时使用传感器管理器注册,如下所示: mSensorManager.registerListener(SystemRegistry.inputSystem.mSensorListener, accSensor, SensorManager.SENSOR_DELAY_UI); 这很好用,我只是读取onSensorChanged(SensorEvent event)中的加速度计值,以便在我的游戏循环中使用它: public void onSensorChanged(SensorEvent event){ accX = event.values[0]; accY = event.values[1]; accY = event.values[2]; } 我正在写一个实时游戏,所以我试图避免在我的代码中进行任何内存分配,因为我想最小化垃圾收集。 问题是每次有SensorEvent ,传感器管理器实际上都会分配内存。 以下是ddms分配跟踪器的输出: 51 28 android.hardware.SensorEvent 9 android.hardware.SensorManager$ListenerDelegate createSensorEvent 50 28 float[] 9 android.hardware.SensorEvent 表示在每个事件中分配28 * 2 = 56个字节。 这似乎有经常触发垃圾收集器的效果,这会导致一些滞后……所以这是我的问题:有没有办法实现相同的事情(获取当前的加速度向量),而不分配任何内存? 有没有办法在不等待事件的情况下实际读取此向量的值?

Android获得标准化加速

我希望获得Android手机的加速度矢量。 问题是,加速度计坐标是相对于手机的旋转。 我想要的是“绝对”加速度,即它应该以手机面对的方式返回相同的值。 (我想检测一下滑雪的用户是否在不使用GPS的情况下滑下斜坡。我还需要能够区分滑行和上升的缆车。) 我可以通过将加速度计与陀螺仪相结合来获得这些值,但我不知道如何用陀螺仪来抵消加速度计的值。 这是可能的,如果是的话,怎么样?

如何用加速度计和陀螺仪通过手机测量汽车的速度?

我想知道当前的汽车速度,并通过一条路。 我有一部带加速计和陀螺仪的Android手机,它给我发了数据。 这是坐标电话系统中的数据,可能与汽车的坐标系统不一样。 如何将这种加速度和旋转转换为坐标系的汽车系统?

有没有办法在Android中检索多个传感器数据

我正在尝试获取加速度计和方向数据。 目前,我创建了一个AccelerometerManager和OrientationManager。 他们都做同样的事情; 实现SensorEventListener并从onSensorChanged()侦听器中的values []中检索数据。 有更简单的方法吗? 似乎有两个处理程序重复代码是不必要的。 有没有办法使用组合的加速度计和方向数据一起访问values []数组? 由于2个处理程序,我还必须这样做: orientationManager = new OrientationManager(this); orientationSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); orientationSensorManager.registerListener(orientationManager, orientationSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); accelerometerManager = new AccelerometerManager(this); accelerometerSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); accelerometerSensorManager.registerListener(accelerometerManager, orientationSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);