上一篇文章完成了地图的切换,但是切换了地图之后,机器人就无法得知自己在什么地方,所以需要进行定位,实验中定位的方法是相机识别二维码。
二维码识别
二维码识别的功能包是aruco_ros,相机识别到AR码之后就会输出AR码在相机坐标系下的坐标。最开始使用的相机是ZED双目相机,ZED相机的GPU功能包zed-ros-wrapper对工控机的配置要求较高,要有cuda、opencv、英伟达驱动等等,配置这些环境非常麻烦,所以我又找到了cpu的功能包zed_cpu_ros,不需要配置其他的环境,直接编译就可以用,但是会出现一些小问题。后来又换成了realsenseD435i相机,又配置了一番环境librealsense、realsense-ros,终于把相机弄好了。其实利用二维码定位只需要彩色图像,普通的usb相机就可以,但是需要用棋盘格标定,ZED和realsense相机自带标定文件,就不用了标定了。
之后修改aruco_ros功能包的single.launch文件,把里面订阅的图像话题改为相机发布的图像话题,就可以识别二维码了。aruco_ros功能包识别的二维码是AR码,AR码下载地址:arucogen,注意要选择"Original ArUco",之后可以用A4纸打印出来。
运行结果如下图所示,通过rostopic echo /aruco_single/pose命令可以查看二维码在相机坐标系下的位姿:


因为我是使用的相机坐标系是