zl程序教程

您现在的位置是:首页 >  其它

当前栏目

ROS单目相机标定

ros 相机 标定 单目
2023-09-14 09:09:26 时间

link

camera_calibration/Tutorials/MonocularCalibration - ROS Wiki

说明:本教程介绍使用camera_calibration的cameracalibrator.py节点在 ROS 上使用原始图像校准单目相机。 

1. 在开始之前

确保您具备以下条件:

  • 具有已知尺寸的大型棋盘。本教程使用 108 毫米正方形的 8x6 棋盘。校准使用棋盘的内部顶点,因此“9x7”棋盘使用内部顶点参数“8x6”,如下例所示。

  • 一个光线充足的 5m x 5m 区域,没有障碍物并检查板图案
  • 通过 ROS 发布图像的单目相机

USB相机驱动

安装usbcam

如果你的ros版本是 melodic
 sudo apt-get install ros-melodic-usb-cam
如果你的ros版本是 noetic
sudo apt-get install ros-noetic-usb-cam

 
 

 查看接入的USB摄像头的设备号

ls /dev/video*
 
 

修改launch文件,设置USB摄像头的编号


 
 
  1. roscd usb_cam
  2. cd launch
  3. sudo gedit usb_cam-test.launch

修改<param name="video_device" value="/dev/video0" />的参数

启动摄像头

roslaunch usb_cam usb_cam-test.launch

 
 

2.相机内参标定

首先获取依赖项并编译驱动程序。

$ rosdep install camera_calibration
 
 

确保您的单目相机通过 ROS 发布图像。让我们列出主题以检查图像是否已发布:

$ rostopic list
 
 

这将显示所有已发布的主题,检查是否有image_raw主题。大多数 ROS 相机驱动程序提供的默认主题是:


 
 
  1. /camera/camera_info
  2. /camera/image_raw

如果您有多个摄像头或在其自己的命名空间中运行驱动程序,您的主题名称可能会有所不同。

运行校准节点

要开始校准,您需要加载将要校准的图像主题:

$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera
 
 

这将打开校准窗口,该窗口将突出显示棋盘:

如果它没有打开窗口,请尝试以下参数:

--no-service-check
 
 

3.1 双棋盘

New in D

从 Diamondback 开始,您将能够使用多种尺寸的棋盘格来校准相机。

要使用多个棋盘格,请为其他棋盘提供多个--size和--square选项。确保电路板具有不同的尺寸,以便校准系统可以区分它们。

4. 移动棋盘

为了获得良好的校准,您需要在相机框架中移动棋盘格,以便:

  • 相机视野左侧、右侧、顶部和底部的棋盘格
    • X 条 - 视野中的左/右
    • Y 条 - 视野中的顶部/底部
    • 尺寸栏 - 朝向/远离和倾斜相机
  • 棋盘格填满整个视野
  • 棋盘向左、右、上和下倾斜(倾斜)

在每一步,保持棋盘静止,直到图像在校准窗口中突出显示。

当您四处移动棋盘时,您会看到校准侧边栏上的三个条形长度增加。当CALIBRATE按钮亮起时,您有足够的数据进行校准,可以单击CALIBRATE查看结果。

校准可能需要大约一分钟。窗户可能是灰色的,但请稍等,它正在工作。

 

校准结果

校准完成后,您将在终端中看到校准结果,在校准窗口中看到校准后的图像:

成功的校准将导致现实世界中的直边在校正后的图像中显得笔直。

校准失败通常会导致空白或无法识别的图像,或不保留直边的图像。

校准成功后,您可以使用校准窗口顶部的滑块来更改校正图像的大小。比例为 0.0 意味着图像的大小使校正后的图像中的所有像素都有效。校正后的图像没有边框,但原始图像中的一些像素被丢弃。比例为 1.0 意味着原始图像中的所有像素都是可见的,但校正后的图像具有黑色边框,原始图像中没有输入像素。


 
 
  1. D = [ -0.33758562758914146, 0.11161239414304096, -0.00021819272592442094, -3.029195446330518e-05]
  2. K = [ 430.21554970319971, 0.0, 306.6913434743704, 0.0, 430.53169252696676, 227.22480030078816, 0.0, 0.0, 1.0]
  3. R = [ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
  4. P = [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]
  5. # oST version 5.0 parameters
  6. [ image]
  7. width
  8. 640
  9. height
  10. 480
  11. [ narrow_stereo/left]
  12. camera matrix
  13. 430.215550 0.000000 306.691343
  14. 0.000000 430.531693 227.224800
  15. 0.000000 0.000000 1.000000
  16. distortion
  17. -0.337586 0.111612 -0.000218 -0.000030 0.0000
  18. rectification
  19. 1.000000 0.000000 0.000000
  20. 0.000000 1.000000 0.000000
  21. 0.000000 0.000000 1.000000
  22. projection
  23. 1.000000 0.000000 0.000000 0.000000
  24. 0.000000 1.000000 0.000000 0.000000
  25. 0.000000 0.000000 1.000000 0.000000

如果您对校准感到满意,请单击COMMIT将校准参数发送到相机进行永久存储。GUI 退出,您应该在控制台中看到“将校准数据写入...”。

创建一个 yml 文件

Camera Calibration Parser帮助您创建一个 yml 文件,您可以使用camera_info_url参数加载几乎所有 ros 相机驱动程序。

校正图像

简单地加载校准文件并不能纠正图像。要进行整改,请使用image_proc 包