android - 使用加速度计机器人的运动方向不起作用

标签 android android-sensors

我正在开发一个 android 应用程序来获取 android 设备的方向。

我正在使用下面的代码:

 public class AccelerometerDirection  extends Activity implements SensorEventListener {
    TextView textView;
    StringBuilder builder = new StringBuilder();

    float [] history = new float[2];
    String [] direction = {"NONE","NONE"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        textView = new TextView(this);
        setContentView(textView);

        SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor accelerometer = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
        manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {

        float xChange = history[0] - event.values[0];
        float yChange = history[1] - event.values[1];

        history[0] = event.values[0];
        history[1] = event.values[1];

        if (xChange > 2){
          direction[0] = "LEFT";
        }
        else if (xChange < -2){
          direction[0] = "RIGHT";
        }

        if (yChange > 2){
          direction[1] = "DOWN";
        }
        else if (yChange < -2){
          direction[1] = "UP";
        }

        builder.setLength(0);
        builder.append("x: ");
        builder.append(direction[0]);
        builder.append(" y: ");
        builder.append(direction[1]);

        textView.setText(builder.toString());
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // nothing to do here
    }
}

引用这个How can I get the direction of movement using an accelerometer? .

但是工作很糟糕,我没有得到准确的值。我尝试了不同的常数值,没有用。任何想法请分享。

最佳答案

此行为您提供不同设备在 50 赫兹或 100 赫兹的非常高频率下的值

manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);

因此,即使设备处于静止状态,对于每次读数,您的输出也会发生变化,因为读数加速度计不是很准确。

所以要么用低通滤波器过滤你的读数,要么使用频率较低的读数(比如 1 HZ)

manager.registerListener(this, accelerometer, 1000000);

但是低通滤波器是获得平滑行为的最佳选择

关于android - 使用加速度计机器人的运动方向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14332300/

相关文章:

android - Android 中的 setRotationY() 宽度 API10

android - Android 上的 Netty - InvalidKeyException

android - 未找到 native Stitch 的实现

Android 倾斜补偿指南针

java - 为什么 TYPE_ROTATION_VECTOR 传感器返回空值?

android - 方法 onPause( ), onResume( ) 未定义类型

android - 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

android - 在 Android 应用程序中为 FFMPEG 运行 exec() 时出错

android - 如何检测android中的翻转 Action ?

android - 在繁忙的 ListView 中更新 TextView 而不会失去 Spinner 焦点