【问题标题】:Calculate the difference in azimuth angles between 2 Poses计算 2 个姿势之间的方位角差
【发布时间】:2019-09-19 10:05:52
【问题描述】:

我有 2 个Pose 代表相机的 2 个位置,我想知道它们的方位角之间的差异。
较旧的姿势是从具有较旧相机姿势的锚设置中检索的,因此我不应该从 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 个姿势之间的方位角差?

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

【问题讨论】:

    标签: java android augmented-reality arcore


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 好的,实际上非常简单。我无法解释为什么我如此确信我需要使用四元数(我实际上设法使它工作,但它的效率肯定要低得多)。我现在无法尝试,但明天我可能会在验证它确实有效后接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2011-10-18
    • 1970-01-01
    • 2015-03-14
    • 2012-09-18
    • 2011-12-28
    相关资源
    最近更新 更多