什么是AR Tag?
ARTag(AR标签,AR是“增强现实”的意思)是一种基准标记系统,可以理解为其他物体一种参照物,看起来类似二维码,但其编码系统和二维码还是有很大区别,多用在相机标定,机器人定位,增强现实(AR)等应用场合,其主要作用是能够反映出相机与标签的位姿关系。进而可以反映出场景中物体与相机的参照关系。
AR Tag是什么样子?
一个普通的ARTag形如下图,图案代表的是一个数字,下图是数字1编码后产生的图案。
它是一个黑白栅格化图像,最小单元为一个小方块,整个ARTag为10*10网格,边缘由2个单位厚的黑色方块组成,中心为6*6的有效数据区,黑色为0,白色为1,这就代表一个36位的二进制数。这36位中,其中10位表示有效数据,另外26位是用来容错编码的,进过一系列编码后,ARTag标签可以表示2002种图案,这里面人为排除了若干不易识别的图案
ARTag在机器人领域的作用
其中一个很重要的作用就是识别物体与相机的位姿关系。物体上可以贴上ARTag,或者在平面上贴上ARTag标签,用来标定相机。摄像头识别到ARTag后,可以算出标签在相机坐标中的位置与姿态。下图为Realsense D415深度相机识别到一组ARTag后,标记出每个标签的坐标方位
在位姿识别方面,同样还有其他一些比较流行的编码方式,比如ARUCO,AprilTag以及ARToolkit+等,根据个人情况可以选择不同的标签类别。
如何生成AR标签?
在ROS系统下生成AR标签十分便捷, 搜索ar_track_alvar,参照ROS下的说明文档即可自己生成AR标签。
另外,Aruco Library 是一个能够识别多种标签的C++库,包括对ARTag的识别,可以编程实现对AR标签的多种操作
.git
AR_Track_alvar 是 alvar的一个ROS封装,
Alvar是一个AR tag tracking library.
功能:
1. 生成不同大小、分辨率和数据/ID编码的AR标记
2. 识别和跟踪单个AR标签的姿态,可选地集成kinect深度数据(当kinect可用时),以获得更好的姿态估计。
3. 识别和跟踪由多个标签组成的“包”的位置。这允许更稳定的姿态估计,对遮挡的鲁棒性,以及对多面目标的跟踪。
4. 使用摄像机图像自动计算捆绑包中的标记之间的空间关系,这样用户就不必在XML文件中手动测量和输入标记位置来使用捆绑包的功能
alvar 是比ARToolkit更新和更高级. 适合于自适应阈值处理各种照明条件. 基于光流的跟踪更稳定的姿态估计. 一种改进的标签识别方法,它不会随着标签数量的增加而显著降低识别速度
安装
sudo apt-get install ros-melodic-ar-track-alvar
产生 AR tags
0-8/9-17的ID AR tags 码一共存在在两个PDF文件中了, 标记为 4.5cm.
要产生自己的 ID 码,
rosrun ar_track_alvar createMarker
会
描述各种选项的说明
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
检测单个标签
Detecting individual tags. (识别和跟踪(可能)多个AR标记的位置,每个标记都单独考虑)
可以考虑的命令行参数为
marker_size (double): 厘米单位, 黑色正方形标记边框一侧的宽度
max_new_marker_error (double) 一个阈值,用来确定在不确定条件下何时可以检测到新的标记
max_track_error (double) 一个阈值,确定在认为标记消失之前可以观察到多少跟踪误差
camera_image
(string) 提供用于检测AR标记的摄像机帧的topic的名称。这可以是单色或彩色,但应该是未校正的图像,因为校正是在alvar中进行的.
camera_info
(string) 话
题的名称,提供摄像机标定参数,以便对图像进行校正
output_frame
(string) 已发布的AR标记的笛卡尔坐标位置所对应的帧的名称
实例: 使用kinetic + PR2
roslaunch ar_track_alvar pr2_indiv.launch
如果不想用 深度相机, 则需要
individualMarkersNoKinect 代替.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
检测多标签组
有时将多个标记的“包”视为一个单元是有利的。例如,这允许估计一个多面对象的姿态,即使有些标签看不到.
它还可以导致更稳定的姿态估计和提供对遮挡的鲁棒性。标记包由一个XML文件定义,该文件列出一组标记id及其相对于“主”标记的位置。主标记总是首先出现在XML文件中,并为其余标记定义了一个坐标系统。重点:这个坐标系与ROS中使用的标准坐标系不同!在这个系统中,当面对标签时,正z从标签的前面出来,朝向观察者,正x在右边,正y在上面。
要创建一个bundle,
首先选择要成为主标记的标记。将主标记的中心视为(0,0,0)。然后,在放置其余标记之后,测量所有标记的四个角相对于主标记原点的x、y和z坐标, 将每个标记的这些度量值输入到XML文件中,从左下角开始,然后沿着标记逆时针方向前进.
可以同时检测多个bundle。每个要检测的包都应该有一个文件. 命令行参数
除了和单标签检测增加了一个
bundle_files
(multiple strings) 一个XML文件名列表
findmarkerbundle假设使用kinect作为摄像机,这样就可以集成深度数据以获得更好的姿态估计。如果您不使用kinect或不希望使用深度数据改进,可以使用findMarkerBundlesNoKinect. 在PR2 中
roslaunch ar_track_alvar pr2_bundle.launch
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
API
订阅:
/kinect_head/rgb/camera_info
()
图像话题
() 用于分析 markers.
发布: (单标签检测)
visualization_marker
() RVIZ中的显示(Marker),
会在每个已识别AR标签的位置显示一个彩色方块, 并且
在相机图像中覆盖这些块, 目前
设置为对标记0-5显示独特的颜色,对所有其他标记显示统一的颜色
ar_pose_marker
()
所有观察到的AR标签相对于输出帧的姿态列表
Camera frame (from Camera info topic param)
→ AR tag frame
提供从摄像机帧到每个AR标记帧的转换,名为ar_marker_x,其中x是标记的ID号
发布: (多标签检测)
visualization_marker
() RVIZ中的显示(Marker), 会在每个已识别AR标签的位置显示一个彩色方块, 并且 在相机图像中覆盖这些块, 目前设置标记显示绿色
ar_pose_marker
()
bundle中主AR标签相对于输出帧的姿态列表
Camera frame (from Camera info topic param)
→ AR tag frame
提供从摄像机帧到主AR标记帧的转换,名为ar_marker_x,其中x是标记的ID号
制作 bundle的XML文件.
Alvar提供工具制作XML而不需要手动测量并标定, 工具允许从多个图像中自动完成这一操作(图像保证其中有两个或多个标签是可见的). 执行
./bin/trainMarkerBundle 提供键盘命令捕获图像和优化bundle操作, 但是目前还不稳定.
阅读(9619) | 评论(0) | 转发(0) |