检测机器人加速度运动加速度、机器人

2023-09-07 16:30:11 作者:听弦断丶断那三千痴缠

即时工作,需要检测加速度运动像晃动或倾斜手机向右,向左,向上和向下的应用程序,基于这些运动我送了一些关键我的UPnP设备。

例如,如果正确的运动检测增加了媒体服务器,反之亦然的音量。

请帮我在这。

我已经尝试了一些例子。这是工作的罚款左右。但我需要为上下一个更好的解决方案。

在这里,我添加code。

 的SensorManager =(的SensorManager)getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(这一点,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
            SensorManager.SENSOR_DELAY_NORMAL);
    lastUpdate = System.currentTimeMillis的();


    @覆盖
公共无效onSensorChanged(SensorEvent事件){
    如果(event.sensor.getType()== Sensor.TYPE_ACCELEROMETER){

        浮动[]值= event.values​​;

        // 运动
        浮X =值[0];
        浮Y =值[1];
        浮Z =值[2];

        / *浮动accelationSquareRoot =(X * X + Y * Y + Z * Z)
                /(SensorManager.AXIS_X * SensorManager.AXIS_X); * /

        Log.d(奶昔,X:+ X +Y:+ Y +Z+ Z);

        长actualTime = System.currentTimeMillis的();
        如果((actualTime  -  lastUpdate)→100)
        {
            长diffTime =(actualTime  -  lastUpdate);
            lastUpdate = actualTime;


        如果(圆形(X,4)> 8.0000){
            Log.d(传感器,=====左====);


        }
        否则,如果(圆(X,4)< -8.0000){
            Log.d(传感器,=====右====);

        }
        否则,如果(圆(Z,4)< -0.0){
           Log.d(传感器,===== UP ====);


        }

        否则,如果(圆形(Y,4)< 1.0){
            Log.d(传感器,===== DOWN ====);

        }

        浮动速度= Math.abs(X + Y + Z  -  last_x  -  last_y  -  last_z)/ diffTime * 10000;

        如果(速度> SHAKE_THRESHOLD){
            //Log.d("sensor,摇检测瓦特/速度:+速度);
            //Toast.makeText(this,摇检测瓦特/速度:+速度,Toast.LENGTH_SHORT).show();
        }
        last_x = X;
        last_y = Y;
        last_z = Z;
        }
    }

}
 
机器人产业加速发展, 运动控制器研发成为突破重点

解决方案

X轴是水平的指向右侧,Y轴是垂直的,并指出了和朝向的正面外部的Z轴点屏幕。在这个系统中,坐标后面的屏幕具有负Z值

有关详细 Android开发者

在你的情况试试这个。

 如果(圆(X,4)> 8.0000){
            Log.d(传感器,=====左====);


        }
        否则,如果(圆(X,4)< -8.0000){
            Log.d(传感器,=====右====);

        }
        否则,如果(圆形(Y,4)< 8.0){
           Log.d(传感器,===== UP ====);


        }

        否则,如果(圆形(Y,4)< -8.0){
            Log.d(传感器,===== DOWN ====);

        }
 

Im working on an application which needs to detect accelerometer motion like shake or tilt the phone to right, left, up and down, based on these motions i'm sending some keys to my UPnP device.

for example if right motion is detected increase the volume of the media server and viceversa.

Please help me on this.

I have tried some example. it is working fine for Left and right. but i need a better solution for up and down.

here i add the code.

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
    lastUpdate = System.currentTimeMillis();


    @Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

        float[] values = event.values;

        // Movement
        float x = values[0];
        float y = values[1];
        float z = values[2];

        /*float accelationSquareRoot = (x * x + y * y + z * z)
                / (SensorManager.AXIS_X * SensorManager.AXIS_X);*/

        Log.d("Shakes","X: "+x+"  Y: "+y+"  Z: "+z);

        long actualTime = System.currentTimeMillis();
        if ((actualTime - lastUpdate) > 100) 
        {
            long diffTime = (actualTime - lastUpdate);
            lastUpdate = actualTime;


        if(Round(x,4)>8.0000){
            Log.d("sensor", "=====LEFT====");


        }
        else if(Round(x,4)<-8.0000){
            Log.d("sensor", "=====RIGHT====");

        }
        else if(Round(z,4) < -0.0){
           Log.d("sensor", "=====UP====");


        }

        else if(Round(y,4) < 1.0){
            Log.d("sensor", "=====DOWN====");

        }

        float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

        if (speed > SHAKE_THRESHOLD) {
            //Log.d("sensor", "shake detected w/ speed: " + speed);
            //Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
        }
        last_x = x;
        last_y = y;
        last_z = z;
        }
    }

}

解决方案

The X axis is horizontal and points to the right, the Y axis is vertical and points up and the Z axis points towards the outside of the front face of the screen. In this system, coordinates behind the screen have negative Z values.

for more detail Android Developer

in your case try this.

        if(Round(x,4)>8.0000){
            Log.d("sensor", "=====LEFT====");


        }
        else if(Round(x,4)<-8.0000){
            Log.d("sensor", "=====RIGHT====");

        }
        else if(Round(y,4) < 8.0){
           Log.d("sensor", "=====UP====");


        }

        else if(Round(y,4) < -8.0){
            Log.d("sensor", "=====DOWN====");

        }