使用USB网络摄像头和ROS跟踪ArUco Markers

本文介绍如何使用ArUco标记辅助机器人视觉定位,通过OpenCV和ROS实现标记检测与位姿估计,详细步骤包括环境搭建、相机标定及结果可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在实际应用中,在环境中部署下图所示的Markers,可以辅助机器人进行定位,弥补单一传感器的缺陷,纠正误差等。
在这里插入图片描述
相关资料

安装与运行

1.安装aruco_ros

mkdir -p ~/aurco_catkin_ws/src
cd ~/aurco_catkin_ws/src
git clone https://github.com/pal-robotics/aruco_ros.git
cd ..
catkin_make install
sudo apt-get install ros-indigo-usb-cam  #安装USB摄像头的ROS驱动,如果已经安装,可跳过
source install/setup.bash
gedit src/aruco_ros/aruco_ros/launch/single.launch

修改single.launch文件,将图像和相机信息重新映射到usb_cam节点发布的主题:

<remap from=”/camera_info” to=”/usb_cam/camera_info” />
<remap from=”/image” to=”/usb_cam/image_raw” />

2.依次打开4个终端
(1)启动ROS

roscore

(2)启动相机

roslaunch usb_cam-stream.launch

(3)检测Marker

cd ~/catkin_ws/src/aruco_ros/aruco_ros/launch/
roslaunch single.launch

(4)启动窗口,可视化检测结果

rosrun image_view image_view image:=/aruco_single/result

到这里,可以检测到Marker,并识别出其ID,但是要想得到pose,还需要使用ROS的标定工具对USB摄像头进行标定,获取其相机内参和畸变系数,标定完成后文件会默认保存在~/.ros/camera_info/head_camera.yaml。如果没有进行标定,在启动摄像头时也会提示~/.ros/camera_info/head_camera.yaml不存在。
我的head_camera.yaml:

image_width: 640
image_height: 480
camera_name: head_camera
camera_matrix:
rows: 3
cols: 3
data: [715.4773327272667, 0, 350.1774419385586, 0, 714.726332331103, 267.833062747371, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [0.02384819558244758, -0.3101676611115829, 0.002988493020889629, 0.006854673868651895, 0]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [707.2898559570312, 0, 354.6659889406728, 0, 0, 713.671875, 268.9584187581204, 0, 0, 0, 1, 0]

查看效果

查看位姿

rostopic echo /aruco_single/pose

以下为一次输出结果:

header:
seq: 4711
stamp:
secs: 1539847947
nsecs: 58810749
frame_id: stereo_gazebo_left_camera_optical_frame
pose:
position:
x: 0.0115116648376
y: -0.0146708637476
z: 0.124073162675
orientation:
x: -0.484284689864
y: 0.522697337469
z: -0.478991615536
w: 0.512662525266

效果图
在这里插入图片描述
其中,左上角的窗口/aruco_single/result显示了检测到了ID为33的Marker,并且以Marker中心为原点画出了xyz坐标系,右上角的窗口/aruco_single/pose显示了相机的位姿,包括三维空间中的坐标和以四元数表示的姿态。
疑惑
这里只检测到了一个Marker。
猜测
因为我们启动的single.launch只包含一个Marker的信息,其同级目录下还有double.launch,所以我猜测还要根据实际需求,自定义Marker的数量和尺寸等信息。

总结

到这里,只是跑通了一个Demo,如果想实际应用,还要看文档和代码,进行深入的理解和必要的修改。

<think>好的,我现在需要帮助用户解决在ROS使用Aruco标记的问题。用户提到了几个引用,其中包含生成标记的指令一些外部链接。首先,我应该确认用户的需求是什么,他们可能想要在ROS环境中实现Aruco标记的检测姿态估计。 首先,用户提供的引用[1]提到了用rosrun命令生成标记,这应该是创建Aruco标记的步骤。然后引用[2]给出了几个链接,包括OpenCV的教程、aruco_mappingaruco_pose的ROS Wiki页面。这些资源应该能帮助用户安装必要的包并开始使用。 接下来,我需要整理步骤。首先,用户需要安装相关的ROS包,比如aruco_rosaruco_mappingaruco_pose。然后,生成标记,使用提供的Python脚本。之后,配置摄像头节点,确保图像数据正确发布。启动检测节点,可能需要调整参数。最后,进行姿态估计或地图构建。 用户可能遇到的问题包括包安装失败、摄像头配置不正确、参数设置错误等,所以需要提醒常见问题。另外,相关的问题可能涉及参数调整、与其他SLAM系统集成以及动态环境中的使用。 需要确保回答结构清晰,分步骤说明,并且正确引用提供的资料。同时,按照用户要求,数学公式使用$...$,独立公式用$$...$$,但当前问题可能不涉及数学公式,所以可能不需要。但如果有的话,比如姿态估计的公式,需要正确格式化。 最后,生成相关问题,比如如何生成不同尺寸的标记,或者如何处理多标记检测。这些问题需要基于用户可能遇到的后续疑问来设计。</think>以下是在ROS使用Aruco标记进行检测的详细步骤说明: ### 一、环境配置 1. 安装`aruco_ros`套件: ```bash sudo apt-get install ros-<distro>-aruco-ros # 替换<distro>为ROS版本,如noetic ``` 建议同时安装`aruco_mapping``aruco_pose`扩展包[^2] ### 二、标记生成 使用系统提供的Python脚本生成标记: ```bash rosrun aruco_detect create_markers.py [字典ID] [标记ID] [输出文件] # 示例生成100号字典的112号标记 rosrun aruco_detect create_markers.py 100 112 fiducials.pdf ``` 支持输出PDF或PNG格式[^1] ### 三、摄像头配置 1. 确保摄像头驱动正常: ```bash roslaunch usb_cam usb_cam-test.launch ``` 2. 验证图像话题: ```bash rostopic echo /usb_cam/image_raw ``` ### 四、标记检测 启动检测节点: ```bash roslaunch aruco_ros single.launch ``` 关键参数配置: ```xml <param name="marker_size" value="0.15"/> <!-- 标记实际尺寸(米) --> <param name="camera_frame" value="usb_cam"/> <param name="marker_frame" value="aruco_marker"/> ``` ### 五、姿态估计 通过`aruco_pose`包获取空间位姿: ```bash roslaunch aruco_pose aruco_pose.launch ``` 输出话题包含: - `/aruco_pose/result`(位姿数据) - `/aruco_pose/visualization`(可视化标记) ### 常见问题处理 | 问题现象 | 解决方案 | |---------|----------| | 检测不到标记 | 1. 检查字典ID匹配性<br>2. 调整标记尺寸参数<br>3. 优化光照条件 | | 位姿抖动 | 1. 启用姿态滤波<br>2. 降低检测频率<br>3. 增加标记尺寸 | | 坐标系错乱 | 1. 校准相机内参<br>2. 检查TF树配置 | ### 六、进阶应用 通过`aruco_mapping`实现SLAM: ```bash roslaunch aruco_mapping aruco_mapping.launch ``` 支持多标记全局地图构建[^2]
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值