AprilTag的使用、相关问题及解决方法

使用棋盘格标定相机

安装标定功能包

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

下载棋盘格
http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf

启动摄像头

roslaunch usb_cam usb_cam-test.launch

开始标定

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam

参数说明:

size:    棋盘内交叉点的个数,行*列
square:  一个格子的边长,单位是m
image:  订阅摄像头发布的图像话题(ROS topic)
camera: 寻找相应的设备相机名

上下左右前后移动摄像头,待calibrate有颜色,点击它,然后点击save,再点击commit,这时会自动保存标定文件。点击save后,标定文件会自动保存在/tmp路径下,文件名为calibrationdata.tar.gz。

一、标签生成

OpenMV下载
https://openmv.io/pages/download

sudo chmod +x openmv-ide-linux-x86_64-2.9.7.run
./openmv-ide-linux-x86_64-2.9.7.run

启动OpenMV,依次选择 工具-机器视觉-AprilTag生成器-TAG16H5 将图像保存下来。
将图像复制到word中,在word中指定图像的物理尺寸并打印。

二、安装 USB-CAM

  • ros安装(建议)
sudo apt install ros-noetic-usb-cam
  • 源码安装
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
ctakin_make
source ./devel/setup.bash
  • 摄像头启动
roslaunch usb_cam usb_cam-test.launch

三、编译安装依赖库 apriltag

git clone https://github.com/AprilRobotics/apriltag.git
mkdir build
cd build
cmake ..
make
sudo make install

四、apriltag_ros 下载和编译

cd catkin_ws/src
git clone https://github.com/AprilRobotics/apriltag_ros.git
cd ..
catkin_make

五、apriltag_ros 配置(yaml文件使用空格缩进)

  • 修改apriltag_ros/apriltag_ros/config文件夹中,settings.yaml
tag_family:		'tag16h5'	# 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.)
publish_tf:		true        # default: false	#发布tf坐标
  • 将apriltag_ros/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" />
  • 修改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},
 ]

0.05m 是每个标签的边长

tag_bundles:
 [
  {
   name: 'my_bundle',
   layout:
    [
     {id: 0, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}                # id 对应于生成标签(二维码)的ID号,size对应标签的大小
     {id: 1, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}# 我选用的是22和45号标签
     {id: 2, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}# id 对应于生成标签(二维码)的ID号,size对应标签的大小
    ]
  }
 ]

六、启动

启动 rqt_image_view

rqt_image_view

rqt_image_view 中的话题选择 /tag_detectios_image。

启动 apriltag_ros

roslaunch apriltag_ros continuous_detection.launch

窗口打印结果

rostopic echo /tag_detections

rviz 显示结果

rosrun rviz rviz

在 rviz 界面中选择:
add-by topic-image
add-by display type-tf

相关问题及解决方法

  • 在图像中不存在 tag 的位置出现大量检测结果。

1.在 settings.yaml 中将图像分辨率调低可以减少误检测,但是会导致标签离得较远时检测不到。
2.在后续处理中将误检测移除。误检测通常不是正方形而是一个极细的长条,利用其这一特性,可以再后续处理中将误检测有效地剔除。

  • 未出现检测结果。

检查 settings.yaml 中 tag_family 是否与自己打印标签的类别一致。

参考

https://blog.csdn.net/whf7890/article/details/125820845
https://blog.csdn.net/bingda_robot/article/details/127960005
https://blog.csdn.net/manbushuizhong/article/details/123805464

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值