1、背景
使用笔记本自带摄像头跑slam,在此之前需要标定笔记本相机。因为使用的是虚拟机下ubuntu14系统,在标定相机时遇到了网上标定教程没有出现的问题。标定前需要安装ros相关软件包。
2、标定步骤
(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) 开始标定: