理论教育 ARMarker位姿估计方法在自主水下航行器导航控制中的应用

ARMarker位姿估计方法在自主水下航行器导航控制中的应用

时间:2023-08-26 理论教育 版权反馈
【摘要】:由于基于正方形的标记系统能够基于角点检测实现图像坐标中控制点位置的精确测定[12-14],因此我们采用了一种基于正方形基准标记检测的AR Marker进行位姿估计,被称为Ar Uco,如图9-7所示。提取Marker中的二进制图像区域并获得其中的信息。确定哪些候选标记是Marker,哪些是环境的一部分。此外,由于Marker的二进制区域具有旋转不变性,因此能够唯一地确定四个角点的顺序。对于①,则将这个Marker的结果放入中值滤波缓冲区中。对于③,则删除对应的Marker的记录。

ARMarker位姿估计方法在自主水下航行器导航控制中的应用

基于矩形目标约束的光信标阵列经过合理设计,能够在数十米外获得清晰稳定的图像,以提供较准确的6自由度信息。然而,在更小的协同运动尺度下,需要更高精度的6自由度位姿信息。此时,光信标阵列就显得力不从心:不仅阵列中的光信标可能会移出视野,并且由于连通域拟合圆中心在近距离下的抖动会导致位姿解算的不稳定。因此需要一种更加精确的控制点检测方法。

在增强现实(augmented reality,AR)中,为了在合适的位置显示虚拟物体,首先需要对现实世界的平面进行提取,通常有两种方法:基于纹理的平面检测和基于Marker的平面检测。前者通过分析纹理特征判断图像中的某个区域是否是一个平面,后者采用了经过特别设计的标志物,将标志物附着在待显示虚拟物体的表面,通过检测标记物实现对平面的识别。相比前者,后者提供了更强的鲁棒性、纠错能力和抗遮挡能力。常见的标志物如图9-6所示。

图9-6 常见的AR Marker

在这里,我们利用基于Marker的平面检测方法的优势,通过在领航者AUV上加装Marker模块,实现跟随者AUV对领航者AUV位置的更进一步估计。由于基于正方形的标记系统能够基于角点检测实现图像坐标中控制点位置的精确测定[12-14],因此我们采用了一种基于正方形基准标记检测的AR Marker进行位姿估计,被称为Ar Uco,如图9-7所示。这种方法检测容易,并且能够达到较高识别速度和精度,还能够生成用二进制图形区域表示的具有不同ID用以区分的不同的Marker;此外,还具有自动纠错的功能[15]

图9-7 两个不同ID的ArUco Marker被识别

从AR Marker中提取出ID和位姿信息的方法如下:

(1)将图像转为灰度图,使用局部自适应阈值方法在不同光照环境中鲁棒地提取其中最突出的轮廓,然后采用Suzuki和Abe所提出的算法提取轮廓[16],其中大部分轮廓都是环境中的背景或噪声。接着,采用Douelas-Pukk算法进行多边形逼近[17],因为采用的正方形标记,所以无法近似为四顶点的多边形被抛弃。(www.daowen.com)

(2)提取Marker中的二进制图像区域并获得其中的信息。具体为首先计算单应性矩阵消除投影;然后使用Otsu的方法基于灰度直方图获取双峰分布的图像的最佳阈值[18],并对图像进行阈值化;最后将二值化图像划分为规则网络,根据每个网格中大多数像素的值为每个元素分配0或1,直到检测到全0的边界为止。

(3)确定哪些候选标记是Marker,哪些是环境的一部分。将上面获得的二进制图形绕中心点旋转四次,将这4个图形与字典中的所有Marker做比对,如果发现了其中的任意一个与之相符,则是一个有效的标记,否则是环境干扰。如果没有符合的匹配项,那么就对其进行校正。校正的方法是通过计算采集到的候选图像mi到字典D的距离,如果小于字典中任意两个Marker的距离的一半,则认为该候选图像是距离最近的Marker。候选图像到字典的距离由式(9-40)给出:

其中,D(mi,mj)是mi到mj的距离,由式(9-41)定义:

式中 H——码距,定义为两个序列相同位置上数据不同的个数,又称为海明距离;

Rk——旋转算子,将候选图像顺时针旋转k个90°。

(4)对标记的边缘采用线性回归,计算交点,即角点位置。利用Levenberg-Marquardt算法[19],通过迭代使角点的重投影误差最小化。此外,由于Marker的二进制区域具有旋转不变性,因此能够唯一地确定四个角点的顺序。最后利用求解P4P问题,通过角点的图像坐标估计Marker相对于摄像机的姿态。

(5)由于水下实验环境的背景色为黑色,并且受到照明条件的影响,因此可能会出现标记边缘提取不稳定的状况,导致姿态出现跳变。为了抑制这样的现象,我们在求解姿态后增加了中值滤波。具体来说,每次检测Marker时,首先判断当前找到的Marker是否是上一次找到的Marker,这对于每个Marker有四种情况:①这一次找到的Marker在上一次也找到了;②这一次找到的Marker上一次没有找到;③上一次找到的Marker这一次没有找到;④上一次没找到的Marker这一次也没有找到。对于①,则将这个Marker的结果放入中值滤波缓冲区中。如果是前5次找到该Marker,则输出第一次检测到的值,如果是第5次之后,则输出中值滤波结果。对于②,则将结果放入中值滤波缓冲区中,并直接输出其结果。对于③,则删除对应的Marker的记录。对于④,即未检测到对应的Marker。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