ARCore姿态和Aruco估计单个标记的姿态

6
我有一个服务器函数,可以从图像中检测和估计aruco标记的姿态。使用estimatePoseSingleMarkers函数,我找到了旋转和平移向量。我需要在Android应用程序中使用ARCore使用此值创建姿态。文档说明姿态需要两个浮点数数组(旋转和平移):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物体位置是完全随机的。
我做错了什么?
这是估计和绘制轴之后从服务器图像中获取的快照。我收到的图像旋转了90度,不确定是否与任何相关内容有关。image server with axis
1个回答

0

cv::aruco::estimatePoseSingleMarkers (link) 返回旋转向量,以 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中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接