二维码识别
1 准备开始
在进行二维码识别前,我们需要做一些准备。
打印二维码,二维码放在了/handsfree_ros_ws/src/handsfree/handsfree_ar_tags/config目录下
tips:这里由于算法缘故,若将二维码在手机上打开进行识别,摄像头很难识别出来!
确保摄像头可以正常工作,可以根据驱动测试中的rgbd_camera测试完成这一步。(如果之前已经测试完成,请忽略此步骤)
注意:要关掉有进程正在运行的终端,请在该窗口使用 Ctrl+C
来中断程序,然后在关掉该窗口。
2 简明步骤
您只需要打开2个终端,分别输入下面2条命令
roslaunch handsfree_camera view_camera.launch
roslaunch handsfree_ar_tags ar_indiv_rgb_camera.launch
然后在镜头前晃动印有二维码的纸张(不要晃太快哦!)
tips:roslaunch handsfree_camera view_camera.launch
也可以用roslaunch handsfree_camera camera.launch
来替代。前者会自打开RViz可视化界面,后者不会打开可视化界面,但是可以根据您个人的喜欢,使用其他可视化界面。
3 识别二维码
打开终端(Ctrl+Alt+T),运行摄像头驱动节点并打开可视化界面
roslaunch handsfree_camera view_camera.launch
这条指令运行了摄像头的驱动节点,并且将RViz可视化界面打开了。如果您只需要运行摄像头的驱动节点,可以将上面的命令
roslaunch handsfree_camera view_camera.launch
替换为roslaunch handsfree_camera camera.launch
如果您的RViz可视化界面没有这两个摄像头的窗口,那么需要您手动添加,点击左下角的
Add
按钮进行添加,会弹出一个小窗口,选中里面的Camera
,然后点击ok
就会添加成功.
添加成功后,需要进行设置,才能让Camera框显示图像,找到侧边栏的Camera点击使其展开,将Visiblity选框中的勾去掉,设置Image Topic的图像话题,一般我们选择的是/camera/rgb/image_raw和/camera/depth/image_raw
如果添加的Camera组件无法显示画面,则更改为Image组件去做上诉同样的操作。
启动二维码识别节点
打开一个新终端,我们选择使用RGB图像数据进行二维码识别,输入下面这条指令
roslaunch handsfree_ar_tags ar_indiv_rgb_camera.launch
正常情况下,会显示:
或者选择使用深度图像数据进行二维码识别,指令如下
roslaunch handsfree_ar_tags ar_indiv_depth_camera.launch
tips:上面两条命令二选一即可,它们都是使用开源的二维码识别库
ar_track_alvar
进行二维码的识别,ar_indiv_rgb_camera.launch
和ar_indiv_depth_camera.launch
文件的主要区别是订阅的话题不同,更多资料请参考ar_track_alvar
的WIKI。查看二维码信息
我们可以在之前打开的RViz可视化界面上看到二维码的信息
或者打开一个新终端,用
rostopic echo
命令查看摄像头所识别二维码的话题/ar_pose_marker
的实时信息rostopic echo /ar_pose_marker
运行结果如下图
当您将二维码移动到镜头处,就会看到该窗口打印的信息发生了变化
在摄像头打印出二维码的topic信息后,您会看到
position
和orientation
的信息,这是机器人通过摄像头获取的数据将二维码所在空间的位置和姿态计算了出来。这些数据将会为机器人跟踪二维码提供便利。小结
识别二维码需要在终端运行两条指令,打开两个节点
- 先要运行摄像头的驱动节点,确保摄像头能够被开启,捕获图像数据。
- 需要运行二维码的识别节点,确保摄像头能处理图像数据,将二维码识别出来。