标签: accelerometer

iphone指南针倾斜补偿

有没有人已经编程了iphone罗盘标题倾斜补偿?

我有一些方法,但一些帮助或更好的解决方案将是很酷的!

首先,我定义一个向量Ev,由Gv和Hv的叉积计算得出.Gv是由加速度计值构建的重力矢量,Hv是构建磁力计值的标题矢量.Ev与Gv和Hv垂直,因此它正朝着东方的方向前进.

SECOND我定义了一个向量Rv,由交叉积Bv和Gv计算得出.Bv是我的向量,它被定义为[0,0,-1].Rv垂直于Gv和Bv并始终显示在右侧.

第三,这两个向量Ev和Rv之间的角度应该是我的校正标题.计算角点i构建点积和arcos.

phi = arcos(Ev*Rv/| Ev |*| Rv |)

理论上它应该可以工作,但也许我必须规范化向量?!

有没有人为此得到解决方案?

谢谢,m01d

iphone accelerometer tilt compass-geolocation

6
推荐指数
1
解决办法
2801
查看次数

Android - 唤醒锁无法正常获取,应用程序需要继续在待机状态下运行

在我的应用程序中,在主要活动的onCreate()方法中,我正在创建唤醒锁定,以便在手机进入待机/屏幕关闭时CPU将继续运行.

同样在onCreate方法中,我有意创建一个使用加速度计的服务.当应用程序打开并监控加速度计值时,此服务需要持续运行(我知道这对电池不利,但我需要它来做).这是我目前的代码,服务开始很好.

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);  

        PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Howaya");
        wl.acquire();

        if (appStart == true)  
        { 
            Intent AccelService = new Intent(this, Accelerometer.class);
            AccelService.putExtra("unreg", false);
            startService(AccelService);
        }
        appStart = false;
  }
Run Code Online (Sandbox Code Playgroud)

我的清单中设置了以下权限 -

<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

我尝试过不同的锁 - 昏暗的屏幕和全亮度也无济于事.我在logcat上的输出在这里 -

F/PowerManager(15628): android.util.Log$TerribleFailure: WakeLock finalized while still held: Howaya
F/PowerManager(15628):  at android.util.Log.wtf(Log.java:260)
F/PowerManager(15628):  at android.util.Log.wtf(Log.java:239)
F/PowerManager(15628):  at android.os.PowerManager$WakeLock.finalize(PowerManager.java:329)
F/PowerManager(15628):  at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)

我见过有人说部分唤醒锁没有像他们应该做的那样工作,比如这个链接谷歌待机错误页面,但这个是去年发布和关闭所以我不知道是这样的,请问有人可以帮忙吗?关于最后一点我也有HTC Desire,谢谢.

android accelerometer standby android-wake-lock wakelock

6
推荐指数
2
解决办法
6195
查看次数

Windows Phone 7上的GPS速度有多可靠

我正在开发一个Windows Phone 7应用程序,我想告诉用户他们的速度有多快.像......一样简单

当前速度:20 km/h最高速度:33 km/h平均速度:25 km/h

我似乎有两个选择:1)使用加速度计2)使用GPS

我想知道人们是否有关于使用哪种方法的建议.

我更喜欢使用GPS(因为它更容易提取),但我知道GPS位置通常由于各种原因而不准确,但速度有多准确?

gps accelerometer windows-phone-7

6
推荐指数
1
解决办法
683
查看次数

跟踪没有GPS的iPhone的小动作

我必须编写一个iphone应用程序,它可以跟踪iphone本身的运动,考虑到它的初始位置,而不使用GPS.也就是说,我只能使用陀螺仪和加速度计提供的数据.我需要测量的距离相当小,我所寻找的精度最多是40-50厘米(~2英尺).

这可能吗?如果是这样,最好的方法是什么?另外,您是否知道已经实现此功能的任何现有(也可能是开源)项目?

非常感谢!

iphone gps accelerometer ios4 gyroscope

6
推荐指数
1
解决办法
1万
查看次数

iOS:我可以从加速度计数据中获得俯仰/偏航/滚动吗?

