ROS学习笔记(实践二)--AprilTag_ros包的使用

目录

  • 前言
  • 1.AprilTag_ros包的安装
  • 2.AprilTag_ros包的使用
    • 2.1 ros中单目摄像头的标定
    • 2.2 运行AprilTag_ros包
  • 3.原理简析
  • 4.性能分析
    • 4.1论文给出的性能分析
    • 4.2 实测数据

前言

本文记录了AprilTag_ros包的安装及使用,介绍了部分原理和性能分析,同时介绍了ROS中单目相机的校准。

1.AprilTag_ros包的安装

安装环境:
ubuntu 18.04
ROS: Melodic
AprilTag_ros官方链接。开始的时候我按照官方的教程去安装,但没有安装成功,失败的原因是camke build编译失败。于是我用下面的方法安装。

AprilTag_ros包有库依赖,安装过程如下:
1.先安装依赖库apriltag,安装方法如下。这个注意不要把它放到ROS的工作空间里

git clone https://github.com/AprilRobotics/apriltag.git      # 这个不是ros的功能包
mkdir build
cd build
cmake ..
make
sudp make install

2.安装AprilTag_ros包,将源码拷贝到ROS工作空间中的src工作目录下

git clone https://github.com/AprilRobotics/apriltag_ros.git  #在src文件夹内

3.回到工作空间的文件夹下编译

catkin_make

至此安装结束。

2.AprilTag_ros包的使用

在使用该功能包前,要先对单目摄像头进行标定。

2.1 ros中单目摄像头的标定

第一步:安装标定功能包

sudo apt-get install ros-melodic-camera-calibration

注:这里要确定安装了usb摄像头的驱动包,如果没安装安下面步骤安装

 git clone https://github.com/bosch-ros-pkg/usb_cam.git  #拷贝到ROS工作空间中的src工作目录下,然后编译

具体可以参考:
https://blog.csdn.net/qq_42585108/article/details/105562061
第二步:打开摄像头启动标定节点

roslaunch usb_cam usb_cam-test.launch  #启动摄像头
rosrun camera_calibration cameracalibrator.py --size 8x5 --square 0.028 image:=/usb_cam/image_raw camera:=/usb_cam

参数说明:
size:棋盘内角点的个数,行*列
square:一个格子的边长,单位是m
image:摄像头发布的图像话题明
camera:相机名
第三步开始标定
ROS学习笔记(实践二)--AprilTag_ros包的使用_第1张图片
上下左右移动摄像头,当标定完成时,CALIBRATE会有颜色,点击它,然后点击save,再点击COMMIT。这是会自动保存标定文件。

标定文件保存路径

 writing calibration data to /home/mue/.ros/camera_info/head_camera.yaml   #ros默认自动找这个路径的文件

输出标定参数

[image]
width
640
height
480
[narrow_stereo]
camera matrix
496.458369 0.000000 321.704479
0.000000 498.045492 245.523491
0.000000 0.000000 1.000000
distortion
0.156540 -0.184929 0.004541 0.004684 0.000000
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
projection
513.121582 0.000000 324.144520 0.000000
0.000000 515.390259 246.954678 0.000000
0.000000 0.000000 1.000000 0.000000

2.2 运行AprilTag_ros包

在运行节点需要配置两个配置文件
config/settings.yaml

tag_family:        'tag36h11' # options: tagStandard52h13, tagStandard41h12, tag36h11, tag25h9, tag16h5, tagCustom48h12, tagCircle21h7, tagCircle49h12  #支持单一标签类型
tag_threads:       2          # default: 2           # 设置Tag_Threads允许核心APRILTAG 2算法的某些部分运行并行计算。 典型的多线程优点和限制适用
tag_decimate:      1.0        # default: 1.0       #减小图像分辨率
tag_blur:          0.0        # default: 0.0            #设置tag_blur> 0模糊图像,tag_blur  < 0锐化图像
tag_refine_edges:  1          # default: 1       #增强了计算精度,但消耗了算力
tag_debug:         0          # default: 0            #1为保存中间图像到~/.ros
max_hamming_dist:  2          # default: 2 (Tunable parameter with 2 being a good choice - values >=3 consume large amounts of memory. Choose the largest value possible.)
# Other parameters
publish_tf:        true       # default: false       #发布tf坐标

这里有两点注意:
1.tag_family:时设置检测的标签类型,一般用’tag36h11’ 。openmv的IDE可以生成这个标签。
2.如果想发布TF坐标,需要把publish_tf设置为true。
tags.yaml

# 这个标签中至少要填入三个参数
standalone_tags:
  [
    {id: 1, size: 0.05},   #size对应标签的大小
    {id: 2, size: 0.05},
    #{id: 2, size: 0.05},
    #{id: 3, size: 0.05},
    {id: 3, size: 0.05}
  ]
  #这个标签是根据大小和位置检测的
 tag_bundles:
  [
    {
      name: 'my_bundle',
      layout:
        [
          {id: 10, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}
        ]
     } 
  ]

说明:如果只用于相机的定位,只需要填standalone_tags里的参数就可以了。其id号对应其生车标签的id,即每个数字生成的标签是唯一的。
这里要修改launch文件continuous_detection.launch。要与相机的话题保持一致。

 <arg name="camera_name" default="/usb_cam" />
<arg name="camera_frame" default="usb_cam" />  
 <arg name="image_topic" default="image_raw" />

启动节点

roslaunch apriltag_ros continuous_detection.launch

效果:
ROS学习笔记(实践二)--AprilTag_ros包的使用_第2张图片
下面识别一个标签,可以打开RVIZ查看

rosrun rviz rviz

ROS学习笔记(实践二)--AprilTag_ros包的使用_第3张图片
查看数据

  rostopic echo /tag_detections

ROS学习笔记(实践二)--AprilTag_ros包的使用_第4张图片

3.原理简析

算法的工作流程如下:
在这里插入图片描述
边缘检测原理:
ROS学习笔记(实践二)--AprilTag_ros包的使用_第5张图片
单应变换原理参考。

4.性能分析

4.1论文给出的性能分析

测试环境
计算机:Intel Core2 CPU 2.6GHz
相机:分辨率为400×400,针孔相机,焦距为400像素

测试性能
检测视频流帧率:30fps
定位精度如下图,红线为AprilTag算法的误差曲线。
ROS学习笔记(实践二)--AprilTag_ros包的使用_第6张图片

4.2 实测数据

测试环境:

  1. CPU: i5-11300H @ 3.10GHz
  2. 显卡:MX450
  3. 摄像头:分辨率 640 x 480 ,针孔摄像头

测试说明:

  1. 测量工具:卷尺
  2. 测量环境:室内
  3. 注意事项:是否开启图像增强模式(tag_refine_edges),在室内测试不影定位精度
  4. 识别标签:45cm x 45cm

分别测量其X,Y,Z三轴的精度,参考坐标轴如图
ROS学习笔记(实践二)--AprilTag_ros包的使用_第7张图片
这里的z轴是摄像头距离标签的距离:
ROS学习笔记(实践二)--AprilTag_ros包的使用_第8张图片
ROS学习笔记(实践二)--AprilTag_ros包的使用_第9张图片
说明:由于视野的问题,X,Y轴测试的数据较少,且Y轴数据有较大的测量误差。

- tag_refine_edges=1 tag_refine_edges=1
FPS 29.8 29.7
内存占用率 0.8% 0.8%
CPU占用率 75% 73%

注:以上数据在同等条件下测得,CPU占用率与后台程序运行的多少有关。

你可能感兴趣的:(ROS,人工智能,算法)