我正在使用像这样的摇动api:
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventSubtypeMotionShake)
{
[img stopAnimating];
}
}
Run Code Online (Sandbox Code Playgroud)
如何检测到摇晃已停止?
我正在开发一个应用程序,我想跟踪移动用户在GPS不可用的建筑物内的位置.用户在众所周知的固定位置(精确到5厘米内)开始,此时电话中的加速度计将被激活以跟踪相对于该固定位置的任何进一步的移动.我的问题是,在当代智能手机(iphone,Android手机等)中,人们可以准确地根据这些手机通常配备的加速度计来跟踪某些人的位置吗?
具体的例子很好,例如"如果我从起点移动50米X,从起点移动35米Y,从起点移动5米Z,我可以预期我的位置近似在+/- 80之内大多数现有智能手机上的厘米",或者其他什么.
我对卡尔曼滤波器等技术只有肤浅的理解来校正漂移,但是如果这些技术与我的应用相关并且有人想要描述我可能从这些技术中获得的校正的质量,那将是一个加分.
仅使用内置加速度计的手机(Android),如何才能找到它的速度?
我一直在修补这个数学,但无论我想出什么功能都会导致速度呈指数增长.我的假设是,在应用程序启动时,手机处于静止状态.这绝对应该能够找到速度(至少粗略地).
我在物理和数学方面也有不错的背景,所以我对这里的任何概念都不会有任何困难.
我该怎么办?
在自由落体期间,iphone应该在所有三个轴上发送加速度值为0.那么如何检测iphone所覆盖的距离呢?
我想用移动平均线过滤加速度计值,这是怎么做的?谢谢
我试图让矢量的方向指向相机,相对于磁北.我的印象是我需要使用getOrientation()返回的值,但我不确定它们代表什么.当我改变手机的方向时,我从getOrientation()获得的值不会发生可预测的变化(旋转90度不会将值改变90度).我需要知道getOrientation()返回的值是什么意思.到目前为止我所写的内容如下:
package com.example.orientation;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.Toast;
public class Orientation extends Activity{
private SensorManager mSM;
private mSensorEventListener mSEL;
float[] inR = new float[16];
float[] outR= new float[16];
float[] I = new float[16];
float[] gravity = new float[3];
float[] geomag = new float[3];
float[] orientVals = new float[3];
final float pi = (float) Math.PI;
final float rad2deg = 180/pi;
/** Called when the activity is first created. */
@Override …Run Code Online (Sandbox Code Playgroud) rotation accelerometer orientation magnetometer augmented-reality
对于一个项目,我和我的团队一直在尝试使用内置的加速度计和WiiMotion Plus陀螺仪在3D空间中跟踪wiimote.
我们已经能够使用ODE(在http://www.alglib.net/上找到)跟踪旋转和位置,但是我们遇到了从加速度计中移除重力分量的问题.
我们研究了具有公式的Accelerometer重力组件(在C#/ XNA中实现)
private Vector3 RemoveGravityFactor(Vector3 accel)
{
float g = -1f;
float pitchAngle = (Rotation.Z);
float rollAngle = (Rotation.Y);
float yawAngle = (Rotation.X);
float x = (float)(g * Math.Sin(pitchAngle));
float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle));
float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle));
Vector3 offset = new Vector3(x, y, z);
accel = accel - offset;
return accel;
}
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.作为参考,加速度直接来自加速度计,并且在通过ODE工作之后以旋转角度测量旋转.
此外,我们在理解这个公式是如何工作方面遇到了问题.由于我们的跟踪考虑了所有维度,为什么不考虑Yaw?
提前感谢您提供的任何建议或帮助.
编辑:
在与我的队友和老板讨论之后,我们发现如果我们正确使用X,Y和Z,这个公式实际上会有效.我们来到另一个树桩了.
我们遇到的问题是我们正在使用的Wiimote库根据陀螺仪运动返回相对旋转值.换句话说,如果按钮朝上,左右旋转wiimote是偏航,如果按钮面向你,当它应该是整个wiimote的旋转时,偏航是相同的.
我们发现欧拉角可能是我们的答案,但我们不确定如何恰当地使用它们.如果对此新开发项目有任何意见或任何其他建议,请给予他们.
我必须开发与此计步器应用程序相同的功能
我已经非常详细地观察了这个计步器应用程序.
它不是一个完美的计步器应用程序.例如,如果您停留/坐在一个地方并握手,它还会检测步数和距离.
忽略这种理想和重力行为,因为在这个应用程序的说明中已经提到你应该绑你的iPhone,或者你应该把它放在口袋里计算步数.这样,我发现这个应用程序运行良好,它几乎可以检测到所有步骤.
我的问题是:我根据上面的逻辑开发了一个样本,但它没有达到那个水平.例如,有时它会同时检测2-3个步骤.有时它工作正常.
我的代码:
在viewDidLoad中:
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.2]
Run Code Online (Sandbox Code Playgroud)
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
const float violence = 1.2;
static BOOL beenhere;
BOOL shake = FALSE;
if (beenhere) return;
beenhere = TRUE;
if (acceleration.x > violence || acceleration.x < (-1* violence))
shake = TRUE;
if (acceleration.y > violence || acceleration.y < (-1* violence))
shake = TRUE;
if (acceleration.z > violence || acceleration.z < (-1* violence))
shake = TRUE;
if (shake) {
steps=steps+1;
}
beenhere …Run Code Online (Sandbox Code Playgroud) 我有一个实现的类,SensorEventListener我想tilt Angle用我的设备Accelerometer.
我在互联网上查找了一些例子但他们使用了
Sensor.TYPE_MAGNETIC_FIELD.
我相信我的设备没有这个传感器,因为当我进行以下检查时
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(),我得到零.
有没有办法tilt Angle通过使用
Sensor.TYPE_ACCELEROMETER值来获得?
我想知道当前的汽车速度,并通过一条路.我有一部带加速计和陀螺仪的Android手机,它给我发了数据.这是坐标电话系统中的数据可能与汽车的坐标系统不一样.
如何将这种加速度和旋转转换为坐标系的汽车系统?
accelerometer ×10
android ×4
iphone ×3
objective-c ×2
angle ×1
c# ×1
filter ×1
geolocation ×1
gravity ×1
gyroscope ×1
ios ×1
magnetometer ×1
math ×1
orientation ×1
rotation ×1
shake ×1
threshold ×1
tilt ×1
wiimote ×1