您现在的位置: 晨光科技 >> 文章 >> 专项研究 >> AGV >> AGV(下位)导向 >> 正文  
  AprilTag简介与简单实用(自用资料整理)           
AprilTag简介与简单实用(自用资料整理)
[ 作者:佚名    转贴自:https://blog.csdn.net/whf7890/article/details/125820845    点击数:39    更新时间:2023/6/27    文章录入:LA ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

AprilTag简介与简单实用(自用资料整理)

whf7890

于 2022-07-16 15:54:34 发布

7781
 收藏 51
文章标签: 大数据
版权
AprilTag是由University of Michigan的APRIL Robotics Laboratory提出的,官网是这里。官方自己对AprilTag的描述是视觉基准系统(Visual Fiducial System),其应用领域包括AR、机器人、相机校正等。通过对AprilTag Marker的识别,可以确定相机的位姿(相对于Marker)。AprilTag除了常规的方形,还可以包含其它“奇形怪状”的样子,如下。.

一个普通的AprilTag大约长下面这个样子。

AprilTag

优点:

(1) BSD许可
(2) 更少的可调节参数
(3) 在长距离场景中表现依然较好
(4) 被NASA采用
(5) 更加灵活的marker设计(maker不一定是方形的)
(6) 计算量更少
(7) 支持Tag bundle,减少旋转歧义性
(8) 更多的误检测(默认参数)
apriltag_ros功能包简介

【注意:apriltags2_ros这个包已经被重新命名为apriltag_ros,所以如果去ROS-wiki官网上搜索apriltags2_ros会自动跳转到apriltag_ros上,但是其教程和内容还是写的apriltag2_ros,但是并不影响其使用,在此说明一下。】

 

由上图可知,此包通过接收

/camera/image_rect

和 /camera/camera_info

两个话题,并且通过自身的两个配置文件

tags.yaml 和 settings.yaml ,

通过算法处理以后,发布

/tf 、/tag_detections

和 /tag_detections_image

三个话题。

其中:

/camera/image_rect

话题发布消息类型为

/sensor_msgs/Image,该消息包含了从相机采集到的图像数据。

/camera/camera_info

话题发布消息类型为

/sensor_msgs/CameraInfo ,

该消息包含了相机的内参矩阵K和其他的一些标定参数。可以通过 camera_calibration

(camera_calibration - ROS Wiki)或者kalibr(GitHub - ethz-asl/kalibr: The Kalibr visual-inertial calibration toolbox)获得标定参数。

tag.yaml

文件中包含了用于检测的二维码信息。

settings.yaml

文件中包含了apriltag算法核心配置。

/tf 话题包含了每个被检测到的二维码相对于相机的位置和方向的数据。只有在settings.yaml文件中将 publish_tf 设置为 true 才会发布。

/tag_detections

话题发布的内容和 /tf 一样,只是包含了一个自定义消息 tag ID,该消息主要用于一簇标签(tag bundles)的检测。

/tag_detections_image

话题发布的内容和 /camera/image_rect 内容一样,只是包含了标签绑定的内容(即在输出的图像上实时高亮显示标签的位置)。只有在continuous_detection.launch文件中,设置publish_tag_detections_image==true才会发布。

2.AprilTag的使用(opencv)
2.1 AprilTag的生成
 apriltag功能包的使用

【注意:该包的使用需要

OpenCV库,Eigen3库,以及 cv_bridge包、usb_cam包、camera_calibration包】

1. 二维码的生成

下载

openmv(https://openmv.io/pages/download

这里选用的是linux版本

找到下载的源文件,赋予运行权限

sudo chmod +x openmv-ide-linux-x86_64-2.6.5.run (这里要修改为自己下载的版本名称)

运行openmv./openmv-ide-linux-x86_64-2.6.5.run

然后选择 工具---机器视觉---ApirlTag生成器---TAG36H11,在弹出的对话框中选择需要的标签数量和对应的ID【这里选择的是TAG36H11,在

apriltag_ros/config/settings.yaml

文件中也要设置成对应的标签名称,否则算法将无法识别】

2. 启动相机

roslaunch usb_cam usb_cam-test.launch

3. 启动camera_calibration

校准相机

rosrun camera_calibration cameracalibrator.py --size 11x9 --square 0.100 image:=/usb_cam/image_raw camera:=/usb_cam

size 为棋盘标定板的大小,square为棋盘的边长,image为相机发布的图像信息(此处需要根据实际情况修改为自己相机发布的话题,可以通过 rostopic list 查看)

camera 为相机发布的相机消息,同样,根据实际情况修改为自己的相机

4. 启动apriltag_ros

roslaunch apriltag_ros continuous_detection.launch

需要注意的是,在

apriltag_ros/launch/continuous_detection.launch 文件下,

将上面三个参数改为自己相机参数。

在apriltag_ros/config/tags.yaml 文件中修改为自己的标签设置。

standalone_tags:

[

{id: 0, size: 0.05},

{id: 1, size: 0.05},

{id: 2, size: 0.05},

{id: 3, size: 0.05},

{id: 4, size: 0.05},

{id: 5, size: 0.05},

{id: 6, size: 0.05},

{id: 7, size: 0.05},

{id: 8, size: 0.05},

{id: 9, size: 0.05},

]

上面为此次测试时用的标签参数,包含了标签的ID和每个标签的大小0.05m

5. 启动rqt_image_view

话题选择 /tag_detectios_image,就可以观看到带有标签高亮的图像

 

6. 启动rviz

将固定坐标设置为 相机的坐标系(这里为 /usb_cam),并且添加TF模块,就可以实时看见每个tag相对于相机的位置和方向了

 

3. ros上实现Apriltags位姿输出

在github上我们可以找到很多相关的代码,我用的是https://github.com/shijiwensjw/apriltags2_ros 下的代码实现了Apriltags位姿输出,既然有了算法,那麽我们需要通过摄像头输入图像,既然有了摄像头引入,我们便需要进行相机内参的标定,只有这样才可以保证精度。

具体实现:
首先下载usb_cam的包,然后在在launch文件修改如下:
“/dev/video1” /是插入usb摄像头具体的设备口
相机标定实现参考网址:https://blog.csdn.net/harrycomeon/article/details/91126256

然后在ros下,建立工作空间,将apriltags2,apriltags2_ros,camera_calibration,usb_cam文件夹复制到所建的工作空间的src目录下。catkin_make编译通过后,便可以依次运行
 

roslaunch usb_cam usb_cam-test.launch
roslaunch apriltags2_ros continuous_detection.launch
然后自己将两个launch文件整合到一起,只需要运行一个就可以
 roslaunch apriltags2_ros continuous_detection.launch
此时已经发布了话题,然后我们便可以查看话题下的内容,其中在/tag_detections和/tf话题下,发布了tag相对于相机的相对位姿。

 

注意下面文件下有指定识别tag的标号和实际大小

 参考博客:

技术分享 | apriltag_ros的基础讲解 - 知乎 (zhihu.com)

(8条消息) Apriltags+Ros+Ur5项目--Apriltags位姿输出_光头明明的博客-CSDN博客_apriltags
————————————————
版权声明:本文为CSDN博主「whf7890」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whf7890/article/details/125820845

 

 

AprilTag的种类

Terry Cao 漕河泾

于 2022-09-26 19:43:53 发布

848
 收藏
分类专栏: VSLAM 文章标签: 计算机视觉
版权

VSLAM
专栏收录该内容
13 篇文章1 订阅
订阅专栏
AprilTag是一个视觉基准系统,可用于各种任务,包括AR,机器人和相机校准。这个tag可以直接用打印机打印出来,而AprilTag检测程序可以计算相对于相机的精确3D位置,方向和id。对于OpenMV来说,这个特别有用! 它大概长这个样子:

 

AprilTag的种类
AprilTag的种类叫家族(family),有下面的几种:

TAG16H5 → 0 to 29
TAG25H7 → 0 to 241
TAG25H9 → 0 to 34
TAG36H10 → 0 to 2319
TAG36H11 → 0 to 586
ARTOOLKIT → 0 to 511
也就是说TAG16H5的家族(family)有30个,每一个都有对应的id,从0~29。

那么不同的家族,有什么区别呢?

比如说TAG16H5的有效区域是4 x 4的方块,那么它比TAG36H11看的更远(因为他有6 x 6个方块)。但是TAG16H5的错误率比TAG36H11高很多,因为TAG36H11的校验信息多,所以,如果没有别的理由,推荐用TAG36H11。

这些图像可以在网络下载也可以在openmv的IDE中生成

 

 1 # AprilTags Example
 2 #
 3 # This example shows the power of the OpenMV Cam to detect April Tags
 4 # on the OpenMV Cam M7. The M4 versions cannot detect April Tags.
 5
 6 import sensor, image, time, math
 7
 8 sensor.reset()
 9 sensor.set_pixformat(sensor.RGB565)
10 sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
11 sensor.skip_frames(30)
12 sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
13 sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
14 clock = time.clock()
15
16 while(True):
17     clock.tick()
18     img = sensor.snapshot()
19     for tag in img.find_apriltags(): # defaults to TAG36H11 without "families".
20         img.draw_rectangle(tag.rect(), color = (255, 0, 0))
21         img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
22         degress = 180 * tag.rotation() / math.pi
23         print(tag.id(),degress)

 

第8行初始化摄像头

第9行设置图像格式为RGB565

第10行时QQVGA图像的格式

第11行跳过30秒,使新设置生效

第12行关闭自动增益。默认开启的,在颜色时别中一定要关闭

第13行关闭白平衡,默认开启,在颜色时别中一定要关闭

第14行追踪帧率

第18行从感光芯片获得一张图像

第19行在图片中找到家族中的图像

第20行画方框,draw_rectangle((x,y,w,h) , color = White)该函数的参数,x,y是方框的左上角的坐标,w,h是宽和高

  tag.rect()

  apriltag.rect()方法

  返回一个矩形元组(x, y, w, h),用于如AprilTag边界框的 image.draw_rectangle 等其他的 image 方法。

  color为方框的颜色

第21行draw_cross(x,y,size = 5,color = White) 画十字先,x,y是十字的中心,size是两侧的尺寸,color是颜色

  tag.cx  ,  tag.cy是ApriTag的中心位置,

第22行是弧度制转角度制

第23行打印ApriTag的id号 和旋转的角度

 

 

右上角为所检测到的ApriTag

左下角为id号
————————————————
版权声明:本文为CSDN博主「Terry Cao 漕河泾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45834800/article/details/127059527

  • 上一篇文章: 激光SLAM简介

  • 下一篇文章: AGV智能搬运机器人的热门导航技术
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • TEMP[126]

  • SAE001[93]

  • 高光谱成像基本原理[68]

  • 蒸汽火车解剖图[79]

  • 星球大战死星解剖图集 star wa…[86]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[340]

  • 中国反伪科学运动背后的CIA黑手…[517]

  • [转载]袁隆平真言:中国最大的…[698]

  • 台专家:当年我们造IDF时 大陆…[591]

  • 旅日华人:中国严重误判日本民…[596]

  •  
     相 关 文 章
  • 牵引式agv直流伺服电机怎么选型…[38]

  • 激光导航AGV车结构设计概述[48]

  • AGV综合选型[317]

  • AGV/AMR锂电池选型指南![38]

  • 港口AGV进化史[56]


  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:359.38毫秒
    Powered by:MyPower Ver3.5