Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9463706
  • 博文数量: 1750
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20091
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1750)

文章存档

2024年(26)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2019-07-24 16:36:20

什么是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) |
给主人留下些什么吧!~~