使用棋盘格标定相机
安装标定功能包
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://www.toymoban.com/news/detail-686338.html
参考
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文章来源地址https://www.toymoban.com/news/detail-686338.html
到了这里,关于AprilTag的使用、相关问题及解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!