我想在iPad上找出音高,偏航和滚动1.由于没有deviceMotion功能,我可以从加速度计中获取这些数据吗?我假设我可以使用它返回的向量来比较参考向量,即重力.

iOS是否检测到设备何时静止,然后将其作为重力矢量?或者我必须这样做?谢谢.

accelerometer ipad ios

6
推荐指数
1
解决办法
6051
查看次数

Android传感器CPU使用情况

我试图从三星Galaxy Tab GT-P1000读取多个传感器,相对于我使用的应用程序,它们似乎相当糟糕地占用了CPU.

作为测试,我创建了一个简短的程序,它实现了Accelerometer传感器的SensorEventListener,但对传感器读数没有任何作用:

public class SensorTestActivity extends Activity implements SensorEventListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SensorManager oSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        oSensorManager.registerListener(this, oSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub

    }
}
Run Code Online (Sandbox Code Playgroud)

这导致我在调试时(即我的设备已插入我的PC)10%的CPU使用率和5%的使用率而我不是.如果我使用SENSOR_DELAY_FASTEST,那么在我调试时,使用率会持续增长30%,而在我调试时则增长20%.

当我想使用多个传感器时,这会产生一个大问题,因为它们都具有高CPU使用率且没有任何数据处理.我已经使用了Android Market的Compass应用程序,并且他们在给定时间都没有使用超过5%的CPU,所以我觉得我错过了一些明显的东西,但找不到其他人有同样的问题.

我没有为这个应用程序编辑清单文件或布局 - 它是Eclipse制作的默认模板,我添加了传感器.

更新:我读取CPU使用率的方法存在缺陷,因为我正在使用任务管理器来测量它.我的应用程序不是在任务管理器打开时使用onPause停止传感器,而大多数其他应用程序会这样做.

android accelerometer cpu-usage android-sensors

6
推荐指数
1
解决办法
1615
查看次数

计算手机角度(Android)

我知道之前有人问过,但我找不到我要找的答案.

我想做的就是把手机放在天空,知道我相对于地平线的角度.所以,如果我把它直接放在我上面(屏幕朝向地面)那么它应该读取90度,如果我把它放在我面前(屏幕面向我),它应该读取0度.

我已经摸索了从加速度计获取数据的一些基础知识,我相信我有X,Y和Y值.我怎样才能拿出这些点并找到我的角度?下面是我收集坐标的OnSensorChanged事件.

    public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
   mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
   mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
   float R[] = new float[9];
   float I[] = new float[9];

  boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
   if (success) {
       float orientation[] = new float[3];
       SensorManager.getOrientation(R, orientation);
       playerAngle = (float) Math.toDegrees(Math.atan2(orientation[1], orientation[0]));

    }
Run Code Online (Sandbox Code Playgroud)

android accelerometer

6
推荐指数
0
解决办法
2768
查看次数

如何确定Android设备是否有加速度计?

我想检查Android设备是否有加速度计,以便我可以发出一个祝酒消息,说如果没有加速度计,游戏将无法在当前设备上正常工作.我正在寻找这样的东西:

