技术分享 | apriltag_ros的基础讲解

一 、序言

随着技术的发展,在人工智能、机器人控制的时代。无论是多机协同工作,还是目标识别跟踪。在机器视觉领域,都离不开一个话题,那就是对物体的定位与跟踪。本次介绍的是一个简单而高效的ROS功能包apriltag_ros(apriltag_ros - ROS Wiki)用于实时定位目标的位置和方向。

 

二 、什么是apriltag

apriltag是一个视觉基准库。(AprilTag (umich.edu))在VR,机器人和摄像机校准等领域有广泛的应用,通过特定的二维码标志,可以快速检测目标位置,并且实时计算相对位置。apriltag库是用C实现,没有外部依赖。具有很高的可移植性。其实时性能甚至可以在手机级别的处理器上实现。

 

三 、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才会发布。

 

四、 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,就可以观看到带有标签高亮的图像

 

技术分享 | apriltag_ros的基础讲解_第1张图片

6. 启动rviz

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

 

技术分享 | apriltag_ros的基础讲解_第2张图片

 

- End -

 

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

你可能感兴趣的:(ROS)