ROS noetic 使用 apriltag_ros 功能包检测相机位姿

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,如下图所示:

 检测结果如图所示:

 

<think>嗯,用户想在Gazebo仿真环境中集成并使用AprilTag进行定检测。首先,我得回忆一下AprilTag是什么,它是类似于二维码的视觉基准标记,常用于机器人定姿态估计。Gazebo是机器人仿真工具,如何将两者结合起来呢? 根据用户提供的引用,引用[1]提到Gazebo可以和apriltags2_ros结合使用,放置AprilTags并模拟检测过程。引用[3]提到监听/tag_0和/camera之间的相对置,转化成cmd_vel发布。这说明可能需要用到apriltags2_ros来处理检测,并在Gazebo中添加AprilTag模型。 首先,我需要指导用户安装必要的ROS,比如apriltags2_ros。然后,在Gazebo中创建或导入AprilTag模型。可能需要使用现有的模型库,或者自己生成SDF模型。引用[2]提到标定间墙壁贴很多二维码,可以模拟类似的环境。 接下来,配置机器人相机传感器,确保摄像头能发布图像话题到apriltags2_ros节点。可能需要调整相机参数,如焦距和分辨率,与实际硬件一致。然后启动检测节点,订阅图像话题,输出检测到的标签姿。 最后,验证检测结果,可能需要在Rviz中可视化姿,或者将姿数据用于控制机器人移动,如引用[3]中的监听相对置并发布cmd_vel。 用户可能需要生成相关问题,比如如何调整检测参数,处理多标签环境,或优化仿真性能。确保回答结构清晰,步骤正确,引用相关文献,比如引用[1]和[4]提到的仿真器重要性。</think>### 如何在 Gazebo 中集成和使用 AprilTag 进行定检测 #### 1. **安装依赖与 ROS 驱动** - 需要安装 `apriltags2_ros` ,这是专为 ROS 设计的 AprilTag 检测库: ```bash git clone https://github.com/christianrauch/apriltags2_ros.git ``` - 确保 Gazebo 与 ROS 环境已配置完成(如 ROS Noetic + Gazebo 11)[^1]。 #### 2. **在 Gazebo 中添加 AprilTag 模型** - **方法一**:使用现有模型库(如 `gazebo_apriltag_models`)直接导入预定义的 AprilTag SDF 模型。 - **方法二**:手动创建 AprilTag 的 SDF 文件,定义其几何形状、纹理和标签 ID。例如: ```xml <!-- tag_0.sdf --> <sdf version="1.6"> <model name="tag_0"> <static>true</static> <link name="link"> <visual name="visual"> <geometry><box><size>0.16 0.16 0.01</size></box></geometry> <material><script><uri>file://media/materials/scripts/apriltag.material</uri></script></material> </visual> </link> </model> </sdf> ``` #### 3. **配置机器人视觉传感器** - 在机器人模型中添加摄像头(如 RGB 相机),确保其话题名称(如 `/camera/image_raw`)与后续检测节点订阅的话题一致。 - 调整摄像头参数(如焦距、分辨率)以匹配真实硬件配置[^2]。 #### 4. **启动 AprilTag 检测节点** - 编写 launch 文件启动 `apriltags2_ros` 节点,订阅摄像头图像并发布检测结果: ```xml <launch> <node pkg="apriltags2_ros" type="apriltags2_ros_continuous_node" name="apriltag_detector"> <param name="camera_frame" type="str" value="camera_optical_frame" /> <param name="tag_family" type="str" value="tag36h11" /> <remap from="image_rect" to="/camera/image_raw"/> <remap from="camera_info" to="/camera/camera_info"/> </node> </launch> ``` #### 5. **验证与定应用** - **可视化检测结果**:在 RViz 中订阅 `/tag_detections` 话题,查看标签的姿置和方向)。 - **定实现**:通过监听标签与相机的相对姿(如 `/tag_0/pose`),结合机器人运动控制节点(如 `cmd_vel`),实现闭环定[^3]。 --- ### 关键代码示例 ```python # 示例:订阅 AprilTag 检测结果并控制机器人移动 import rospy from apriltags2_ros.msg import AprilTagDetectionArray from geometry_msgs.msg import Twist def callback(detections): if len(detections.detections) > 0: tag_pose = detections.detections[0].pose.pose # 计算移动指令(例如:保持与标签的固定距离) cmd_vel = Twist() cmd_vel.linear.x = 0.1 * (tag_pose.position.z - 0.5) pub.publish(cmd_vel) rospy.init_node('apriltag_control') pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1) rospy.Subscriber('/tag_detections', AprilTagDetectionArray, callback) rospy.spin() ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值