if(DEVICE_HAS_ACCELEROMETER == false){
Toast.makeText(context,"No Accelerometer Found.",Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)

如果您可以填写DEVICE_HAS_ACCELEROMETER部分,那就可以完成这项工作.

PS:我不参加活动.

android accelerometer

6
推荐指数
1
解决办法
4766
查看次数

使用R和传感器加速度计数据检测跳转

我对传感器数据非常着迷.我使用我的iPhone和一个名为SensorLog的应用程序捕获加速度计数据,同时我站立并推动我的双腿跳跃.

我的目标是使用R创建一个模型,该模型可以识别跳跃以及我在空中的时间.我不确定如何进行这样的挑战.我有加速计数据的时间序列.

https://drive.google.com/file/d/0ByWxsCBUWbqRcGlLVTVnTnZIVVk/view?usp=sharing

一些问题:

  • 如何在时间序列数据中检测到跳转?
  • 如何识别出风时间部分?
  • 如何训练这样的模型?

在此输入图像描述

下面是用于创建上图的R代码,这是我站立并进行简单的跳转.

谢谢!

# Training set
sample <- read.csv("sample-data.csv")

# Sum gravity
sample$total_gravity <- sqrt(sample$accelerometerAccelerationX^2+sample$accelerometerAccelerationY^2+sample$accelerometerAccelerationZ^2)

# Smooth our total gravity to remove noise
f <- rep(1/4,4)
sample$total_gravity_smooth <- filter(sample$total_gravity, f, sides=2)

# Removes rows with NA from smoothing
sample<-sample[!is.na(sample$total_gravity_smooth),]

#sample$test<-rollmaxr(sample$total_gravity_smooth, 10, fill = NA, align = "right")

# Plot gravity
plot(sample$total_gravity, type="l", col=grey(.2), xlab="Series", ylab="Gravity", main="Accelerometer Gravitational Force")
lines(sample$total_gravity_smooth, col="red")
stdevs <- mean(sample$total_gravity_smooth)+c(-2,-1,+1,+2)*sd(sample$total_gravity_smooth)
abline(h=stdevs)
Run Code Online (Sandbox Code Playgroud)

r machine-learning time-series accelerometer iot

6
推荐指数
1
解决办法
1601
查看次数

如何在iPhone中使用加速度计,gryoscope和磁力计获取用户位置?

使用内置惯性测量单元(IMU)(也称为行人航位推算(PDR))的用户定位的简单公式如下:

x= x(previous)+step length * sin(heading direction)
y= y(previous)+step length *cos(heading direction )
Run Code Online (Sandbox Code Playgroud)

我们可以使用CMMotionManager类的motionManager属性来访问加速度计,陀螺仪和磁力计的原始值.此外,我们可以获得attitudes滚动,俯仰和偏航等值.步长可以计算为加速度的双平方根.但是,我对标题方向感到困惑.一些已发表的文献使用磁力计和陀螺仪数据的组合来估计航向.我可以看到它CLHeading也提供了标题信息.有一些在线教程,特别是对于像这样的Android平台来估计用户位置.但是,它没有给出任何适当的数学解释.

我跟着像许多在线资源这个,这个,这个这个做一个PDR应用.我的应用程序可以检测步骤并正确地给出步长,但其输出充满错误.我认为错误是由于缺乏合适的航向.我使用以下关系从磁力计获得前进方向.

magnetometerHeading = atan2(-self.motionManager.magnetometerData.magneticField.y, self.motionManager.magnetometerData.magneticField.x);
Run Code Online (Sandbox Code Playgroud)

同样,来自陀螺仪:

grysocopeHeading +=-self.motionManager.gyroData.rotationRate.z*180/M_PI;
Run Code Online (Sandbox Code Playgroud)

最后,我给前一个标题干涉,gryoscopeheading和磁力计的比例权重如下:

headingDriection = (2*headingDirection/5)+(magnetometerHeading/5)+(2*gryospoceHeading/5);
Run Code Online (Sandbox Code Playgroud)

我从已发表的期刊论文中采用了这种方法.但是,我的工作中出现了很多错误.我的方法有误吗?我究竟应该做些什么才能获得正确的航向,以便定位估算误差最小?

任何帮助,将不胜感激.

谢谢.

编辑

我注意到在使用陀螺仪数据计算航向时,我没有将旋转速率(以弧度/秒为单位)与增量时间相乘.为此,我添加了以下代码:

CMDeviceMotion *motion = self.motionManager.deviceMotion; [_motionManager startDeviceMotionUpdates]; if(!previousTime) previousTime = motion.timestamp; double deltaTime = motion.timestamp - previousTime; previousTime = motion.timestamp;

然后我更新了陀螺仪标题:

gyroscopeHeading+= -self.motionManager.gryoData.rotationRate.z*deltaTime*180/M_PI;

本地化结果仍然不接近真实位置.我的方法是否正确?

objective-c accelerometer magnetometer gyroscope indoor-positioning-system

6
推荐指数
0
解决办法
292
查看次数