相机标定实验

news2024/10/24 7:22:27

相机标定

文章目录

  • 相机标定
  • 1 ROS标定
    • 1.1安装标定程序
    • 1.2 下载标定板
    • 1.3 标定
    • 1.4 标定结果
  • 2 Kalibr相机标定
    • 2.1 下载官方提供的标定板
    • 2.2 自定义标定板
    • 2.3 cam数据录制
    • 2.4 标定
    • 2.5 输出结果
  • 3 MATLAB标定
    • 3.1 打开工具
    • 3.2 添加标定板图片
    • 3.3 设置标定参数
    • 3.4 生成标定结果
    • 3.5 标定结果

1 ROS标定

​ 这里使用了OpenCV camera calibration

1.1安装标定程序

sudo apt install ros-$ROS_DISTRO-camera-calibration

# https://github.com/ros-perception/image_pipeline/tree/melodic源码安装

​ 选择对应的ROS版本,新建一个工作空间,把camera-calibration拖进去编译即可。

在这里插入图片描述

1.2 下载标定板

​ 可以自己生成生成标定板网站,也可以直接用这个

1.3 标定

  • 打开相机标定节点并指定话题
rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.02 image:=/camera2/camera/color/image_raw

–size 9x6 表示棋盘格按照角点(两个黑色块相接的地方)为9列6行

–square 0.02 表示每个黑白块的边长为2cm

image:=/camera/rgb/image_raw 设置接收的rgb图像话题

更多参数参考:http://wiki.ros.org/camera_calibration

  • calibration file应该类似如下
