ROS单目相机标定

news/2024/11/29 7:40:51/

camera_calibration/Tutorials/MonocularCalibration - ROS Wiki

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

1. 在开始之前

确保您具备以下条件:

  • 具有已知尺寸的棋盘。本文使用 16.2 毫米正方形的 9x6 棋盘。校准使用棋盘的内部顶点,因此“10x7”棋盘使用内部顶点参数“9x6”.

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

USB相机驱动

安装usbcam

sudo apt-get install ros-noetic-usb-cam

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

ls /dev/video*

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

roscd usb_cam
cd launch
sudo gedit usb_cam-test.launch 

修改相关参数:

    <param name="video_device" value="/dev/video2" />
    <param name="image_width" value="1920" />
    <param name="image_height" value="1080" />

启动摄像头

roslaunch usb_cam usb_cam-test.launch

2.相机内参标定

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

rosdep install camera_calibration

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

rostopic list

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

/usb_cam/camera_info
/usb_cam/image_raw

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

运行校准节点

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

注意参数设置(根据实际情况修改):--size 9x6 --square 0.016 image:=/usb_cam/image_raw camera:=/usb_cam

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

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

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

--no-service-check

3.1 双棋盘

New in D

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

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

4. 移动棋盘

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

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

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

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

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

 

校准结果

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

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

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

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

('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')
D = [0.03257360705000341, -0.11851634449448158, 0.0014113553036914411, 0.00610340762583152, 0.0]
K = [1635.8739906276044, 0.0, 949.1184202585939, 0.0, 1638.805293346875, 527.1296666414235, 0.0, 0.0, 1.0]
R = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P = [1630.2681884765625, 0.0, 958.9767602878273, 0.0, 0.0, 1646.3248291015625, 527.5539122417395, 0.0, 0.0, 0.0, 1.0, 0.0]
# oST version 5.0 parameters[image]width
1920height
1080[narrow_stereo]camera matrix
1635.873991 0.000000 949.118420
0.000000 1638.805293 527.129667
0.000000 0.000000 1.000000distortion
0.032574 -0.118516 0.001411 0.006103 0.000000rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000projection
1630.268188 0.000000 958.976760 0.000000
0.000000 1646.324829 527.553912 0.000000
0.000000 0.000000 1.000000 0.000000

如果您对校准感到满意,请单击COMMIT将校准参数发送到相机进行永久存储。GUI 退出,您应该在控制台中看到“将校准数据写入...”。('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

创建一个 yml 文件

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

打开并解压校准参数文件,解压calibrationdata.tar.gz文件后,可以查看图像文件(*.png)和记录了校准中使用的校准参数的ost.txt文件。

cd /tmp
tar -xvzf calibrationdata.tar.gz

修改校准参数文件,把ost.txt文件改名为ost.ini,并使用camera_calibration_parsers功能包
的convert节点创建相机参数文件(camera.yaml)。创建完成后,将其保存在~/.ros/camera_info/目录中,则ROS中使用的相机相关功能包会引用此信息。

mv ost.txt ost.ini  #修改名字
rosrun camera_calibration_parsers convert ost.ini camera.yaml #转换成相机引用信息 
sudo mkdir ~/opt/ros/noetic/camera_info    #创建相机信息文件夹
sudo mv camera.yaml ~/opt/ros/noetic/camera_info/    #移动到该文件下

   重新运行相机节点,打印标定信息:

roslaunch usb_cam usb_cam-test.launch
rostopic echo usb_cam/camera_info

 

校正图像

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


http://www.ppmy.cn/news/726154.html

相关文章

ROS单目相机标定 ------ 亲测

link 主要参考&#xff11; 主要参考&#xff12; 主要参考&#xff13; camera_calibration/Tutorials/MonocularCalibration - ROS Wiki 说明&#xff1a;本教程介绍使用camera_calibration的cameracalibrator.py节点在 ROS 上使用原始图像校准单目相机。 1. 在开始之前 确…

【LCC系列】不用标定目标,实现高分辨率激光雷达和相机的像素级自标定(2020)

文章目录 1 动机2 方法2.1 边缘约束2.2 边缘提取2.3 边缘匹配2.4 外参标定2.4.1 测量噪声2.4.2 外参优化2.4.3 估计的不确定性2.4.4 边缘分布的影响 3 实验 本文介绍一个 高分辨率激光雷达(Livox)和相机的外参标定方法&#xff08;targetless方法&#xff09;&#xff0c;该方…

飞思卡尔MC9S12X:CAN初始化配置

飞思卡尔MC9S12X&#xff1a;CAN初始化配置 飞思卡尔MC9S12X&#xff1a;CAN发送配置 飞思卡尔MC9S12X&#xff1a;CAN接收配置 飞思卡尔MC9S12X&#xff1a;CAN驱动函数在主函数中的应用 一、MSCAN初始化流程 查询是否进入初始化状态&#xff0c;如不是&#xff0c;进入初始化…

ROS下单目相机标定过程

下面简单记录一下我利用ros标定相机参数的过程&#xff0c;Ubuntu 16.04 &#xff0c;摄像头用的罗技C920 ROSwiki有相机矫正的官方文档&#xff0c;有单目的也有立体相机的教程&#xff0c;建议直接看原文&#xff0c;原汁原味&#xff1a;链接 1、相机标定第一步&#xff0…

470款日系文艺LR预设电影质感Lightroom预设PR/PS/AE/FCPX/LUT预设

下载&#xff1a;470款日系文艺LR预设电影质感Lightroom预设PR/PS/AE/FCPX/LUT预设

相机参数标定(camera calibration)及标定结果如何使用

重要更新&#xff1a;本文的第二次更新已发布。为了不破坏现有内容的结构&#xff0c;故重新开始新的一篇文章。同时本文的一些内容也会涵盖进去。 欢迎关注。 《第二更&#xff0c;相机参数标定基础&#xff1a;从小孔成像开始到单双目标定》 关于实践部分&#xff0c;可参…

realsense系列相机ros内外参标定2022.11.20

这里写目录标题 环境 环境 ros kinetic ubuntu 16.04 相机 realsense D455i 想着realsense是否和kinect一样进行内参标定&#xff0c;输出yaml文件&#xff0c;但是搜了一堆内容&#xff0c;并没有什么完整或是可靠的说法。 https://github.com/IntelRealSense/realsense-ros/…

六、相机标定效果评价

1. 重投影误差 检测到的二维图像的角点和真实世界三维点的投影点之间的距离。使用标定得到的相机的内外参和畸变参数将三维世界的点投影得到像素像素坐标系中的二维角点&#xff0c;然后和算法检测到的二维图像的角点计算均方误差&#xff08;RMS&#xff09;, 一般平均重投影…