相机标定之使用Kalibr工具箱

2023-05-16

相机标定之使用Kalibr工具箱

  • 1. 概述
  • 2. 准备
  • 3. 步骤
  • 4. 参考链接
  • 5. 相关链接

1. 概述

简单介绍如何使用Kalibr工具箱进行针孔模型相机标定的步骤,供自己以后参考,同时希望给大家带来帮助。

2. 准备

  1. 提前准备好标签并打印出来,可以使用A4纸打印,然后粘贴在纸板上,注意粘贴时贴紧纸板,确保位于纸张上的点位于同一平面。官方提供了Aprilgrid棋盘格圆形板三种格式。本次标定使用April tag,它是一种AR tag,属于编码信息的棋盘格,详细的介绍见文末参考链接。
    在这里插入图片描述
  2. 保证包含相机图像的topic能够正常发布信息,使用rosbag命令提前录制好bag包,实际使用时需要设置bag包的路径,确保每张图片包含标签信息,并不断旋转移动标定板,保证采取到不同位置下的标定板信息。
  3. 确保已经配置好Kalibr工具箱。如果报错,可以参考
    在文件src/Kalibr/Schweizer-Messer/sm_python/python/sm/PlotCollection.py中第8行
from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar

改为

from matplotlib.backends.backend_wx import NavigationToolbar2Wx as Toolbar

这样更改之后需要安装igraph

sudo add-apt-repository ppa:igraph/ppa
sudo apt-get update
sudo apt-get install python-igraph
  1. 运行Kalibr标定工具,他内部提供了多IMU标定相机IMU标定多相机标定的功能,这里使用多个相机标定命令实现对单个相机的标定。命令格式
kalibr_calibrate_cameras --bag [filename.bag] --topics [TOPIC_0 ... TOPIC_N] --models [MODEL_0 ... MODEL_N] --target [target.yaml]

3. 步骤

  1. 录制含有标定板图像的bag包,注意需要不断移动标定板。
  2. 运行Kalibr工具箱中多相机标定节点程序。仿照之前提到的命令格式
kalibr_calibrate_cameras --bag [filename.bag] --topics [TOPIC_0 ... TOPIC_N] --models [MODEL_0 ... MODEL_N] --target [target.yaml]

我们使用的最终命令

  • 使用的bag文件mdvncalib.bag,里面存储了含有标定板的图像
  • 使用标定板规格apriltag_6_6.yaml,可多种选择
  • 相机的畸变模型pinhole-radtan,其他模型还有omni-radtan
  • bag文件中相机发布图像的topic话题/mindvision_image/image_raw
kalibr_calibrate_cameras --target apriltag_6_6.yaml --bag mdvncalib.bag --models pinhole-radtan --topics /mindvision_image/image_raw
  • 对于标定板规格yaml文件,有下面
    在这里插入图片描述
  • 对于相机模型,有下面的可选参数
Camera models
Kalibr supports the following projection models:

pinhole camera model (pinhole)
(intrinsics vector: [fu fv pu pv])
omnidirectional camera model (omni)
(intrinsics vector: [xi fu fv pu pv])
double sphere camera model (ds)
(intrinsics vector: [xi alpha fu fv pu pv])
extended unified camera model (eucm)
(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
Kalibr supports the following distortion models:

radial-tangential (radtan)
(distortion_coeffs: [k1 k2 r1 r2])
equidistant (equi)
(distortion_coeffs: [k1 k2 k3 k4])
fov (fov)
(distortion_coeffs: [w])
none (none)
(distortion_coeffs: [])
  • 特别注意tagpacing参数的设置,具体值为spacing/tagSize,如果参数设置错误,程序会不能收敛。出现下面的状况
------------------------------------------------------------------
  Progress 99 / 281 	 Time remaining: 8m 26s                 [ERROR] [1615619159.104217]: Did not converge in maxIterations... restarting...
[ WARN] [1615619159.108985]: Optimization diverged possibly due to a bad initialization. (Do the models fit the lenses well?)
[ERROR] [1615619159.113029]: Max. attemps reached... Giving up...
  • bag文件中包含的图像,含有完整的标定板信息。
    在这里插入图片描述
  1. 成功解算后,程序会收敛,输出下面的内容
importing libraries
Initializing cam0:
	Camera model:	  pinhole-equi
	Dataset:          mdvncalib.bag
	Topic:            /mindvision_image/image_raw
	Number of images: 345
Extracting calibration target corners
  Extracted corners for 281 images (of 345 images)                              
	Projection initialized to: [438.6721643  438.66383647 372.48037062 236.70589066]
	Distortion initialized to: [ 0.32703815  0.14118879 -0.00890147  0.01792949]
initializing initial guesses
initialized cam0 to:
	 projection cam0: [438.6721643  438.66383647 372.48037062 236.70589066]
	 distortion cam0: [ 0.32703815  0.14118879 -0.00890147  0.01792949]
initializing calibrator
starting calibration...
  Progress 24 / 281 	 Time remaining: 1m 34s                  

Filtering outliers in all batches...
  Progress 25 / 281 	 Time remaining: 3m 10s                 
------------------------------------------------------------------

Processed 26 of 281 views with 22 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32710466  0.14202389 -0.02049318  0.04095833] +- [0.02432163 0.2025968  0.65607631 0.7078789 ]
	 projection: [439.20665943 439.10791457 372.88902916 236.72670244] +- [13.76841787 14.13206358  4.94726545  1.02564782]
	 reprojection error: [0.000000, 0.000000] +- [0.086313, 0.078595]


