使用ROS和AprilTags进行相机定位(二维码定位全流程)
实现了使用ROS和AprilTags进行相机定位,参考了大量大佬的博客,做一个整合。
配置环境
虚拟机:VMware15.5.0
ubuntu: 16.04
ros: kinetic
相机:USB外接相机
1 下载虚拟机
下载VMware15
注:如果经常死机和出现各种问题,建议重装别的版本虚拟机。
2 下载Ubuntu16.07
3 安装虚拟机和Ubuntu
4 安装ROS
安装ROS
在进行到初始化rosdep时,会出现error,按如下操作:
#打开hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133 raw.githubusercontent.com
#保存后退出再尝试初始化命令
5 USB相机驱动
检查相机是否使用正常,需要安装如下功能包ROS学习笔记七:在ROS中使用USB摄像头
注:
1 因为安装的ros是kinetic版本,所以安装uvc camera功能包的时候需要修改成kinetic:
sudo apt-get install ros-kinetic-uvc-camera
2 运行uvc_camera节点的时候,因为是rosrun,所以要先开roscore,即
roscore
而roslaunch不用,因为有 .launch 文件。接着再运行:
rosrun uvc_camera uvc_camera_node
最后运行:
rosrun rqt_image_view rqt_image_view
就能掉出摄像头,如下图。
这里建议ROS学习笔记七:在ROS中使用USB摄像头中的USB_cam软件包也安装,不然后续操作可能会报错。
标定、定位
1 相机标定
参考ros学习之camera calibration 单目摄像头标定
标定文件在/tmp/calibrationdata.tar.gz,实际上,也会自动更新到/home/.ros/camera_info/head_camera.yaml中(ctrl+h显示隐藏文件)。标定后退出直接进行下一步。
2 下载AprilTag2源码
2.1 修改文件
解压,放入新建文件夹(catkin_apriltag/src)下。源码使用的不是USB相机,因此需要修改/catkin_apriltag/src/Apriltags2_VO-master/apriltags2_ros/launch/continuous_detection.launch 文件
修改成如下内容:
2.2 编译
cd catkin_apriltag
catkin_make
2.3 修改二维码标签信息
打开 catkin_apriltag/src/Apriltags2_VO-master/apriltags2_ros/config/tags.yaml 文件,本次测试只用了 catkin_apriltag/src/Apriltags2_VO-master/support_image/tag36h11/tag36h11_1.png 这张二维码,编号为1,所以只需修改以下参数(id,打印的二维码实际尺寸):
3启动程序
3.1 启动ros
roscore
3.2 打开摄像头
新开一个终端
roslaunch usb_cam usb_cam-test.launch
3.3 运行apriltags2_ros
新打开一个终端
cd catkin_apriltag
source devel/setup.bash
roslaunch apriltags2_ros continuous_detections.launch
3.4 运行二维码检测节点
新打开一个终端
cd catkin_apriltag
source devel/setup.bash
rostopic echo /tag_detections
如果相机未检测到二维码,会显示
检测到后,显示
4 可视化显示
4.1 运行二维码检测节点
新打开一个终端
cd catkin_apriltag
source devel/setup.bash
rostopic echo /tag_detections_image
4.2 打开可视化工具包Rviz
新打开一个终端
rosrun rviz rviz
4.3 Rviz设置
根据下图提示,对Rviz进行初始化。先改名,然后点击add添加需要显示内容。
结束
欢迎指正补充,谢谢大家!