传感器标定(一)摄像头内参标定

news/2024/7/8 2:00:27 标签: 数码相机, 标定

一、使用ROS进行手动标定安装

1、安装 image-view &usb_cam ⽤于驱动相机

sudo apt-get install ros-melodic-image-view
sudo apt-get install ros-melodic-usb-cam

2、查看系统视频设备

v4l2-
ctl -d /dev/video0 --all 查询所有相机具体的参数包括width和height

ls /dev/video*
ls /dev/camera*
v4l2-ctl -d /dev/video0 --all

3、修改配置文件

roscd usb_cam
cd launch
sudo gedit usb_cam-test.launch
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<!-- modify the video device to your device -->
<param name="video_device" value="/dev/video0" />
<!-- modify the size of your device -->
<param name="image_width" value="1920" />
<param name="image_height" value="1080" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false"
output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>

4、开启相机

启动有warning例如提⽰校准配置⽂件 head_camera.yaml not found ,这个是正常的,我们标定
完后才会⽣成这个配置⽂件。

roslaunch usb_cam usb_cam-test.launch

5、根据棋盘格修改参数

  • ⼀个是size参数为棋盘格⻆点数量⽐如 8x9=72 个格⼦的棋盘格,⻆点个数为 7x8=63 个,size
    参数就要写 7x8 ;
  • 另外⼀个参数为square,传⼊的参数为棋盘格⼀个小格⼦的宽度(注意单位为m);
  • image:=/usb_cam/image_raw 标定当前订阅图像来源⾃名为 /usb_cam/image_raw 的
    topic;
  • camera:=/usb_cam 为摄像机名。
rosrun camera_calibration cameracalibrator.py --size 7x6 --square 0.05 image:=/usb_cam/image_raw camera:=/usb_cam

6、图像采集

相机数据采集的过程需要分为两组互相配合,⼀组使⽤ROS程序进⾏采集;另⼀组⼿持棋盘格,在图像
视野范围内进⾏操作和移动。⽰例使⽤的标定板为 7×6 个 50mm×50mm ⼤小的标准棋盘格进⾏。注意,这
⾥的7×6指的是有横向7个⻆点(而⾮格⼦)与纵向6个⻆点。

在这里插入图片描述

  • ⼿持棋盘格要求:
    每次采集尽量保持稳定,最终成像光线适中,图像清晰;
    ⼿持棋盘格时不能对棋盘格进⾏遮挡,不能离开相机视野范围内;
    采集图像类型需要丰富多样,包含:近距离图像、中距离图像、远距离图像、左右倾斜图像、
    上下倾斜图像、轻微旋转图像、较⼤旋转图像、相机靠近左视野边缘图像、相机靠近右视野边
    缘图像等;采集有效图像的数量在50张左右。

  • 界⾯中的 X , Y , size , skew 的含义:
    X :表⽰标定板在视野中的左右位置。
    Y :表⽰标定板在视野中的上下位置。
    size :标定板在占视野的尺⼨⼤小,也可以理解为标定板离摄像头的远近。
    skew :标定板在视野中的倾斜位置

  • 标定实操技巧:
    在相机视野范围内且能识别棋盘格的前提下,左右、上下和前后移动范围尽可能⼤⼀些,将有助于更快
    地满⾜ X , Y , Size 的要求;边移动边扭转标定板,可以更快完成 Skew 。当 X 、 Y 、 Size 、 Skew 四个
    都变成绿⾊,然后就可以看到 CALIBRATE 这个按钮变成⻘⾊,表明已经采到⾜够多的图⽚数据可供标定
    了。

在这里插入图片描述

7、开始标定

点击 CALCULATE 进⾏标定会稍微有点卡顿,不要担⼼后台正在进⾏标定标定完成后观察当前的相机界
⾯,
如果相机成像完全正常了,则说明标定成功了,在终端界⾯会有对应的参数 D K R P :
在这里插入图片描述
另外,点击标定界⾯右下⾯的 SAVE 和 COMMIT 按钮,可保存标定完成后的⽂件到路径
/tmp/calibrationdata.tar.gz 。


http://www.niftyadmin.cn/n/5536036.html

相关文章

前端面试题4(浏览器对http请求处理过程)

浏览器对http请求处理过程 当我们在浏览器中输入URL并按下回车键时&#xff0c;浏览器会执行一系列步骤来处理HTTP请求并与服务器通信。下面是浏览器处理过程 1. 解析URL 浏览器首先解析输入的URL&#xff0c;提取出协议&#xff08;通常是http://或https://&#xff09;、主…

2024年6月份找工作和面试总结

转眼间6月份已经过完了&#xff0c;2024年已经过了一半&#xff0c;希望大家都找到了合适的工作。 本人前段时间写了5月份找工作的情况&#xff0c;请查看2024年5月份面试总结-CSDN博客 但是后续写的总结被和谐了&#xff0c;不知道这篇文章能不能发出来。 1、6月份面试机会依…

p标签文本段落中因编辑器换行引起的空格问题完美解决方案

目录 1.修改前的代码&#xff1a;2.修改后的代码3.总结 在HTML文档中&#xff0c;如何要在&#xff08;p标签&#xff09;内写一段很长的文本段落&#xff0c;并且没有 换行。由于IDE或者编辑器界面大小有限或需要在vue中逻辑处理动态显示文本&#xff0c;一行写完太长&#x…

Node.js适合什么场景下使用

Node.js是一个基于Chrome V8 JavaScript引擎构建的开源运行时环境&#xff0c;它允许开发者使用JavaScript在服务器端运行代码。Node.js具有高性能、轻量级、事件驱动和非阻塞I/O等特性&#xff0c;这些特性使得它在多种场景下具有广泛的应用。以下是Node.js适合使用的几个主要…

Qt界面中的子窗口实现鼠标拖动边缘改变大小以及移动(完整demo代码)

目录 效果 拖拽 移动​编辑 实现 DragResizeWgt类.h文件 DragResizeWgt类.cpp文件 使用 testwidget窗口.ui文件 testwidget窗口.h文件 testwidget窗口.cpp文件 参考 效果 想要的效果就是类似于QT IDE中的效果&#xff0c;可以拖动边缘改变大小&#xff0c;用户自身可…

UE4_材质_水体的反射与折射制作_Ben教程

在这个教程中&#xff0c;将制作水的反射和折射&#xff0c;上个教程&#xff0c;我们主要讲了制作水涟漪&#xff08;水面波纹&#xff09;和水滴法线混合&#xff0c;水深计算&#xff0c;我们首先要谈的是反射和产生折射的问题。我们将所有从干扰从场景中分离出去&#xff0…

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数&#xff08;m_track&#xff09;、绘…

【HDFS】关于Hadoop的IPC.Client类的一些整理

org.apache.hadoop.ipc.Client 类是IPC服务的一个客户端。 IPC请求把一个Writable对象当做参数,返回一个Writable对象当做结果value。 一个IPC服务运行在某个端口上,并且由参数class和value class定义。 Router里的IPC.Client对象就两个 有这样一个类:ClientCache 看名字就…