二维码识别与定位-方法1-利用ar_track_alvar

  二维码识别作为一种快捷准确的技术已经应用与生活中的购物支付、物体识别及工业AGV导航等领域,在OpenCV3.4.4版本上均提供了相应的函数cv::QRCodeDetector::detectAndDecode()用于二维码的检测和解析,但是在ROS kinetic中自带的版本是OpenCV3.3.1,不能使用API,幸运地是在ROS中有一个开源功能包ar_track_alvar用于二维码相关的操作。
其安装方式为:

   $ sudo apt-get install ros-melodic-ar-track-alvar

  本节主要讲在ROS中如何创建二维码以及如何利用相机识别二维码来获得有用的信息。并利用两个不同的二维码来表征不同的物体,进而通过识别二维码来完成物体的定位。

1. 二维码创建

  二维码的创建一般是离线进行的,是二维码识别的前提。制作好的二维码粘贴到地面、物体上后才可以实现实时定位。每一个二维码通常对应一个标签,如有的二维码代表一个网站,有的二维码代表一个坐标位置,有的二维码代表一个字符串等。

  在ROS中,ar_track_alvar功能包提供了创建二维码的节点,可以根据其定义的规则,创建不同标签的二维码。例如执行如下命令,就会在终端的当前路径下,创建一个命名为MarkerData_标签.png的二维码图像。其中标签可以为整数、字符串、网址等属性。例如执行如下命令,会在终端生成一个名为MarkerData_0.png的图像,如图7.16所示。

    $ rosrun ar_track_alvar createMarker 0

二维码识别与定位-方法1-利用ar_track_alvar_第1张图片

图 MarkerData_0.png图像
  执行如下命令可以查看创建二维码的规则:
  $ rosrun ar_track_alvar createMarker

二维码识别与定位-方法1-利用ar_track_alvar_第2张图片

图 创建二维码的一般规则

  可以看出使用-1 “string”的形式,可以创建字符串标签的二维码。在这里我们使用如下命令,创建多个不同的物体标签,包括cup、bottle、book、celephone,起二维码如图7.17所示。

    $ rosrun ar_track_alvar createMarker -1 “cup”
    $ rosrun  ar_track_alvar createMarker -1 “bottle”
    $ rosrun  ar_track_alvar createMarker -1 “book”
    $ rosrun  ar_track_alvar createMarker -1 “celphone

二维码识别与定位-方法1-利用ar_track_alvar_第3张图片

(a)标签为“cup”的二维码

二维码识别与定位-方法1-利用ar_track_alvar_第4张图片

(b)标签为“book”的二维码

二维码识别与定位-方法1-利用ar_track_alvar_第5张图片

(c)标签为“bottle”的二维码

二维码识别与定位-方法1-利用ar_track_alvar_第6张图片

(d)标签为“celephone”的二维码

  做好二维码后我们就可以将其用于物体识别和定位了。

2. 二维码识别

  ar_track_alvar功能包支持USB摄像头和RGB摄像头进行二维码识别,分别对应节点individualMarkersNoKinect适用于彩色摄像头,individualMarkers适用于深度相机。本节以astra mini相机为例进行二维码识别。
创建二维码识别的启动文件:

$ roscd cv_learn
























 

  启动文件由三部分组成,首先设置相机坐标系与世界坐标系之间的坐标变换;其次是设置individualMarkers节点所需要的参数,主要是订阅图像数据的话题,二维码的尺寸,最大尺寸误差等参数;最后是启动可视化插件rviz用于显示tf、marker及图像。
  下面启动相机与该启动文件进行测试,与之前的相机驱动程序不同,二维码的识别和定位需要相机的标定参数,又,在4.2节中已对astra mini相机进行了标定,直接使用即可,我们可以新建一个启动文件,并将标定参数加入到启动文件中,如astra_with_calibration.launch所示:




 


 














按如下命令依次启动相机和二维码识别节点:

$ roslaunch  cv_learn astra_with_calibration.launch
$ roslaunch  cv_learn ar_track_astra.launch

  拿起打印好的二维码,放置在摄像头前面,如图所示。可以在rviz看到已识别出了每个二维码,且包括其相对与摄像头的位置和姿态。
二维码识别与定位-方法1-利用ar_track_alvar_第7张图片

图4.40 二维码检测结果

3 基于二维码的物体检测与识别

  我们可以将二维码粘贴在物体的表面,这样当相机检测到二维码的位置和姿态时,可以间接计算出物体当前的位置和姿态通过运行如下命令:

$ rostopic echo /ar_pose_marker 

如图所示,可以查看当前二维码所处的位置和姿态,变换位置后,位姿有相应的变化.
二维码识别与定位-方法1-利用ar_track_alvar_第8张图片

图 位置1处的物体检测结果

二维码识别与定位-方法1-利用ar_track_alvar_第9张图片

图 位置2处的物体检测结果

你可能感兴趣的:(计算机视觉,linux,二维码检测,物体检测与定位)