首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用加速度计读取android手机的xyz坐标?

如何使用加速度计读取android手机的xyz坐标?
EN

Stack Overflow用户
提问于 2018-04-08 06:45:56
回答 2查看 0关注 0票数 0

我将开发Android应用程序,它需要在3D空间上读取手机的x,y,z坐标

我想写一个简单的代码和测试在设备上。

EN

回答 2

Stack Overflow用户

发布于 2018-04-08 15:42:27

要从加速位置获得位置,您需要将其整合两次。

积分加速度给你速度,积分速度给你的位置。

请记住,积分噪声会产生漂移,积分漂移会产生很多漂移,因此android传感器往往会产生相当多的噪音。

在我的Galaxy S3上,使用Google的线性加速度计复合传感器,我可以在5秒内将位置漂移降至0.02米。

我不确定您是否可以在姜饼上使用线性加速度传感器。如果你不能在整合之前去除重力。

如果你还没有,请在这里阅读所有内容 http://developer.android.com/guide/topics/sensors/sensors_motion.html

关于android中运动传感器的一个很好的说法

http://www.youtube.com/watch?v=C7JQ7Rpwn2k

码:

代码语言:javascript
复制
static final float NS2S = 1.0f / 1000000000.0f;
float[] last_values = null;
float[] velocity = null;
float[] position = null;
long last_timestamp = 0;

@Override
public void onSensorChanged(SensorEvent event) {
    if(last_values != null){
        float dt = (event.timestamp - last_timestamp) * NS2S;

        for(int index = 0; index < 3;++index){
            velocity[index] += (event.values[index] + last_values[index])/2 * dt;
            position[index] += velocity[index] * dt;
        }
    }
    else{
        last_values = new float[3];
        velocity = new float[3];
        position = new float[3];
        velocity[0] = velocity[1] = velocity[2] = 0f;
        position[0] = position[1] = position[2] = 0f;
    }
    System.arraycopy(event.values, 0, last_values, 0, 3);
    last_timestamp = event.timestamp;
}
票数 0
EN

Stack Overflow用户

发布于 2018-04-08 16:22:53

首先获取SensorManager和Sensor的实例。 里面onCreate():

代码语言:javascript
复制
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

在此之后,重写onSensorChanged(SensorEvent event)并用于event.values[]获得坐标:

代码语言:javascript
复制
@Override
public void onSensorChanged(SensorEvent event) {
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档