我知道这个问题肯定已经好几次解决了,如果你知道它们的存在,请赐教.谢谢.
快速简介:我想从3轴加速度计计算这3个轴中每一个的重力分量.我使用了2轴自由体图来计算出世界XZ,YZ和XY轴上的加速度计的重力分量.但是解决方案似乎略有偏差,对于极端情况只有1个加速度计轴暴露于重力时是可以接受的,但对于45度的俯仰和滚动,总的幅度大于重力(由Xa ^ 2 + Ya ^获得) 2 + Za ^ 2 = g ^ 2; Xa,Ya和Za是其X,Y和Z轴上的加速度计读数.
更多细节:该设备是Nexus One,除了3轴加速度计外,还有一个用于方位角,俯仰和滚转的磁场传感器.
在世界的轴上(Z与重力方向相同,X或Y指向北极,不要认为这很重要吗?),我认为我的设备在YZ轴上有一个间距(P),和XZ轴上的辊(R).由此我使用简单的触发得到:Sin(R)= Ax/Gxz Cos(R)= Az/Gxz Tan(R)= Ax/Az
还有另一组音高,P.
现在我将重力定义为在世界轴上有3个分量,Gxz只能在XZ轴上测量,Gyz用于YZ,Gxy用于XY轴.Gxz ^ 2 + Gyz ^ 2 + Gxy ^ 2 = 2*G ^ 2 2G是因为重力在该定义中有效地包括两次.
哦,XY轴产生更具异国情调的东西......如果需要,我会解释.
从这些方程式我得到了Az的公式,并删除了tan操作,因为我不知道如何处理tan90计算(它是无穷大?).
所以我的问题是,任何人都知道我是否正确/错误或能够指出我正确的方向?
谢谢!DVD
我正在尝试获取加速度计和方向数据.目前,我创建了一个AccelerometerManager和OrientationManager.他们都做同样的事情; 实现SensorEventListener并从onSensorChanged()侦听器中的values []中检索数据.
有更简单的方法吗?似乎有两个处理程序重复代码是不必要的.有没有办法使用组合的加速度计和方向数据一起访问values []数组?
由于有两个处理程序,我还必须这样做:
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);
Run Code Online (Sandbox Code Playgroud) 例如,假设我想检测用户是否做了圆圈手势,这样我就可以在游戏中触发某些内容.是否有一个图书馆可以让我只听一些"circleDectected"事件?
如果没有,如果我开发它,有人会发现这样的东西有价值吗?谢谢!
嗨我想知道android中加速度计的最小和最大范围.
我需要它为x,y,z.
任何人都有确切的价值吗?
[编辑:删除了所有提到的Android版本 - 所有版本的android都存在此问题]
背景:当屏幕关闭时,许多Android手机不会通过在屏幕关闭时调用onSensorChanged()来为Accelerometer读数的应用程序提供更新.此行为在SO上进行了讨论,并在此处进一步说明 http://code.google.com/p/android/issues/detail?id=3708
在某些手机(Nexus S,Droid X2,...)上,加速度计值仅在值发生重大变化时提供.例如,坐在桌子上,每分钟可能有一次或零次更新
为了生成跨手机型号的强大代码,我如何区分每个屏幕缺少更新事件,以及每次非移动缺少更新?我应该维护手机型号的数据库吗?
我已经在您的应用程序中找到了大量设置旋转的示例,但我遇到的问题是切换位于以下位置的手机设置:设置,显示,自动旋转屏幕(复选框).
我希望能够检查手机的旋转状态,将其设置为相反(自动或关闭),然后关闭应用程序.
这就是我所拥有的:
import android.app.Activity;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.Toast;
public class Rotation extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
try{
if (android.provider.Settings.System.getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0) == 1){
android.provider.Settings.System.putInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0);
Toast.makeText(Rotation.this, "Rotation OFF", Toast.LENGTH_SHORT).show();
finish();
}
else{
android.provider.Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1);
Toast.makeText(Rotation.this, "Rotation ON", Toast.LENGTH_SHORT).show();
finish();
}
}
catch(Exception e){
e.printStackTrace();
Toast.makeText(Rotation.this, "Try failed!", Toast.LENGTH_SHORT).show();
finish();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要了解更多信息,请让我知道:)
任何帮助表示赞赏,它强调我!
我一直在研究我们试图解决的问题.我认为这是最好的方法,但请加入你的意见
我们正在尝试计算现实世界驾驶场景中的反应时间,并希望使用移动电话作为数据收集设备.我们想要实现的是在接触到某些提示时驾驶员施加的加速度和更重要的减速度.
我发现这篇论文有很多有用的信息,可以用来加速度计物理
问题是我们很可能没有从0开始的校准时间.但是假设驾驶员从0开始.我们将使用GPS定位来定位车辆,跟踪我们应该计算的时间戳位置数据在提示发生的时间然后使用带时间戳的加速计数据我们应该能够计算他们对提示的反应.
这是我找到解决问题的最佳方法,但是我不确定加速度计数据是否会因无法校准而无法使用,而且振动所见的噪音可能太大而无法使用数据. ..之前有没有人尝试或使用过这些类型的方法?
我正在开发一个应用程序,在其中我应该获得我在体育活动中所做的步骤数.我找到了这段代码:
- (void)countSteps {
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / KUPDATEFREQUENCY];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
px = py = pz = 0;
numSteps = 0;
self.labelSteps.text = [NSString stringWithFormat:@"%d", numSteps];
}
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
float xx = acceleration.x;
float yy = acceleration.y;
float zz = acceleration.z;
float dot = (px * xx) + (py * yy) + (pz * zz);
float a = ABS(sqrt(px * px + py * py + pz * pz));
float b = ABS(sqrt(xx * xx …Run Code Online (Sandbox Code Playgroud) 我想创建一个应用程序,即使屏幕锁定,**也会在设备震动时启动主活动.任何人都可以解释如何做到这一点?
我有一个想法,它需要创建一个在后台运行的服务,但我正在努力实际编码,不知道如何做到这一点.
我写使用一些简单的代码MicroPython上Digistump橡树,这基本上是一个ESP8266接口板运行.我试图了解通过i2c定期读取传感器时看到的行为.
下面的代码(读取ACCEL_XOUT_H和ACCEL_XOUT_L寄存器的值)工作得很好:
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
Run Code Online (Sandbox Code Playgroud)
(该print语句只是从两个补码执行转换.)
正如预期的那样,当我移动imu时,打印出的加速度计值大致实时变化.
但如果我在循环中引入延迟,例如...
>>> import time
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
... time.sleep(1) …Run Code Online (Sandbox Code Playgroud) accelerometer ×10
android ×7
iphone ×3
sensor ×2
algorithm ×1
default ×1
esp8266 ×1
ios ×1
micropython ×1
mobile ×1
mpu6050 ×1
objective-c ×1
orientation ×1
physics ×1
rotation ×1
settings ×1
shake ×1