相机坐标系的建立与二维码识别


上一篇文章完成了地图的切换,但是切换了地图之后,机器人就无法得知自己在什么地方,所以需要进行定位,实验中定位的方法是相机识别二维码。

二维码识别

二维码识别的功能包是aruco_ros,相机识别到AR码之后就会输出AR码在相机坐标系下的坐标。最开始使用的相机是ZED双目相机,ZED相机的GPU功能包zed-ros-wrapper对工控机的配置要求较高,要有cuda、opencv、英伟达驱动等等,配置这些环境非常麻烦,所以我又找到了cpu的功能包zed_cpu_ros,不需要配置其他的环境,直接编译就可以用,但是会出现一些小问题。后来又换成了realsenseD435i相机,又配置了一番环境librealsenserealsense-ros,终于把相机弄好了。其实利用二维码定位只需要彩色图像,普通的usb相机就可以,但是需要用棋盘格标定,ZED和realsense相机自带标定文件,就不用了标定了。
之后修改aruco_ros功能包的single.launch文件,把里面订阅的图像话题改为相机发布的图像话题,就可以识别二维码了。aruco_ros功能包识别的二维码是AR码,AR码下载地址:arucogen,注意要选择"Original ArUco",之后可以用A4纸打印出来。
运行结果如下图所示,通过rostopic echo /aruco_single/pose命令可以查看二维码在相机坐标系下的位姿:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210414215531584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2MTgwNA==,size_16,color_FFFFFF,t_70#pic_center

相机坐标系的建立

上面的过程只是完成了二维码对相机的定位,最终的目的是完成二维码对机器人的定位,所以要把相机固定在机器人上面,并且建立相机的坐标系发布到tf树上。机器人坐标系为/base_link,相机坐标系为/camera_color_optical_frame,二维码坐标系为/aruco_marker_frame。
先来看看realsenseD435i相机的坐标系

通过查阅官方的realsense相机手册,找到了该相机的镜头和坐标系说明,供参考。
在这里插入图片描述
在这里插入图片描述
因为我是使用的相机坐标系是