android - ARCore Pose 和 Aruco 估计PoseSingleMarkers
问题描述
我有一个服务器功能,可以从图像中检测和估计 aruco 标记的姿势。
使用该函数estimatePoseSingleMarkers
,我找到了旋转和平移向量。我需要在带有 ARCore 的 Android 应用程序中使用此值来创建 Pose。
文档说 Pose 需要两个浮点数组(旋转和平移):https ://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/Pose 。
float[] newT = new float[] { t[0], t[1], t[2] };
Quaternion q = Quaternion.axisAngle(new Vector3(r[0], r[1], r[2]), 90);
float[] newR = new float[]{ q.x, q.y, q.z, q.w };
Pose pose = new Pose(newT, newR);
放置在这个姿势中的 3D 对象的位置是完全随机的。
我究竟做错了什么?
解决方案
cv::aruco::estimatePoseSingleMarkers
(链接) 以Rodrigues格式返回旋转向量。按照文档
w = norm( r ) // angle of rotation in radians
r = r/w // unit axis of rotation
因此
float w = sqrt( r[0]*r[0] + r[1]*r[1] + r[2]*r[2] );
// handle w==0.0 separately
// Get a new Quaternion using an axis/angle (degrees) to define the rotation
Quaternion q = Quaternion.axisAngle(new Vector3(r[0]/w, r[1]/w, r[2]/w), w * 180.0/3.14159 );
除了提到的直角旋转外,应该可以工作。也就是说,如果镜头参数输入estimatePoseSingleMarkers
正确或达到一定精度。
推荐阅读
- javascript - Axios 详细返回嵌套对象作为响应
- xml - 如何使用 Perl 模块 XML::LibXML 替换 XML 中相似父节点列表中的特定子节点值
- html - HTML表格边框仅在中间
- debugging - 未找到上下文根 MobileFirst 7.1
- pandas - 熊猫数据透视表选择具有最大值的行
- xamarin - APNS证书制作
- javascript - 如何在 redux 操作中从 catch 返回
- ruby-on-rails - Rails 遗留代码中的一些以“;1”结尾的行
- kotlin - 斑点虫与 Kotlin 兼容吗?
- groovy - Weblogic 12.2.1.3 InvalidJarIndexException