计算2个Pose之间的方位角差
Calculate the difference in azimuth angles between 2 Poses
我有 2 个 Pose
代表相机的 2 个位置,我想得到它们的方位角之间的差异。
旧姿势是从具有旧相机姿势的锚点集检索的,因此我不应该从 ARCore 的世界理解更新中得到错误。
从当前帧中检索到较新的姿势。
我尝试使用 wikipedia 中的这个公式:
psi = atan2(
2*(qw*qz + qx*qy),
1-2*(qy*qy + qz*qz)
)
然后我从新角度减去旧角度,但没有成功:当我移动 phone 仅修改俯仰角度时,我得到的结果也不同。
我认为它不起作用,因为它假定 +Z 是垂直轴,而 +Y 是 ARCore 中的垂直轴。所以我旋转了公式中的轴,使垂直轴为 Y :
psi = atan2(
2*(qw*qy + qz*qx),
1-2*(qx*qx + qy*qy)
)
还是不行,只改变音高,结果还是不一样。显然这不是正确的转换。
如何计算相机 2 个位姿之间的方位角差异?
这实际上可能是数学堆栈交换的问题,但我不确定我是否误解了 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)
我有 2 个 Pose
代表相机的 2 个位置,我想得到它们的方位角之间的差异。
旧姿势是从具有旧相机姿势的锚点集检索的,因此我不应该从 ARCore 的世界理解更新中得到错误。
从当前帧中检索到较新的姿势。
我尝试使用 wikipedia 中的这个公式:
psi = atan2(
2*(qw*qz + qx*qy),
1-2*(qy*qy + qz*qz)
)
然后我从新角度减去旧角度,但没有成功:当我移动 phone 仅修改俯仰角度时,我得到的结果也不同。
我认为它不起作用,因为它假定 +Z 是垂直轴,而 +Y 是 ARCore 中的垂直轴。所以我旋转了公式中的轴,使垂直轴为 Y :
psi = atan2(
2*(qw*qy + qz*qx),
1-2*(qx*qx + qy*qy)
)
还是不行,只改变音高,结果还是不一样。显然这不是正确的转换。
如何计算相机 2 个位姿之间的方位角差异?
这实际上可能是数学堆栈交换的问题,但我不确定我是否误解了 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)