1. apriltag_ros 功能包安装
1.1 安装依赖库apriltag
(不要放到ROS工作空间里)
git clone https://github.com/AprilRobotics/apriltag.git
1.2 编译依赖库apriltag
cd apriltag
mkdir build
cd build
cmake ..
make
sudo make install #安装到ros中
1.3 安装 apriltag_ros 功能包,参考官方教程:http://wiki.ros.org/apriltag_ros
mkdir -p apriltag_ws/src
cd apriltag_ws/src
git clone https://github.com/AprilRobotics/apriltag_ros.git
catkin_make
2. apriltag_ros 功能包使用
2.1 编辑运行的配置文件
cd apriltag_ros/apriltag_ros/config
sudo gedit settings.yaml
settings.yaml 文件 (配置apriltag算法)内容修改如下:
I. tag_family:时设置检测的标签类型,一般用’tag36h11’ 。
II. 如果想发布TF坐标,需要把 publish_tf 设置为 true .
# AprilTag 3 code parameters
# Find descriptions in apriltag/include/apriltag.h:struct apriltag_detector
# apriltag/include/apriltag.h:struct apriltag_family
tag_family: 'tag36h11' # options: tagStandard52h13, tagStandard41h12, tag36h11, tag25h9, tag16h5, tagCustom48h12, tagCircle21h7, tagCircle49h12
tag_threads: 2 # default: 2
tag_decimate: 1.0 # default: 1.0
tag_blur: 0.0 # default: 0.0
tag_refine_edges: 1 # default: 1
tag_debug: 0 # default: 0
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
transport_hint: "raw" # default: raw, see http://wiki.ros.org/image_transport#Known_Transport_Packages for options
sudo gedit tags.yaml
tags.yaml 文件(定义要查找的标签和标签簇)内容修改如下:
standalone_tags:
[
{id: 0, size: 0.095, name: Tag36h11_0 } # id 对应于生成标签的ID号,size对应标签的大小(单位:米)
]
注意添加你要设定的二维码标签的ID,和size(单位:m)
2.2 修改launch 文件
这里主要是为了启用对应的相机话题(/usb_cam)和图像话题(/usb_cam/image_raw)
cd apriltag_ros/apriltag_ros/launch
sudo gedit continuous_detection.launch
<launch>
<arg name="launch_prefix" default="" /> <!-- set to value="gdbserver localhost:10000" for remote debugging -->
<arg name="node_namespace" default="apriltag_ros_continuous_node" />
<arg name="camera_name" default="/usb_cam" />
<arg name="image_topic" default="image_raw" /><arg name="camera_frame" default="usb_cam" /> #发布一个坐标系
<!-- Set parameters -->
<rosparam command="load" file="$(find apriltag_ros)/config/settings.yaml" ns="$(arg node_namespace)" />
<rosparam command="load" file="$(find apriltag_ros)/config/tags.yaml" ns="$(arg node_namespace)" />
<node pkg="apriltag_ros" type="apriltag_ros_continuous_node" name="$(arg node_namespace)" clear_params="true" output="screen" launch-prefix="$(arg launch_prefix)" >
<!-- Remap topics from those used in code to those on the ROS network -->
<remap from="image_rect" to="$(arg camera_name)/$(arg image_topic)" />
<remap from="camera_info" to="$(arg camera_name)/camera_info" /><param name="publish_tag_detections_image" type="bool" value="true" /> <!-- default: false -->
</node>
</launch>
3. 运行检测
3.1 打开相机
roslaunch usb_cam usb_cam-test.launch
注:若没安装过usb_cam包的话先执行以下命令安装:
sudo apt-get install ros-noetic-usb-cam
然后配置launch文件相关参数:
cd /opt/ros/noetic/share/usb_cam/launch
sudo gedit usb_cam-test.launch
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video2" />
<param name="image_width" value="1920" />
<param name="image_height" value="1080" />
<param name="pixel_format" value="yuyv" />
<param name="color_format" value="yuv422p" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>
param name=“video_device” value="/dev/video0" 参数用于指定发布的摄像头设备,可以用ls指令查看摄像头的设备名称:
ls /dev/video*
本文外接的webcam对应的是video2
3.2 发布ROS节点
roslaunch apriltag_ros continuous_detection.launch
3.3 打印检测消息
source ./devel/setup.bash #新开一个终端一定要先source一下!
rostopic echo /tag_detections
3.4 可视化
rviz
打开rviz,修改Fixed Frame 为 usb_cam, 点击Add添加Image和TF, Image Topic 选择 /tag_detections_image,如下图所示:
检测结果如图所示: