【Nav2中文网】ROS2单目相机标定教程

本文来自:Nav2中文网教程

完整的Nav2文档和教程请访问:http://nav2.fishros.com

Nav2交流群:139707339

微信公众号:鱼香ROS

相机标定

概述

本教程演示如何通过标定获取单目相机的参数。

要求

1-使用操作系统的包管理器安装相机标定所需软件包

sudo apt install ros-<ros2-distro>-camera-calibration-parsers

sudo apt install ros-<ros2-distro>-camera-info-manager

sudo apt install ros-<ros2-distro>-launch-testing-ament-cmake

2-需要在您的工作空间中从源代码构建Image Pipeline软件包,命令如下:

git clone – b <ros2-distro> git@github.com:ros-perception/image_pipeline.git

另外,请确保您具有以下内容: 

  • 一个已知尺寸的大棋盘。本教程使用的是200mm×200mm的正方形棋盘。* * 由于相机标定使用的是棋盘格的内部顶点,因此需要 "8x10" 的棋盘板。这样使用内部顶点参数就正好是 "7x9" 如下例所示。* *可以从 here 下载。

  • 一个光线充足的5米 × 5米区域,清除障碍物同时检查棋盘图案

  • 一个可以在ROS上发布图像的单目相机

Tutorial Steps

1-在GUI中启动一个终端 

2-启动所使用相机的ROS驱动程序。

3-确保相机正在通过ROS发布图像。这可以通过运行来测试: 

ros2 topic list

4-这将显示你所有发布的话题,确保里面有一个图像话题 /camera/image_raw。确保image_raw话题是一个真实的话题且正在发布图像,需要检查该话题的发布频率:

ros2 topic hz /camera/image_raw

5-启动摄像机标定节点 

ros2 run camera_calibration cameracalibrator --size 7x9 --square 0.20 image:=/my_camera/image_raw camera:=/my_camera

Camera Name:

-c, --camera_name
        name of the camera to appear in the calibration file


Chessboard Options:

You must specify one or more chessboards as pairs of --size and--square options.

  -p PATTERN, --pattern=PATTERN
                    calibration pattern to detect - 'chessboard','circles', 'acircles','charuco'
  -s SIZE, --size=SIZE
                    chessboard size as NxM, counting interior corners (e.g. a standard chessboard is 7x7)
  -q SQUARE, --square=SQUARE
                    chessboard square size in meters

ROS Communication Options:

 --approximate=APPROXIMATE
                    allow specified slop (in seconds) when pairing images from unsynchronized stereo cameras
 --no-service-check
                    disable check for set_camera_info services at startup

Calibration Optimizer Options:

 --fix-principal-point
                    fix the principal point at the image center
 --fix-aspect-ratio
                    enforce focal lengths (fx, fy) are equal
 --zero-tangent-dist
                    set tangential distortion coefficients (p1, p2) to
                    zero
 -k NUM_COEFFS, --k-coefficients=NUM_COEFFS
                    number of radial distortion coefficients to use (up to
                    6, default 2)
 --disable_calib_cb_fast_check
                    uses the CALIB_CB_FAST_CHECK flag for findChessboardCorners

    This will open a calibration window which highlight the checkerboard.

6为了得到更好的标定结果需要在相机视野范围内不断移动棋盘格:

  • 使得棋盘到达相机视野左侧、右侧、顶部和底部 

    ◦ X-相机视野中的左/右方向

    Y-相机视野中的上下方 

    ◦ Size -接近/远离相机以及相对相机倾斜

  • checkerboard filling the whole field of view

  • 让棋盘格向左、右、上、下倾斜(Skew)

7 随着棋盘格的不断移动,标定窗口侧边栏上的4个横条的长度会不断增长。当所有4个横条都变成绿色并且有足够的数据可用于标定时,“CALIBRATE”按钮将会变亮。单击查看结果。标定大约需要花一分钟时间。

8-校准完成后,保存和提交按钮亮起。在终端中也可以看到标定结果。

9-按保存按钮后可以查看到结果。数据保存到 "/tmp/calibrationdata.tar.gz" 

10-要使用该相机标定结果的文件,请执行以下命令解压缩该文件(calibration.tar.gz) 

tar -xvf calibration.tar.gz

11-在标定结果文件夹中,可以看到用于标定的所有图像以及 “ost.yaml” 和 “ost.txt”文件。您可以使用包含相机驱动程序的校准参数的yaml文件。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
ROS2是一个开源的机器人操作系统,其中包含了许多用于机器人应用开发的功能库和工具。而单目相机标定是在机器人视觉应用中非常重要的一步,可以帮助我们得到相机的内参和外参等参数,从而对图像进行更加准确的处理和分析。下面是ROS2单目相机标定教程: 1. 首先需要安装ROS2,可以参考ROS2官方网站进行安装。 2. 安装相机驱动程序,例如USB相机可以使用UVC Camera驱动程序,可以通过以下命令进行安装: ``` sudo apt-get install ros-<distro>-uvc-camera ``` 其中`<distro>`为ROS2的版本号。 3. 安装相机标定工具包,可以使用以下命令进行安装: ``` sudo apt-get install ros-<distro>-camera-calibration ``` 4. 打开终端并输入以下命令,启动相机: ``` ros2 run uvc_camera camera_node ``` 5. 接下来需要收集标定所需的数据。可以通过运行以下命令启动图像采集节点: ``` ros2 run image_tools cam2image ``` 6. 在运行节点之后,会自动保存一些图像文件。需要尽可能地采集不同的角度、距离和姿态的图像,以便后续标定的准确性。 7. 完成图像采集后,运行以下命令进行标定: ``` ros2 run camera_calibration cameracalibrator --ros-args -p camera:=/camera -p image:=/image_raw ``` 其中`/camera`和`/image_raw`分别为相机和图像采集节点的话题名称。执行该命令后,会自动打开一个图形界面,显示采集到的图像。按照指导完成标定即可。 8. 标定完成后,可以通过以下命令查看标定结果: ``` ros2 run camera_calibration cameracheck.py ``` 以上就是ROS2单目相机标定教程,希望能够帮助到你。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值