ROS系列2.2:使用ROS进行AprilTag识别
ROS创建工作环境
首先安装 Ubuntu20.04 及 ROS-noetic
sudo apt-get install ros-noetic-usb-cam 安装usb_cam
设置VMware连接 虚拟机-设置-USB控制器-USB兼容性,将USB2.0改成USB3.1
mkdir catkin_ws 在~根目录下创建一个工作环境,一般我们取名为catkin_ws
cd catkin_ws
mkdir src
在~/catkin_ws/src这里下载这两个文件夹:
- https://gitcode.net/mirrors/ros-perception/image_pipeline/-/tree/noetic/camera_calibration (只需要camera_calibration这个包)
- https://gitcode.net/mirrors/ManiiXu/Apriltags2_VO?utm_source=csdn_github_accelerator
cd ~/catkin_ws
catkin_make
单目摄像头标定
准备好打印有这张图片的A4纸:
在catkin_ws目录下右键打开终端,在终端窗口左上角再打开三个终端
VMware连接相机 虚拟机-可移动设备-camera-连接
第一个终端输入roscore
第二个终端输入roslaunch usb_cam usb_cam-test.launch
第三个终端输入
rosrun camera_calibration cameracalibrator.py --size 7x5 --square 0.018 image:=/usb_cam/image_raw camera:=/usb_cam
将打印的标定图在相机框架中移动:
要出现摄像头的各个位置
要求:
相机的左侧,右侧,顶部和底部的棋盘格
X栏 - 在视野中左/右
Y栏 - 视野中的顶部/底部
尺寸栏 - 朝向/离开并从相机倾斜
棋盘填满整个视野
棋盘向左,向右,向上和向下倾斜(歪斜)
在每个步骤中,保持棋盘静止,直到图像在校准窗口中突出显示。
如果摄像头闪退,不运行roscore命令减小系统负载
移动棋盘时,你会看到校准侧栏上的三个条的长度增加。当CALIBRATE按钮亮起时,你有足够的数据进行校准,可以单击CALIBRATE查看结果。
校准可能需要大约一分钟。按钮可能是灰色的,但只是等待,它正在工作。
结果处理:
点击save,会卡一会。
点击upload。数据会自动导入。
重新启动摄像头
标定完成。
相机标定好的yaml文件一般会在/home/yourname/.ros/camera_info路径下(ctrl+H查看隐藏文件夹)
开始检测
准备好打印有apriltag的白纸
在catkin_ws目录下右键打开终端,在终端窗口左上角再打开几个终端
VMware连接相机 虚拟机-可移动设备-camera-连接
第一个终端输入roscore
第二个终端输入roslaunch usb_cam usb_cam-test.launch
第三个终端输入source devel/setup.bash再输入roslaunch apriltags2_ros continuous_detection.launch
第四个终端输入source devel/setup.bash再输入rostopic echo /tag_detections
Tip : 如果想避免每次都source,可以
- 更改~目录下的.bashrc文件,在末尾添加一行source ~/catkin_ws/devel/setup.bash
- ~目录下打开终端,输入sudo gedit .bashrc_profile
- 在.bashrc_profile文件中输入以下代码:
-
if [ -f ~/.bashrc ]; then . ~/.bashrc fi - 输入source .bashrc
依次运行,会看到 tag_detections 从 detections=[] 变为 detections: 二维码的位姿信息
如果想将二维码可视化:
打开第五个终端,输入source devel/setup.bash再输入rostopic echo /tag_detections_image
打开第六个终端,输入rosrun rviz rviz
将红圈的map改为usb_cam,点击add按钮添加话题,首先把二维码检测的话题添加进去

二维码检测的话题添加进去后在左下角就可以看到被标记出来的二维码标签,再将路径和姿态两个话题添加进去

这时主图出现的是一个箭头,将蓝色圆圈的内容修改为Axes,就可以看到主图所示

如果想查看工作具体是怎样进行的,可以再新建终端,运行 rosrun rqt_graph rqt_graph
如果无法识别你的特定AprilTag:
可以试着修改二维码标签在世界坐标系下的位姿:
catkin_ws/src/Apriltags2_VO/apriltags2_ros/config路径下的tags.yaml文件
tag_bundles:
[
{
name: 'my_bundle',
layout:
[
{id: 0, size: 0.143, x: 0.0000, y: 0.0000, z: 0.0, qw: 0.707, qx: 0.0, qy: 0.0, qz: -0.707},
{id: 1, size: 0.143, x: 1.2000, y: 0.0000, z: 0.0, qw: 0.707, qx: 0.0, qy: 0.0, qz: -0.707},
{id: 2, size: 0.143, x: 2.4000, y: 0.0000, z: 0.0, qw: 0.707, qx: 0.0, qy: 0.0, qz: -0.707},
{id: 3, size: 0.143, x: 3.6000, y: 0.0000, z: 0.0, qw: 0.707, qx: 0.0, qy: 0.0, qz: -0.707},
{id: 4, size: 0.143, x: 4.8000, y: 0.0000, z: 0.0, qw: 0.707, qx: 0.0, qy: 0.0, qz: -0.707}
]
}
]
先测量自己AprilTag的二维码边长(单位:米),修改id: 1下的二维码 x: 和 y:
非原创,参考CSDN文章如下:
使用Apriltag2-ROS对相机进行定位 https://blog.csdn.net/TFZ941214/article/details/90711885
apriltags2_ros应用实践——如何在realsense d435i上使用apriltags二维码实现定位 https://blog.csdn.net/qq_41839222/article/details/89606859
ros学习之camera calibration 单目摄像头标定 https://blog.csdn.net/weixin_43331257/article/details/82932904
ROS运行调用摄像头无法显示的解决办法 https://blog.csdn.net/Amazingren/article/details/83411899
ROS usb_cam 试错汇总 https://blog.csdn.net/weixin_46311087/article/details/113791152
ros学习之camera calibration 单目摄像头标定 https://blog.csdn.net/weixin_43331257/article/details/82932904

浙公网安备 33010602011771号