------------------------------------------------------------------
  Progress 50 / 281 	 Time remaining: 3m 37s                  
------------------------------------------------------------------

Processed 51 of 281 views with 32 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32728665  0.13403398  0.01639567 -0.00727319] +- [0.01774083 0.13251309 0.38793167 0.37707258]
	 projection: [438.26508681 438.20911525 372.70193784 236.68664074] +- [3.27726915 3.2902056  1.35965128 0.66717352]
	 reprojection error: [0.000000, 0.000001] +- [0.089265, 0.079946]


------------------------------------------------------------------
  Progress 75 / 281 	 Time remaining: 3m 37s                  
------------------------------------------------------------------

Processed 76 of 281 views with 34 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32775491  0.13017415  0.02602528 -0.01492172] +- [0.01720159 0.12850844 0.37604398 0.36604881]
	 projection: [438.37321649 438.33436377 372.56378249 236.69749113] +- [2.81898454 2.76730741 0.96622194 0.63440076]
	 reprojection error: [-0.000000, -0.000001] +- [0.089264, 0.080443]


------------------------------------------------------------------
  Progress 100 / 281 	 Time remaining: 3m 16s                  
------------------------------------------------------------------

Processed 101 of 281 views with 34 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32775491  0.13017415  0.02602528 -0.01492172] +- [0.01720159 0.12850844 0.37604398 0.36604881]
	 projection: [438.37321649 438.33436377 372.56378249 236.69749113] +- [2.81898454 2.76730741 0.96622194 0.63440076]
	 reprojection error: [-0.000000, -0.000001] +- [0.089264, 0.080443]


------------------------------------------------------------------
  Progress 125 / 281 	 Time remaining: 2m 55s                  
------------------------------------------------------------------

Processed 126 of 281 views with 38 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32829332  0.12388074  0.05002678 -0.0433495 ] +- [0.01620897 0.12001424 0.34887475 0.33895895]
	 projection: [438.74401121 438.70356246 372.50240468 236.72751328] +- [2.22118088 2.153459   0.84273684 0.60170743]
	 reprojection error: [0.000000, 0.000001] +- [0.090030, 0.080678]


------------------------------------------------------------------
  Progress 150 / 281 	 Time remaining: 2m 35s                  
------------------------------------------------------------------

Processed 151 of 281 views with 40 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32832952  0.12354684  0.05046028 -0.04345913] +- [0.01582768 0.11683892 0.3390672  0.32933824]
	 projection: [438.78012952 438.74173992 372.47651789 236.7721033 ] +- [2.17263531 2.09377601 0.76247689 0.58058732]
	 reprojection error: [-0.000000, 0.000000] +- [0.090100, 0.080282]


------------------------------------------------------------------
  Progress 175 / 281 	 Time remaining: 2m 9s                   
------------------------------------------------------------------

Processed 176 of 281 views with 41 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32776265  0.12851606  0.03357976 -0.0240838 ] +- [0.01549595 0.11299861 0.32434821 0.31169184]
	 projection: [438.60870212 438.57624432 372.48892675 236.74587901] +- [1.95983746 1.88260041 0.75585735 0.56960847]
	 reprojection error: [-0.000000, 0.000000] +- [0.090819, 0.080529]


------------------------------------------------------------------
  Progress 200 / 281 	 Time remaining: 1m 39s                  
------------------------------------------------------------------

Processed 201 of 281 views with 42 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32750805  0.13048132  0.02782932 -0.01846147] +- [0.01518672 0.10944173 0.31093888 0.29595248]
	 projection: [438.60719688 438.57616461 372.48782507 236.74246186] +- [1.954112   1.87760844 0.7550914  0.56851862]
	 reprojection error: [0.000000, 0.000000] +- [0.091623, 0.080121]


