java - 计算2个Pose之间的方位角差

标签 java android augmented-reality arcore

我有 2 Pose代表相机的 2 个位置,我想得到它们的方位角之间的差异。
较旧的姿势是从具有较旧相机姿势的 anchor 集中检索的,这样我就不会从 ARCore 的世界理解更新中得到错误。
从当前帧中检索较新的姿势。

我尝试使用 wikipedia 中的这个公式:

psi = atan2(
    2*(qw*qz + qx*qy),
    1-2*(qy*qy + qz*qz)
)

然后我从新角度减去旧角度,但没有成功:当我移动手机仅修改俯仰角度时,我得到的结果也不同。

我认为它不起作用,因为它假定 +Z 为垂直轴,而 +Y 是 ARCore 中的垂直轴。所以我旋转了公式中的轴,使垂直轴为 Y:

psi = atan2(
    2*(qw*qy + qz*qx),
    1-2*(qx*qx + qy*qy)
)

它仍然不起作用,当我只改变音高时,结果仍然不同。显然,这不是正确的转变。

如何计算相机的 2 个位姿之间的方位角差异?

这实际上可能是 Mathematics Stack Exchange 的问题,但我不确定我是否误解了 ARCore 或数学,所以在这里。

最佳答案

使用以下方法计算始终以二维测量的方位角:

public float getAzimuth(PointF aim) {

    float angle = Math.toDegrees(Math.atan2(aim.x - x, aim.y - y));

    // the range of ± 90.0° must be corrected...

    if(angle < 0.0) {
        angle += 360.0;
    }
    return angle;
}

...以下计算距离的方法:

float distance = Math.sqrt((x2 – x1) / 2.0 + 
                           (y2 – y1) / 2.0 + 
                           (z2 – z1) / 2.0); 

...以及以下计算暴跌的方法:

float plunge = Math.asin((z2 – z1) / distance)

关于java - 计算2个Pose之间的方位角差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008566/

相关文章:

java - 即使条件变为 false,代码也会在 if block 内运行

java - 如果我在 Java 中使用字符串作为哈希表键,会出现错误吗?

android - 重复条目 Google Gson

swift - RealityKit – 以编程方式设置 Reality Composer 实体的文本

java - 无状态 session Bean 可以保护 final方法吗?

java - 如何编写一个方法来返回任何非递归基数中数字的字符串表示形式

android - DialogFragment 使用 android.support.v4.app 还是 android.app?

java - 如何检查 Firebase Firestore 事务是否已更新到服务器?

javascript - 使用 8th Wall SDK 与多个图像目标进行增强

iPhone SDK 3.0 相机访问