SLAM--虚拟机环境下的相机标定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SLAM--虚拟机环境下的相机标定相关的知识,希望对你有一定的参考价值。

参考技术A         使用笔记本自带摄像头跑slam,在此之前需要标定笔记本相机。因为使用的是虚拟机下ubuntu14系统,在标定相机时遇到了网上标定教程没有出现的问题。标定前需要安装ros相关软件包。

  (1)   安装相关软件包:

         sudo apt-get install ros-indigo-usb-cam    // 用于接收和发布摄像头数据topic

         sudo apt-get install ros-indigo-image-view // 用于显示

         sudo apt-get install ros-indigo-camera-calibration //用于相机标定

  (2)  发布image topic:  

        相机标定首先要使用usb-cam来获取摄像头数据,运行usb-cam launch文件

         roslaunch usb_cam usb_cam-test.launch 

          如果成功,则会弹出摄像头捕捉的视频窗口,同时rostopic list 出现 /image_raw 和 /camera_info两个话题。但是这一步对于使用虚拟机的同学会遇到很多问题,不过按照如下步骤应该没有问题:

          1)确认camera状态和信息(使用v4lz来操作,这玩意专门用来操作摄像头):

                v4l2-ctl --list-devices   //查询摄像头设备,如输出: /dev/video0  输出设备编号,这个待会用来核对launch文件

               如果没有输出设备编号,说明虚拟机根本没有连接上摄像头,可以通过虚拟机菜单"虚拟机—可移动设备—xx camera—连接",然后再运行此命令,应该就有编号了,说明链接成功,然后按照编号修改对应的launch文件,一般都是video0,不用修改。

            2)v4l2-ctl --list-formats-ext // 查询视频流格式吧?我猜的,不过这个很重要,会输出当前摄像头支持的视频流格式、帧率、图像尺寸等信息,用来修改launch文件

            经过查询发现,虚拟机摄像头支持yuyv和mjpeg两种视频格式,而launch文件默认选择的是yuyv格式,实际使用发现,虚拟机下是不支持这种格式的,所以替换成mjepg格式,其他尺寸可以根据上述命令的输出自己选择。

            3)出现视频窗口,有图像后突然卡死时,更改虚拟机usb设置,将usb兼容调整为1.1,或者别的,我的是1.1,重新启动后不会卡死。

    (3) 运行标定程序:

         在此之前你需要准备棋盘图片,如下,打印尺寸可以自己选择,然后运行:

         rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam // 其中 size是黑白格的横纵点数,square是黑白格边长,image是图像节点名称,camera是相机名称

    (4) 开始标定:

      参照标定说明

以上是关于SLAM--虚拟机环境下的相机标定的主要内容,如果未能解决你的问题,请参考以下文章

SLAM入门之视觉里程计:相机标定 张正友经典标定法详解

如何理解工业相机的标定

光平面标定法

工业相机需不需要标定?

相机标定

相机标定 matlab opencv ROS三种方法标定步骤