------------------------------------------------------------------
  Progress 225 / 281 	 Time remaining: 1m 10s                  
------------------------------------------------------------------

Processed 226 of 281 views with 45 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32709825  0.13357998  0.0188562  -0.01022901] +- [0.01442735 0.10229035 0.28661738 0.26949111]
	 projection: [438.71025296 438.67587013 372.47015576 236.78964676] +- [1.85865775 1.77255795 0.68877392 0.53897615]
	 reprojection error: [-0.000000, -0.000000] +- [0.092180, 0.080401]


------------------------------------------------------------------
  Progress 246 / 281 	 Time remaining: 45s                    
  Progress 250 / 281 	 Time remaining: 40s                  
------------------------------------------------------------------

Processed 251 of 281 views with 45 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32709825  0.13357998  0.0188562  -0.01022901] +- [0.01442735 0.10229035 0.28661738 0.26949111]
	 projection: [438.71025296 438.67587013 372.47015576 236.78964676] +- [1.85865775 1.77255795 0.68877392 0.53897615]
	 reprojection error: [-0.000000, -0.000000] +- [0.092180, 0.080401]


------------------------------------------------------------------
  Progress 275 / 281 	 Time remaining: 7s                   
------------------------------------------------------------------

Processed 276 of 281 views with 46 views used

Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32686643  0.13551974  0.01176498 -0.00221591] +- [0.01410261 0.09889869 0.27452127 0.2560078 ]
	 projection: [438.70302025 438.66842238 372.47288635 236.78685704] +- [1.85219048 1.76679621 0.68652563 0.53835071]
	 reprojection error: [0.000000, 0.000000] +- [0.092647, 0.080445]


------------------------------------------------------------------
  Progress 281 / 281 	 Time remaining:                     

All views have been processed.

Starting final outlier filtering...
  Progress 46 / 46 	 Time remaining:                     

..................................................................

Calibration complete.

[ WARN] [1615621286.631595]: Removed 29 outlier corners.

Processed 281 images with 46 images used
Camera-system parameters:
	cam0 (/mindvision_image/image_raw):
	 type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>
	 distortion: [ 0.32686643  0.13551974  0.01176498 -0.00221591] +- [0.01410261 0.09889869 0.27452127 0.2560078 ]
	 projection: [438.70302025 438.66842238 372.47288635 236.78685704] +- [1.85219048 1.76679621 0.68652563 0.53835071]
	 reprojection error: [0.000000, 0.000000] +- [0.092647, 0.080445]

Results written to file: camchain-mdvncalib.yaml
  Detailed results written to file: results-cam-mdvncalib.txt
/home/gy/.local/lib/python2.7/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
  warnings.warn(message, mplDeprecation, stacklevel=1)
Report written to: report-cam-mdvncalib.pdf
/home/gy/catkin_slam/src/kalibr/Schweizer-Messer/sm_python/python/sm/PlotCollection.py:58: wxPyDeprecationWarning: Using deprecated class PySimpleApp. 
  app = wx.PySimpleApp()

具体的标定信息会存放到yaml文件中

Results written to file: camchain-mdvncalib.yaml
  Detailed results written to file: results-cam-mdvncalib.txt

并且展示具体的误差报告
在这里插入图片描述在这里插入图片描述

4. 参考链接

Kalibr工具箱官方github地址
igraph问题解决
April tag
学习Kalibr工具–Camera标定过程

5. 相关链接

相机标定之使用ROS节点程序
相机标定之使用Matlab工具箱
相机标定之使用Kalibr工具箱

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相机标定之使用Kalibr工具箱 的相关文章

