ROS kinetic 下单目摄像机的标定

在之前博文中,我们使用usb_cam包读入并发布了图像消息,但是图像没有被标定,因此存在畸变
这是自己在ROS下做的一个单目摄像机的标定

1 所需要的包

(1)usb_cam

这是USB摄像头的驱动包

下载地址:
https://github.com/bosch-ros-pkg/usb_cam
(2)标定功能包camera_calibration

下载地址:
https://github.com/ros-perception/image_pipeline
这是ROS下用于标定相机的包,本文是参照此包的教程进行相机标定。没有kinetic版本,亲测indigo版本可用。
教程地址:
http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration

2 标定前的配置

1)首先驱动USB摄像头

可参阅 ROS上安装usb_cam驱动运行USB摄像头

ROS kinetic 下单目摄像机的标定_第1张图片

2)查看发布的话题

 rostopic list

3)运行相机标定的节点
首先要编译

启动标定程序

rosrun camera_calibration cameracalibrator.py --size 9x7 --square 0.108  image:=/usb_cam/image_raw camera:=/usb_cam

注::size 是指棋盘内部角点个数,我是用的标定板公有12x8个角点(即12列8行),”x”是字母,而不是乘号…square指方形的边长,我使用的标定板方形边长为108mm,image为输出图像的话题,usb_cam为相机的名称(即在/image_raw前面部分)

出错:如下
(‘Waiting for service‘, ‘/camera/set_camera_info‘, ‘…‘)
Service not found

运行如下语句: 角点数 棋盘格大小 topic映射

rosrun camera_calibration cameracalibrator.py --size 9x7 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam --no-service-check

ROS kinetic 下单目摄像机的标定_第2张图片

其中参数size 9x7 注意是字母x,他是棋盘内部角点个数,如下图所示。square为棋盘正方形边长,注意刚刚开始标定的时候,CALIBRATE按钮是灰色的。
运行后会弹出标定使用的GUI

ROS kinetic 下单目摄像机的标定_第3张图片

然后将标定板放在前方
ROS kinetic 下单目摄像机的标定_第4张图片

3 标定开始

在出现上述窗口后,拿标定板在窗口中移动,

我们从图1中可以看到,在GUI的右侧有X,Y,Size,Skew这几个标志条
它们的含义是:
(1)x:标定板在图像中的左右位置,从左到右x由小变大。
(2)y:标定板在图像中的上下位置,从上到下y由小变大。
(3)Size:标定板在图像中的大小,由远及近,Size由小变大。
(4)Skew:标定板在图像中倾斜的角度大小

操作过程:

(1)为了得到尽量丰富的x,y值:标定的过程中要尽量缓慢移动标定板,使标定板的位置出现在图像中的各个地方(上中下左右)。
(2)为了得到丰富的Size值缓慢移动标定板,使标定板由远及近,采集到丰富的尺寸信息,最好有一张,标定板占据视野绝大部分的图像。
(3)为了得到丰富的Skew信息,缓慢移动标定板,使标定板的俯仰,偏航,滚动变化。
注:在操作的过程中,标定板移动不要过快,并且,每移动到一个位置要停顿下,如果发现这四标志条都变绿了说明采集到了足够的信息。并且如果可以执行标定,CALIBRATE就会变亮。

4.执行标定,得到结果

CALIBRATE选项变亮后,就可以点击,执行标定(最好各标志条也都变绿),此时图像会变灰,等待几分钟,标定完成后,再把标定板拿到摄像机前会出现如下画面:

ROS kinetic 下单目摄像机的标定_第5张图片

ROS kinetic 下单目摄像机的标定_第6张图片

ROS kinetic 下单目摄像机的标定_第7张图片

5、遇到的问题

1、报错[usb_cam-test.launch] is not a launch file name

运行完roslaunch usb_cam-test.launch后报错说usb_cam-test.launch不是一个launch文件,这是因为没有cd到catkin_ws/src/usb_cam/launch文件夹下,系统找不到这个launch文件
或者如果事先source了该工作空间,可以在任意目录下运行roslaunch usb_cam usb_cam-test.launch都行

2、对于有些节点没有跑起来的情况,可以从下载的catkin_ws/src/usb_cam中找到相应的.py文件然后用cp命令复制到opt/ros/hydro/的相应文件夹下

3、如果出现报错“sh: 1: v4l2-ctl: not found”则需要安装v4l2
运行:

 sudo apt-get install v4l-utils

4 警告:
unknown control 'focus_auto'
head_camera.yaml not found

可以忽略.

你可能感兴趣的:(ROS,Ubuntu)