質問

GET ROTICAL MATRIX値にpublic static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)が含まれています ここでfloat[] gravityを計算できますか? orientationAccelerometer

の両方を使用してMagnetic fieldを計算するコードのサンプルを見つけました
boolean success = SensorManager.getRotationMatrix(
   matrixR,
   matrixI,
   valuesAccelerometer,
   valuesMagneticField);

if(success){
SensorManager.getOrientation(matrixR, matrixValues);

double azimuth = Math.toDegrees(matrixValues[0]);
double pitch = Math.toDegrees(matrixValues[1]);
double roll = Math.toDegrees(matrixValues[2]);

readingAzimuth.setText("Azimuth: " + String.valueOf(azimuth));
readingPitch.setText("Pitch: " + String.valueOf(pitch));
 readingRoll.setText("Roll: "+String.valueOf(roll));
}
.

私の質問は次のとおりです。

  • は向き値は回転行列の値?
  • です。
  • いいえの場合、磁気を使用して回転行列の値を取得するには、このコードを実装できますか。フィールド?

回転行列を取得するためにこのコードを使用する

 public void onSensorChanged(SensorEvent sensorEvent) {
    if (timestamp != 0) {
        final double dT = (sensorEvent.timestamp - timestamp) * NS2S;
            double magneticX = sensorEvent.values[0];
            double magneticY = sensorEvent.values[1];
            double magneticZ = sensorEvent.values[2];
                        double omegaMagnitude =Math.sqrt(magneticX*magneticX + magneticY*magneticY + magneticZ*magneticZ);

                        if (omegaMagnitude > EPSILON) {
                            magneticX /= omegaMagnitude;
                            magneticY /= omegaMagnitude;
                            magneticZ /= omegaMagnitude;
        }
                        double thetaOverTwo = omegaMagnitude * dT / 2.0f;
                        double sinThetaOverTwo =Math.sin(thetaOverTwo);
                        double cosThetaOverTwo = Math.cos(thetaOverTwo);
                        deltaRotationVector[0] = (double) (sinThetaOverTwo * magneticX);
                        deltaRotationVector[1] = (double) (sinThetaOverTwo * magneticY);
                        deltaRotationVector[2] = (double) (sinThetaOverTwo * magneticZ);
                        deltaRotationVector[3] = cosThetaOverTwo;


    }
     double[] deltaRotationMatrix = new double[9];
     SensorManager.getRotationMatrixFromVector(deltaRotationMatrix, deltaRotationVector);
}
.

しかし問題はこのgetRotationMatrixFromVectorであるSensor.AnyのアイデアのためにUndefineを言うのですか?

役に立ちましたか?

解決

向きは、磁気北に関連する角度のみを提供するため、回転行列ではありません。あなたはあなたのデバイスフレームから地球のフレームへの座標をこのように変換するのに役立つ回転行列(方向余弦行列)を得ることができます:

wikipediaからのDCM

azimuth =方位角(ラジアン)

pitch =ピッチ(ラジアン)

Roll =ロール(ラジアン)

他のヒント

これが古いスレッドであることを知っていますが、それが助けている場合は、3x3回転行列が実際に承認された答えの変動によって与えられると思います。特定するには、Androidの回転行列は

です。
     (cosφ cosψ - sinφ sinψ sinθ)     sinφ cosθ     ( cosφ sinψ + sinφ cosψ sinθ)
    -(sinφ cosψ + cosφ sinψ sinθ)     cosφ cosθ     (-sinφ sinψ + cosφ cosψ sinθ)
              -sinψ cosθ                 -sinθ                  cosφ cosθ
.

ここで

    φ = azimuth
    θ = pitch
    ψ = roll
.

3×3アンドロイド回転行列R [0] ~R [8](質問の行列R)を介して

    R[0] R[1] R[2]
    R[3] R[4] R[5]
    R[6] R[7] R[8]
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top