随机推荐

  • Flink 核心编程(二) Source

    Flink框架可以从不同的来源获取数据 xff0c 将数据提交给框架进行处理 我们将获取数据的来源称之为数据源 Source 从java的集合中读取数据 一般情况下 xff0c 可以将数据临时存储到内存中 xff0c 形成特殊的数据结构后
  • 51单片机通过两个按键控制流水灯方向(中途也能改变方向)

    另一篇文章的进阶版本51单片机通过两个按键控制流水灯方向 wjdsg的博客 CSDN博客 include lt regx52 H gt include lt INTRINS H gt 延时函数 xff0c xms等于1 xff0c 此函数延
  • EZDML 使用教程

    概述 我们可借助EZDML这款数据库设计工具 xff0c 来辅助我们梳理复杂的业务表关系 1 xff09 下载地址 http www ezdml com download cn html 2 xff09 使用说明 xff08 1 xff09
  • Hue学习笔记

    第1章 HUE概述 1 1 来源 HUE 61 Hadoop User Experience Hadoop用户体验 xff0c 直白来说就一个开源的Apache Hadoop UI系统 xff0c 由Cloudera Desktop演化而来
  • Dolphinscheduler 学习笔记

    Dolphinscheduler官网 https dolphinscheduler apache org Dolphinscheduler下载地址 https www apache org dyn closer lua dolphinsch
  • DataX 学习笔记

    一 DataX简介 1 1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具 xff0c 致力于实现包括关系型数据库 MySQL Oracle等 HDFS Hive ODPS HBase FTP等各种异构数据源之间稳定
  • linux查看整个机器内存使用情况

    1 free命令 参数介绍 xff1a total 内存总数 used 已经使用内存数 free 完全空闲内存 shared 多个进程共享的内存 buffers 用于块设备数据缓冲 xff0c 记录文件系统metadata xff08 目录
  • Docker 学习笔记

    第1章 docker简介 1 1 什么是docker 1 Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目 xff0c 它是基于 dotCloud 公司多年云服务技术的一次革新
  • TiDB 学习笔记

    第一章 TiDB概述 TiDB官网 https pingcap com index html TiDB可以理解为是MySQL的加强版 分布式MySQL MySQLPlus TiDB 简介 TiDB 是 PingCAP 公司设计的开源分布式
  • SeaTunnel 学习笔记

    第1章 Seatunnel概述 官网地址 xff1a https seatunnel apache org 文档地址 xff1a https interestinglab github io seatunnel docs 1 1 SeaTu
  • Snake-SLAM:VIO、解耦化优化、延迟建图、图优化、鲁棒性初始化

    本来想写一篇文章 xff0c 但是这篇已经写的很好了 xff0c 不再赘述 xff1a 一种解耦非线性优化的高效VI SLAM系统 Snake SLAM
  • PooledByteBuf分配及回收之六PooledUnsafeDirectByteBuf初始化

    PooledByteBufAllocator初始化 PoolThreadCache初始化 PoolAerna初始化 PoolChunk初始化 PoolSubpage初始化 PooledUnsafeDirectByteBuf初始化 分配微小型
  • CubeMx工程增加FreeRtos支持

    对于stm32一些ram和flash相对大一些的mcu xff0c 增加一个实时操作系统 xff0c 会使程序控制更加灵活 本文阐述一下通过CubeMx自动添加FreeRtos的方法 xff0c 和使用visualgdb加载CubeMx生成
  • 整理leetcode刷题过程中遇到的常用库函数(c++)

    整理leetcode刷题过程中遇到的常用库函数 xff08 c 43 43 xff09 如果有额外的了解需求 xff0c 可以在微软c 43 43 库函数进行了解 以下按照我理解的刷题顺序整理 xff1a 数组 数组是刷题的开始 xff0c
  • s5pv210开发与学习:1.3之SD卡学习

    目录 拓展阅读 SD卡 内存 RAM 与外存 ROM 的区别 RAM random access memory 随机访问存储器 特点是任意字节读写 随机访问 xff0c 掉电丢失 ROM read only memory 只读存储器 用于存
  • RT-Thread 开发者能力认证考试样题(RCEA)

    V1 0 RT Thread 开发者能力认证考试样题 RCEA xff09 注 xff1a 样题仅为部分题目 第一小卷 单选题 40 题 40 分钟 40 0 分 1 对两个字符 a 和 b 进行初始化 xff1a char a 61 34
  • Android开发中为什么有些变量会以m开头

    平常在看Android代码和看别人敲代码的时候经常看到有些变量会以m开头 xff0c 这到底是什么样的命名规则呢 xff1f 首先看官网的答案 xff1a Follow Field Naming Conventions Non public
  • Ubuntu 串口设备 USB tty

    Ubuntu 串口设备 USB tty 概述USB查看详细信息 概述 研究Ubuntu下串口设备的连接 xff0c 简单的讲就是看有没有连接上 xff0c 至于使用后面再说 USB 使用命令如下可以查看USB接口的信息 xff0c dmes
  • Nooploop UWB LinkTrack ROS下配置

    Nooploop LinkTrack ROS 1 概述2 ROS下配置3 ROS系统安装4 串行库安装 5 ROS包的配置5 1 找不到libserial so文件5 2 解决办法 6 消息格式7 参考8 延伸阅读传感器配置节点程序分析经典
  • 相机标定之使用Kalibr工具箱

    相机标定之使用Kalibr工具箱 1 概述2 准备3 步骤4 参考链接5 相关链接 1 概述 简单介绍如何使用Kalibr工具箱进行针孔模型相机标定的步骤 xff0c 供自己以后参考 xff0c 同时希望给大家带来帮助 2 准备 提前准备好