Kalibr标定单个相机全流程(超超超级详细)

2024-03-16 23:59

本文主要是介绍Kalibr标定单个相机全流程(超超超级详细),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:一些闲话


笔者写下这篇面向纯小白的文章的原因是因为笔者也是一个纯小白,想要记录一下自己接下来这段时间的点点滴滴,当作记录一下自己的成长。回顾我的大学两年,大部分时间都在彷徨犹豫选择中度过,没有真正沉下心去学习或者做些项目,借这个机会,我就以开始写博文的方式倒逼自己做些记录和坚持下去,也希望大家能坚持做困难但是有意义的事情。

一.下载VMware并且安装虚拟机

这个网上教程比较多,需要注意的是如果要运行Kalibr,内存得选择8G以上,因为后面如果要下载和配置Kalibr,内存过小会出现一些莫名其妙的错误。我下载的是20.04版本的ubuntu,所以后面的方式都基于这个版本,但是我看着好像是18.04安装和配置Kalibr的博文比较多,如果你也像我一样一开始就选择了20.04,那本篇大概会具有更多的参考价值。还有值得注意的是需要了解一些ubuntu的基本概念,有利于后续工作展开

安装Ubuntu推荐博文:安装Ubuntu

Ubuntu基本概念:Ubuntu入门

二.下载ros

值得注意的是,rosd版本和ubuntu是适配的,所以要选择相对应的版本。可以预先了解一下ros的基本概念和基本工作模式,但基本不了解也可以。推荐古月居的b站教程,或者随便找个ros的基本介绍博文看也可以。

下载ros推荐博文:ROS安装

(博主很早安了ros,当时什么都不知道,还是找淘宝安的,实在不行找淘宝,不丢人)

三.安装并且配置Kalibr

最最最关键的是要先看原文,原文讲述了所有你需要知道的东西,虽然仍然存在一些踩坑以及最大的问题-看不懂英文等,但是还是推荐先阅读原文,原文中看不懂的部分再结合博主的博文对他翻译,这是最优解。

看完原文就可以开始找下载的博文进行阅读了,在阅读完之后,还要下载python3等,这些都是我们安装的基础,这些csdn的文章也很多,笔者不再赘述。遇到命令错误的时候下载对应的东西就可以

下载Kalibr并且成功安装和配置困难就成功了一大步,笔者是根据两篇博文来回换着敲命令(任何一篇在我这里都没有单独成功),最后才成功把所有包都安装上。Kalibr下载博文1,Kalibr下载博文2(命令都要敲在终端)

这里有个比较抽象的问题,一是可能之前设置的内存配置不够大,或者是网速等等问题,导致包一下子没有办法全部安装,然后就得重复地运行编译指令,他会慢慢地陆续成功;二是可能是有其他问题(笔者没有遇到),可以参考以下这个博文编译错误

四.收集数据

首先需要获取标定板,参考相对应的博文这篇文章中的准备部分。标定板的意思就是一块固定参数的板子,电脑通过传输给他的标准标定板参数和图像中标定板中的参数得到相机的内参等。最保险的肯定是去官网下载示例中的标定板,下载第一块April 6x6的pdf就可以(可能需要翻一下才能下载),然后按照原尺寸打出来贴在硬板子上。再用相机从各个角度拍照(需要30-50张不嫌多)注意要拍全

接下来到刚刚下载标定板的网站将对应April 6x6的yawl文件也下载一下。

五.建立共享文件夹

刚刚拍的照片和yawl文件还都在主机上,怎么把他转移到虚拟机,对笔者而言最简单的方法就是建立共享文件夹,可以参考以下博文共享文件夹的创建。

建立后,将照片和yawl文件放入,就可以将主机文件传入虚拟机,这些文件在Other Location的Computer的mnt的hgfs里可以找到。

六.打包成bag

在找到共享文件夹后,就可以复制出其中的图像文件到指定的工作文件夹。笔者是复制到了Downloads下面新建的dataset-dir文件夹中新建的cam0文件夹中,然后再downloads文件夹中打开终端,输入指令:

source ~/kalibr_ws/devel/setup.bash //kalibr_ws就是前面教程让你创建的kalibr工作文件夹,有的博主是kalibr_workspace,我这里是kalibr_ws
rosrun kalibr kalibr_bagcreater --folder dataset-dir/. --output-bag awsome.bag

可以用以下指令看一下生成的awsome.bag里面有些什么

rosbag info awsome.bag

注意图片的命名需要按照指定的格式要有19位,可以尝试用以下博文的办法。不用管imu

改变图片名称

打包bag推荐博文:要钱的详细文章

简单文章

七.运行标定程序

运行标定程序还是先需要知道需要输入什么量,依旧是推荐先看原文,以下文章有详解四个输入量

1.bag文件

2.yawl文件(之前下载的,要复制到与bag一个文件夹)

3.相机模型文件,就是你所需要的内参的模板,针孔相机(手机)就选pinhole-radtan

4.topic,就是bag文件中相机发布图像的topic话题

八,得到结果

原文有对输出文件的详解

这篇关于Kalibr标定单个相机全流程(超超超级详细)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817171

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步