Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Android sensor: getRotationMatrix() returns wrong values, why?
- A=R*A'
- public void onSensorChanged(SensorEvent event) {
- synchronized (this) {
- switch(event.sensor.getType()){
- case Sensor.TYPE_ACCELEROMETER:
- accelerometervalues = event.values.clone();
- break;
- case Sensor.TYPE_MAGNETIC_FIELD:
- geomagneticmatrix =event.values.clone();
- break;
- }
- if (geomagneticmatrix != null && accelerometervalues != null) {
- float[] Rs = new float[16];
- float[] I = new float[16];
- SensorManager.getRotationMatrix(Rs, I, accelerometervalues, geomagneticmatrix);
- float resultVec[] = new float[4];
- float relativacc[]=new float [4];
- relativacc[0]=accelerationvalues[0];
- relativacc[1]=accelerationvalues[1];
- relativacc[2]=accelerationvalues[2];
- relativacc[3]=0;
- Matrix.multiplyMV(resultVec, 0, Rs, 0, relativacc, 0);
- //resultVec[] is the vector acceleration relative to world coordinates system..but doesn't WORK!!!!!
- }
- }
- }
- float[] Rs = new float[9];
- float[] I = new float[9];
- SensorManager.getRotationMatrix(Rs, I, accelerationvalues, geomagneticmatrix);
- float resultVec[] = new float[4];
- resultVec[0]=Rs[0]*accelerationvalues[0]+Rs[1]*accelerationvalues[1]+Rs[2]*accelerationvalues[2];
- resultVec[1]=Rs[3]*accelerationvalues[0]+Rs[4]*accelerationvalues[1]+Rs[5]*accelerationvalues[2];
- resultVec[2]=Rs[6]*accelerationvalues[0]+Rs[7]*accelerationvalues[1]+Rs[8]*accelerationvalues[2];
- Rs separated by " " Rs[0] Rs[1]....Rs[8]
- Av separated by " " accelerationvalues[0] ...accelerationvalues[2]
- rV separated by " " resultVec[0] ...resultVec[2]
- `(0.00112, -0.0004, 10)`
- resultVec[0]=Rs[0]*accelerationvalues[0];
- Rs[0]: 0.24105562
- accelerationValues[0]: 6.891896
- resultVec[0]: 1.1920929E-7
- Rs[0] = 0.2;
- resultVec[0] = Rs[0] * 6.8
- Rs[0] = 0.2;
- accelerationValues[0] = 6.8
- resultVec[0] = Rs[0] * accelerationValues[0];
Add Comment
Please, Sign In to add comment