[1]Loitor VI Sensor 可以通过 ROS 自自带的双目相机标定工工具 cameracalibrator.py 来标定相机内参,详细过程http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration
[2] 下载源码: https://github.com/loitor-vis
准备工作:
- 明亮的5米x 5米区域无障碍物和检查板图案
- 一个立体相机通过ROS发布左右图像(如果要使用两个独立的相机作为立体相机,必须确保图像具有相同的时间戳)
注意 :棋盘大小指的是内部角的数量。
1.安装标定工工具(首先获取依赖关系并编译驱动程序。)
$ rosdep install camera_calibration
$ rosmake camera_calibration
2. 启动VI-Sensor的ROS驱动程序
参考http://www.cnblogs.com/Jessica-jie/p/6582720.html中的 [2.ROS Package的编译]
[3.ROS Package的启动]
3.Camera Publishing
确保您的立体相机正在通过ROS发布左图像和右图像。 让我们列出要检查图像是否已发布的主题:
$ rostopic list
这将显示所有发布的主题,检查是否有一个左右image_raw主题:
wj@wj-Inspiron-5437:~$ rostopic list
/camera/left/image_raw
/camera/left/image_raw/compressed
/camera/left/image_raw/compressed/parameter_descriptions
/camera/left/image_raw/compressed/parameter_updates
/camera/left/image_raw/compressedDepth
/camera/left/image_raw/compressedDepth/parameter_descriptions
/camera/left/image_raw/compressedDepth/parameter_updates
/camera/left/image_raw/theora
/camera/left/image_raw/theora/parameter_descriptions
/camera/left/image_raw/theora/parameter_updates
/camera/right/image_raw
/camera/right/image_raw/compressed
/camera/right/image_raw/compressed/parameter_descriptions
/camera/right/image_raw/compressed/parameter_updates
/camera/right/image_raw/compressedDepth
/camera/right/image_raw/compressedDepth/parameter_descriptions
/camera/right/image_raw/compressedDepth/parameter_updates
/camera/right/image_raw/theora
/camera/right/image_raw/theora/parameter_descriptions
/camera/right/image_raw/theora/parameter_updates
/image
/imu0
/rosout
/rosout_agg
4.Running the Calibration Node运行校准节点
要开始校准,需要加载要校准的图像主题,输入以下命令:
(如果使用多个棋盘,请为其他棋盘提供多个--size和--square选项)
下面红色部分需要自己修改,将标定棋盘的单元格大大小小转化为单位米。
wj@wj-Inspiron-5437:~$ cd workspace/catkin_ws
wj@wj-Inspiron-5437:~/workspace/catkin_ws$ sudo -s
[sudo] password for wj:
root@wj-Inspiron-5437:~/workspace/catkin_ws# source devel/setup.sh
root@wj-Inspiron-5437:~/workspace/catkin_ws# rosrun camera_calibration cameracalibrator.py --size 7x7 --square 0.025 --no-service-check --approximate=0.1 right:=/camera/right/image_raw left:=/camera/left/image_raw right_camera:=/camera/right left_camera:=/camera/left
命令会打开校准窗口,要突出显示棋盘。(在棋盘存在之前,您将不会在校准窗口中看到任何图像):
注意事项:
1.拿着棋盘:确保水平地保持棋盘(更多的棋子水平而不是垂直)。
2.移动棋盘:为了获得良好的校准,您需要在相机框架中移动棋盘使得:
- 在视场的左右边缘检测棋盘(X校准)
- 在视场的顶部和底部边缘检测棋盘(Y校准)
- 以相对于照相机的各种角度检测棋盘(“倾斜”)
- 棋盘填充整个视野(尺寸校准)
- 棋盘格向左,右,上和下倾斜(X,Y和尺寸校准)
5. 判断标定数据已经采集完成
当您移动周围的棋盘时,会看到校准侧边栏上的三个条形的长度增加。
当"CALIBRATE"按钮亮起时,就意味着采集完成。
终端中的显示:
6.校准结果
采集完成后,可以进行行内参计算。点击一次CALIBRATE按钮,等待1分钟左右就会出现标定结果:
校准完成后,您将在终端中看到校准结果,并在校准窗口中看到校准的图像。
侧边栏将显示棋盘方块的测量精度和尺寸,在上述情况下,棋盘方块为111mm,精度为0.31像素。
成功的校准将导致真实世界的直边在校正的图像中直线出现。
校准失败通常会导致空白或无法识别的图像,或者不保存直边的图像。
通常,低于0.25像素的极线误差被认为是可接受的,并且低于0.1极好。
还可以使用校准窗口顶部的滑块更改校正图像的大小,如下所示。 尺度为0.0意味着图像的大小被设置为使得整形图像中的所有像素都是有效的。 整形图像没有边界,但是丢弃了来自原始图像的一些像素。 1.0的标度意味着原始图像中的所有像素都是可见的,但是校正后的图像具有黑色边界,其中原始图像中没有输入像素。 推荐的滑块值为0.0。
7.后续处理
[1]此时的标定GUI界面面会显示示实时畸变矫正之后的图像,您可以根据显示示图像的矫正效果来评
估当前标定参数的准确性(如果矫正效果不满意可以重新标定)。
[2]有关立体相机模型的更多详细信息(包括这些结果的解释),请参见http://opencv.willowgarage.com/documentation/python/camera_calibration_and_3d_reconstruction.html和image_geometry 。
[3]如果对校准感到满意,请单击提交 (在上面的图片上是按钮具有旧名称UPLOAD ),以将校准参数发送到相机进行永久存储。
如果要保存校准中使用的校准参数和图像,请单击“ 保存” 。 一切都将在压缩文件夹/如果您对校准感到满意,请单击提交 (在上面的图片上是按钮具有旧名称UPLOAD ),以将校准参数发送到相机进行永久存储。
如果要保存校准中使用的校准参数和图像,请单击“ 保存” 。 一切都将在压缩文件夹/tmp/calibrationdata.tar.gz中提供。