ARCore Pose 和 Aruco 估计PoseSingleMarkers
Posted
技术标签:
【中文标题】ARCore Pose 和 Aruco 估计PoseSingleMarkers【英文标题】:ARCore Pose and Aruco estimatePoseSingleMarkers 【发布时间】:2019-06-02 09:16:01 【问题描述】:我有一个服务器函数,可以从图像中检测和估计 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 物体的位置是完全随机的。
我做错了什么?
这是估计和绘制轴后服务器图像的快照。 我收到的图像旋转了 90°,不确定它是否与任何东西有关。
【问题讨论】:
【参考方案1】: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
。
【讨论】:
以上是关于ARCore Pose 和 Aruco 估计PoseSingleMarkers的主要内容,如果未能解决你的问题,请参考以下文章
week63 PnP位姿估计 基于ArUco Marker来估算camera的位姿
人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码