use*_*127 5 android gyroscope android-sensors
到目前为止,我已经在互联网上进行了薄弱的搜索。我正在尝试解决一个问题,我需要从手机起点开始的旋转度数。为了知道用户是否向上或向下移动手机,我使用了加速度计,它一开始有点不稳定,但我设法使其稳定。我现在需要围绕它自身旋转的角度。就像方向传感器一样,它已被弃用。然后我尝试使用磁力计,但我很不稳定。然后,当我使用示例代码时,我确定我想尝试使用陀螺仪:
// This timestep's delta rotation to be multiplied by the current rotation
// after computing it from the gyro sample data.
if (timestamp != 0) {
final float dT = (event.timestamp - timestamp) * NS2S;
// Axis of the rotation sample, not normalized yet.
float axisX = event.values[0];
float axisY = event.values[1];
float axisZ = event.values[2];
// Calculate the angular speed of the sample
float omegaMagnitude = (float) Math.sqrt(axisX*axisX + axisY*axisY + axisZ*axisZ);
// Normalize the rotation vector if it's big enough to get the axis
if (omegaMagnitude > EPSILON) {
axisX /= omegaMagnitude;
axisY /= omegaMagnitude;
axisZ /= omegaMagnitude;
}
// Integrate around this axis with the angular speed by the timestep
// in order to get a delta rotation from this sample over the timestep
// We will convert this axis-angle representation of the delta rotation
// into a quaternion before turning it into the rotation matrix.
float thetaOverTwo = omegaMagnitude * dT / 2.0f;
float sinThetaOverTwo = (float) Math.sin(thetaOverTwo);
float cosThetaOverTwo = (float) Math.cos(thetaOverTwo);
deltaRotationVector[0] = sinThetaOverTwo * axisX;
deltaRotationVector[1] = sinThetaOverTwo * axisY;
deltaRotationVector[2] = sinThetaOverTwo * axisZ;
deltaRotationVector[3] = cosThetaOverTwo;
}
timestamp = event.timestamp;
float[] deltaRotationMatrix = new float[9];
SensorManager.getRotationMatrixFromVector(deltaRotationMatrix, deltaRotationVector);
// User code should concatenate the delta rotation we computed with the current rotation
// in order to get the updated rotation.
// rotationCurrent = rotationCurrent * deltaRotationMatrix;
Run Code Online (Sandbox Code Playgroud)
这段代码取自他们的文档,我是否可以将其转换为 360 度?或者我可以获得诸如手机偏离起点多少度之类的值?
提前致谢。
使用getRotationMatrix()在两个感兴趣的时间点获取 3x3 旋转矩阵R1和。您想知道与对齐的旋转量。R2angleRR1R2
首先计算R:
R = R1 * transpose(R2)
Run Code Online (Sandbox Code Playgroud)
然后计算这个旋转的角度:
angle = acos((trace(R)-1)/2)
Run Code Online (Sandbox Code Playgroud)
就这些。
| 归档时间: |
|
| 查看次数: |
13647 次 |
| 最近记录: |