myAGV-摄像头精准定位
1.摄像头定位原理
在定位过程中我们使用了Aruco标识辅助定位
一个ArUco marker是一个二进制平方标记,它由一个宽的黑边和一个内部的二进制矩阵组成,内部的矩阵决定了它们的id。黑色的边界有利于快速检测到图像,二进制编码可以验证id,并且允许错误检测和矫正技术的应用。marker的大小决定了内部矩阵的大小。例如下图,一个4x4的marker由16bits组成。
应当注意到,我们需要检测到一个Marker在空间中发生了旋转,但是,检测的过程需要确定它的初始角度,所以每个角落需要是明确的,不能有歧义,保证上述这点也是靠二进制编码完成的。当Marker在空间中旋转,对应的二进制信息也会发生变化,根据变化量就可以得出Marker在空间中相对摄像头的位置及姿态,如下图所示,还可以在摄像头画面中显示Marker的坐标系和边界:
流程图如下:
2. 精准定位环境准备
1.生成Aruco标记
首先需要准备两个Aruco标记,在这个网站上可以自动生成Aruco标记:https://chev.me/arucogen/ 在我们的demo中,我们选择的是 6*6的字典集,大小为50mm,ID分别为3和4的两个标记marker,然后点击图中红色的"save"就可以将生成的标记以PDF的格式保存在本地,随后就可以用打印机打印出实际的标记以便后面定位使用。
2.放置Aruco标记
前面有讲到,摄像头精准定位的基础是依据对两个有特征的Aruco标记进行位置分析从而得出精准定位的路径规划。可以如下图所示,将刚才上一步打印出来的Aruco标记粘贴在我们希望到达的目标点位两边。 注意:应尽量使两个标记距离中间的目标点位距离一致,这样才能保证距离计算的准确性
3.软件操作
1.打开小车myAGV导航文件
首先打开一个控制台终端(快捷键Ctrl+Alt+T)在命令行中输入以下指令:
roslaunch navigation_demo myagv_navigation.launch
2.运行精准定位程序
再打开一个控制台终端,在命令行中输入以下代码:
rosrun navigation_demo aibot_detect_marker.py
建议小车初始摆放位置距离目标大于40cm以便摄像头可以同时拍摄到左右两边的标记