image_width: 640
image_height: 480
# The camera name is fixed. The color camera is rgb_camera, the depth/IR camera name is ir_camera
camera_name: rgb_camera
camera_matrix:
  rows: 3
  cols: 3
  data: [517.301, 0, 326.785, 0, 519.291, 244.563, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [0.999973, 0.00612598, -0.00406652, -0.00610201, 0.999964, 0.00588094, 0.0041024, -0.00585596, 0.999974 ]
projection_matrix:
  rows: 3
  cols: 4
  data: [517.301, 0, 326.785, -25.3167, 0, 519.291, 244.563, 0.282065, 0, 0, 1, 0.0777703]

1.4 标定结果

​ 生成压缩包/tmp/calibrationdata.tar.gz',其中的 ost.yaml就是标定结果。

[image]

width:800

height:600

[narrow_stereo]

camera matrix
375.192406 0.000000 400.541492
0.000000 376.253860 317.513124
0.000000 0.000000 1.000000

distortion
0.131676 -0.094047 0.004399 -0.004491 0.000000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
786.365845 0.000000 -8.585413 0.000000
0.000000 862.199036 -9.969647 0.000000
0.000000 0.000000 1.000000 0.000000

2 Kalibr相机标定

Kalibr安装参考官网,下载好依赖即可,安装过程可能会出现内存不足情况,且编译时间很久。

2.1 下载官方提供的标定板

标定板下载–Aprilgrid 6x6 0.8x0.8 m (A0 page)

标定前, 注意测量格子的尺寸信息填入yaml文件

在这里插入图片描述

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags---6列
tagRows: 6               #number of apriltags---6行
tagSize: 0.088           # size of apriltag, edge to edge [m]--a
tagSpacing: 0.3     #ratio of space between tags to tagSize--a/b
codeOffset: 0            #code offset for the first tag in the aprilboard

2.2 自定义标定板

可以使用下面命令自定义一个Aprilgrid标定板(前提安装好kalibr

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx [NUM_COLS] --ny [NUM_ROWS] --tsize [TAG_WIDTH_M] --tspace [TAG_SPACING_PERCENT]

报错:kalibr_create_target_pdf: command not found,因为执行ROS命令没有加rosrun kalibr

# 这样子实际大小在一张A4左右
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.025 --tspace 0.3

参考

2.3 cam数据录制

ros topic的频率降低到4hz左右进行采集

ROS 提供了改变 topic 发布频率的节点throttle, 指令如下

# 使用方法rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]

rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left

rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right

录制数据

rosbag record -O stereo_calibra.bag /left /right-

2.4 标定

官网给了这个示例,可以先跑下这个看看对不对

source ros_ws/kalibr/devel/setup.bash

# 径向和切向畸变
rosrun kalibr kalibr_calibrate_cameras --bag stereo_calibra.bag --topics /left /right --models pinhole-radtan pinhole-radtan --target april_6x6_80x80cm_A0.yaml

# 或者采用 pinhole-equi 模型,对畸变大的相机效果不错----全景畸变
rosrun kalibr kalibr_calibrate_cameras --bag stereo_calibra.bag --topics /left /right --models pinhole-equi pinhole-equi --target april_6x6_80x80cm_A0.yaml

该工具必须提供以下输入:

  • –bag filename.bag
    包含数据的 ROS 包
  • –topics TOPIC_0 … TOPIC_N
    包中所有相机主题的列表。匹配 --models 的顺序
  • –models MODEL_0 … MODEL_N
    要安装的相机/畸变模型列表。与 --topics 的顺序匹配(请参阅支持的型号)
  • –target target.yaml
    校准目标配置(请参阅校准目标)

关于支持的相机型号模型

Kalibr支持以下投影模型

  • pinhole camera model (pinhole)1-针孔相机模型
    (intrinsics vector: [fu fv pu pv])
  • omnidirectional camera model (omni)2-全向相机模型
    (intrinsics vector: [xi fu fv pu pv])
  • double sphere camera model (ds)3
    (intrinsics vector: [xi alpha fu fv pu pv])
  • extended unified camera model (eucm)4
    (intrinsics vector: [alpha beta fu fv pu pv])

The intrinsics vector contains all parameters for the model:

  • fu, fv: focal-length焦距
  • pu, pv: principal point主点
  • xi: mirror parameter (only omni)镜像参数
  • xi, alpha: double sphere model parameters (only ds)双球模型参数
  • alpha, beta: extended unified model parameters (only eucm)

Distortion models畸变模型

  • radial-tangential (radtan)*-径向切向畸变
    (distortion_coeffs: [k1 k2 r1 r2])
  • equidistant (equi)**
    (distortion_coeffs: [k1 k2 k3 k4])
  • fov (fov)5
    (distortion_coeffs: [w])
  • none (none)
    (distortion_coeffs: [])

请注意,主题 (–topics) 和相机/畸变模型 (–model) 的顺序必须匹配并确定输出中的内部相机编号。

可以使用以下方式运行校准:

kalibr_calibrate_cameras --bag [filename.bag] --topics [TOPIC_0 ... TOPIC_N] --models [MODEL_0 ... MODEL_N] --target [target.yaml]

由于对焦距的初始猜测错误,在处理前几张图像后,优化可能会出现偏差。在这种情况下,只需尝试重新启动校准,因为初始猜测是基于随机选择的图像。

使用 help 参数可以获得有关选项的更多信息:

kalibr_calibrate_cameras --h

示例包文件的示例命令(在此处下载):

# 就是要给出配置文件yaml和bag的路径!
rosrun kalibr kalibr_calibrate_cameras \
 	--target april_6x6.yaml \
 	--models pinhole-radtan pinhole-radtan \
 	--topics /cam0/image_raw /cam1/image_raw \
 	--bag cam_april.bag \
 	--bag-freq 10.0

2.5 输出结果

大车没电了,下次补下

3 MATLAB标定

参考

3.1 打开工具

  • 命令行窗口输入 cameraCalibrator

  • 或在APP中找到图像处理和计算机视觉,点击Camera Calibrator

在这里插入图片描述

3.2 添加标定板图片

若标定图为棋盘格:

在这里插入图片描述

更改参数,因为这里是20mm的标定板

在这里插入图片描述

3.3 设置标定参数

CAMERA MODEL 栏中

  • Camera Model:选择 Standard

  • Options

    • 选择 2 Coefficients3 Coefficients 一般用于鱼眼相机,工业相机一般不选择此项

    • 勾选 Tangential Distortion,用以计算切向畸变

    • 不勾选 Skew,若勾选,标定相机内参结果将出现参数 s ,即内参的第一行是 [fx, s, u0] ,这将会与我们使用的 OpenCV 进行测距的参数不同

然后点击校准

在这里插入图片描述

3.4 生成标定结果

拖拽红线,让误差尽可能小,抛弃哪些大于红线的图像

在这里插入图片描述

最后输出标定结果

在这里插入图片描述

3.5 标定结果

   Camera Intrinsics	# 相机内参
                    IntrinsicMatrix: [3×3 double]
                    焦距 FocalLength: [fx、fy]	
                     PrincipalPoint: [cx、cy]	
                               Skew: 0	# 倾斜系数,描述了图像的x轴和y轴之间的角度偏差,一般情况下为0
                   RadialDistortion: [k1、k2] #径向畸变参数
               TangentialDistortion: [p1、p2] # 切向畸变参数,
                          ImageSize: [600 800]
   Camera Extrinsics	# 相机外参
                   RotationMatrices: [3×3×52 double]
                 TranslationVectors: [52×3 double]
   Accuracy of Estimation
              MeanReprojectionError: xxx	# 平均重投影误差


最终校准结果

   Camera Intrinsics
                    IntrinsicMatrix: [3×3 double]
                        FocalLength: [371.4645 372.0877]
                     PrincipalPoint: [402.1875 313.9287]
                               Skew: 0
                   RadialDistortion: [0.1160 -0.0816]
               TangentialDistortion: [0.0026 -0.0053]
                          ImageSize: [600 800]
   Camera Extrinsics
                   RotationMatrices: [3×3×19 double]
                 TranslationVectors: [19×3 double]
   Accuracy of Estimation
              MeanReprojectionError: 0.1345
                 ReprojectionErrors: [54×2×19 double]
                  ReprojectedPoints: [54×2×19 double]
   Calibration Settings
                        NumPatterns: 19
                        WorldPoints: [54×2 double]
                         WorldUnits: 'millimeters'
                       EstimateSkew: 0
    NumRadialDistortionCoefficients: 2
       EstimateTangentialDistortion: 1
estimationErrors = 
  cameraCalibrationErrors - 属性:

    IntrinsicsErrors: [1×1 intrinsicsEstimationErrors]
    ExtrinsicsErrors: [1×1 extrinsicsEstimationErrors]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字政府建设中的锐捷力量:五维构建坚实的数字政务基础设施

3月1日,中国信息协会部分地方信息机构负责人会议暨信息服务业助力高质量发展研讨会在深圳成功召开。来自民政部、农业农村部、国家统计局、人民日报社等部委单位,全国省市信息协会、信息中心、大数据局负责人,信息化领域专家学者在内的230多名代表参加了会议。2024年是立足“二…

【网络原理】初识网络原理

目录 &#x1f384;网络发展史&#x1f338;独立模式&#x1f338;网络互连&#x1f33b;局域网LAN&#x1f33c;基于网线直连&#x1f33c;基于集线器组建&#x1f33c;基于交换机组建&#x1f33c;基于交换机和路由器组建 &#x1f33b;广域网WAN &#x1f333;网络通信基础&…

Java定时调度

在Java应用程序中&#xff0c;定时调度是一项重要的任务。它允许你安排代码执行的时间&#xff0c;以便在将来的某个时刻自动执行任务。Java提供了多种方式来实现定时调度&#xff0c;其中最常用的是Java的Timer和ScheduledExecutorService。 在本教程中&#xff0c;我们将学习…

【Java项目介绍和界面搭建】拼图小游戏——作弊码、查看完整图片

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

进程之舞:操作系统中的启动、状态转换与唤醒艺术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换 今天分享的内容是fasta文件与fastq文件的基本知识&#xff0c;以及通过Python实现两者互相转换的方法。 测序数据公司给的格式通常是fq.gz&#xff0c;也就是fastq文件&#xff0c;计算机的角度来说&#xff0c;生物的序列属于一种字符串&#xff0c;就…

嵌入式学习-FreeRTOS-Day2

嵌入式学习-FreeRTOS-Day2 一、思维导图 二、作业 1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码&#xff08;1&#xff09;保存&#xff08;2&#xff09;加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

小火星露谷管理器建议的模组安装文件结构

建议的模组安装文件结构 小火星露谷管理器希望用户将所有模组直接解压到Mods这一层目录&#xff0c;而不是嵌套存放。 比如你安装了两个模组&#xff0c;Content Patcher和Custom Companions&#xff0c;你应该直接解压到Mods文件夹中&#xff0c;并保证解压的内容全部在一个…

开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

前言 随着工业数字化进程加速与IT/OT深入融合&#xff0c;不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产&#xff0c;而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点&#xff0c;如何获取更加精准的OT数据对数字化进程起到至关重要的作用&#xff0c;…

Vue.js+SpringBoot开发天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

中华财险启动“3·15”金融消费者权益保护教育宣传活动!

2024年中国银行保险业“3•15”消费者权益保护教育宣传活动拉开帷幕。中华财险始终坚持“中华保险•服务中华”&#xff0c;切实履行险企责任&#xff0c;为主动保护金融消费者合法权益&#xff0c;在国家监督管理总局和中华保险集团的指导下&#xff0c;全面开展“3•15” 金融…

计算机网络面经-HTTPS加密过程

前言 在上篇文章HTTPS详解一中&#xff0c;我已经为大家介绍了 HTTPS 的详细原理和通信流程&#xff0c;但总感觉少了点什么&#xff0c;应该是少了对安全层的针对性介绍&#xff0c;那么这篇文章就算是对HTTPS 详解一的补充吧。还记得这张图吧。 HTTPS 和 HTTP的区别 显然&am…

什么?!你居然连个内存泄漏都排查不出来

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 在日常的业务开发中&#xff0c;偶尔会出现内存泄漏的情况&#xff0c;那么我们该怎么排查呢&#xff1f;现在跟着文章一起学习下吧~ 使用Chrome devTools查看内存情况 打开Chrome的无痕模式&#xff0c;以屏蔽Ch…

Java引用传递及基本应用

在 Java 中&#xff0c;传递参数的方式主要有两种&#xff1a;值传递&#xff08;传递的是对象的引用值&#xff09;和引用传递。本教程将重点介绍 Java 中的引用传递以及其基本应用。 1. 引用传递概念 在 Java 中&#xff0c;所有的方法参数都是通过值传递的。对于对象类型的…

市场低估了什么?

伍戈认为&#xff0c;市场低估了CPI和PPI的下行压力和政策的定力&#xff0c;一季度实际经济增速或与年度预期目标有些偏离&#xff0c;预计二季度开始逆周期政策逐步加力&#xff0c;从而引致名义GDP的阶段性趋稳过程。 核心观点&#xff1a; 1.时光若倒流&#xff0c;能否预见…

JS使用方式

JS是解释性语言&#xff0c;所以不需要搭建类似C#/Java之类的开发运行环境&#xff0c;因为他们是编译型语言。JS一般运行在浏览器中或者node环境中&#xff0c;这里都是JS引擎的功劳。 node环境使用 推荐使用nvm管理node版本&#xff0c;nrm管理代理地址。 安装node&#xf…

关于Vue3的一些操作

1. 设置浏览器自动打开 在package.json 中设置 dev: vite --open 2.给src文件夹配置别名 在vite.config.ts配置文件中添加以下内容 3. 如果2中有红色波浪线的问题 ***安装一个文件包***npm install types/node3. 在tsconfig.json配置文件中&#xff0c;找到配置项compi…

迷你内裤洗衣机排名前十名:推荐十款2024专业性高的内衣洗衣机

最近一段时间&#xff0c;关于内衣到底是机洗好&#xff0c;还是手洗好这个话题&#xff0c;有很多人都在讨论&#xff0c;坚决的手洗党觉得应该用手来清洗&#xff0c;机洗与其它衣物混合使用&#xff0c;会产生交叉感染&#xff0c;而且随着使用时间的推移&#xff0c;会变得…

【Maven】Maven 基础教程(五): jar 包冲突问题

《Maven 基础教程》系列&#xff0c;包含以下 5 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基础教程&#xff08;三&#xff09;&#xff1a;b…