Kalibr标定camera-IMU详细步骤

2023-05-16

Kalibr标定相机和IMU

——Camera-IMU Calibration

基本情况

目的

我们进行camera-IMU标定的目的是为了得到IMU和相机坐标系的相对位姿矩阵T和相对时间延时t_shift(t_imu=t_cam + t_shift)。

需要的文件

1、.bag:包含有图片信息和IMU数据的ROS包
2、camchain.yaml: 包含相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵;
3、IMU.yaml: 包含IMU的噪声密度、随机游走;

4、target.yaml:标定目标板的参数

所以在进行camera-IMU 标定前,我们分别要对camera内参和IMU进行标定得到相应的camchain.yaml和IMU.yaml文件

输出的结果

IMU和相机坐标系的相对位姿矩阵T和重投影误差(或者像素误差,Pixel Error(像素误差)指的是the standard deviation of the reprojection error (in Pixel) in both x and y directions respectivly(在x和y方向上以像素为单位的重投影误差的标准差。根据优化的准则我们知道重投影误差越小,就说相机标定的精度越高)。

  准备工作

提前准备好camchain.yaml(包含相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵)、IMU.yaml(包含IMU的噪声密度、随机游走)、target.yaml(标定目标板的参数),并制作.bag文件。

相机内参标定

可以直接使用matlab的视觉工具箱进行标定,输入文件为20张及以上对标定板在不同角度拍摄的照片和标定板尺寸,具体步骤可以参考:

https://www.cnblogs.com/li-yao7758258/p/5929145.html

    输出结果为相机内参、畸变系数、重投影误差等。

.bag文件

内容

这是在连续时间获得的拍摄标定版的图像和IMU数据包,需要自己采集后再利用kalibr提供的一个工具去转化成.bag包。.bag文件的具体内容是:标定需要的图像以及相对应的imu数据。

图片格式是:19位时间(精度为ns,精度不够可以补0).png。

IMU文件格式是:19位时间戳(精确到ns,精度不够可以补0),角速度,含重力的加速度

制作

输入命令kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag

dataset-dir是数据输入路径:

kalibr_bagcreater --folder kalibr_workspace/renamed/E_up/. --output-bag E_up.bag

注意要在dataset-dir后加上/.,在根目录运行这个命令即可(在文件目录下输出会生成一个很小的bag文件),输出的bag文件就在根目录下。E_up文件夹结构如下,cam0里面为图片:

其内文件结构应是这样:

/cam0/image_raw

/imu0

awsome.bag 是制作好的bag文件。输出默认在kalibr_bagcreater此时在的目录下。

参考

https://github.com/ethz-asl/Kalibr/wiki/bag-format

可以使用rosbag info XX.bag来查看生成的bag文件情况(包括图片、IMU、时间数据等)

yaml文件信息

camchain.yaml:

imu.yaml:

target.yaml:

tagCols 为标定格每行个数

tagRows 为标定格每列个数

tagSize 为标定格二维码边长,单位m

参考:https://github.com/ethz-asl/kalibr/wiki/calibration-targets

标定步骤

将标定板打印出来,置于平稳,光照充足的地方,注意要保持平整。使得相机与IMU位置相对固定,移动camera-IMU系统让IMU三个轴都被激活(不能只有转动,最好在转动的同时移动,确保加速度计也有输出)采集数据。参考:

https://github.com/ethz-asl/kalibr

当需要的四个文件都有时,使用命令: 

     kalibr_calibrate_imu_camera --target xx/target.yaml --cam xx/camchain.yaml --imu xx/imu.yaml --bag xx/xx.bag --bag-from-to 5 45

即可完成标定。(5-45表示取的标定数据长度,开始部分数据和结束部分可能会有晃动,把它去除)在背后加上--time—calibration可以标定IMU相对于camera的延时。

注意事项

1、要保证cam和imu的时戳有重合部分,不然可能报错传感器时间不同步。处理标定数据的时候最好让cam起始时间和imu起始时间对应上,不然也可能出现该问题。

2、如果标定结果中加速度和陀螺误差曲线(红色)没有包络住误差值(蓝色曲线)或相反的误差值显示得太小,则可以适当放大或缩小imu.yaml中imu的误差参数。

 

标定结果

Timeshift表示的就是IMU相对于camera的延时;

重投影误差,大部分在1说明很准确。一个数值代表差一个像素点。

参考文献

相机-IMU标定

https://blog.csdn.net/zhubaohua_bupt/article/details/80222321

matlab相机内参标定

https://www.cnblogs.com/li-yao7758258/p/5929145.html

yaml文件参数

https://blog.csdn.net/zhubaohua_bupt/article/details/80222321

.bag制作

https://blog.csdn.net/w492751512/article/details/81218618

https://blog.csdn.net/w492751512/article/details/81218618

 

 

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

Kalibr标定camera-IMU详细步骤 的相关文章

  • THREE.js 正交相机缩放到鼠标点

    我正在为我们的 THREE js 应用程序开发正交相机 本质上 该相机将以 2D 方式向用户呈现场景 用户可以选择在 2D 和 3D 相机之间切换 该相机将允许平移和缩放到鼠标点 我可以进行平移 也可以进行缩放 但不能缩放到鼠标点 这是我的
  • 如何使用flex4使用前置摄像头

    我使用 Flex 4 为 Android 移动设备开发了简单的相机应用程序 问题是 当我运行该应用程序时 它使用后置摄像头 它没有使用前置摄像头 怎么换相机啊 我需要使用前置摄像头来实现此应用程序 请帮助我 var camera Camer
  • 捕获 Camera2 预览帧返回空缓冲区

    我一直在开发一个简单的 Android 应用程序 旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法 我已经制作了几个应用程序 忠实地使用 Android Camera1 API 执行此操作 但即使在检查 Goo
  • 使用 Android 相机进行图像处理

    我想使用 onPreviewFrame 在将图像显示给用户之前对其进行后处理 即应用色调 棕褐色等 据我了解 返回给回调的 byte 数据以 YUV420sp 编码 人们是否已经在 J ava 中或使用 NDK 本机代码 将其解码为 RGB
  • Zxing扫描仪相机变焦

    我已经尝试解决这个问题3天了 但仍然没有找到答案 我想在通过 Zxing 扫描仪扫描二维码时向相机添加 ZOOM 构建 gradle implementation me dm7 barcodescanner zxing 1 9 8 Xml
  • Android 闪光灯在相机运行时使用按钮打开/关闭

    我看到有很多这样的问题 但我没有找到任何方法 在我的应用程序中 我有自己的相机和一些选项 并且还有名为的按钮btnFlash用于在相机运行时打开 关闭相机的闪光灯 我尝试了很多方法 但在 Samsung Tab 和 HTC 上都没有效果 这
  • android 11 上 imageCapture 用例的camerax“未绑定到有效相机”

    我一直收到错误 未绑定到有效相机 当尝试实现 imageCapture 用例时 我正在按照camerax教程在Java中实现该功能here https codelabs developers google com codelabs came
  • 有人知道 10 位原始 RGB 吗?关于全视

    我正在使用 Omnivision ov5620 http electronics123 net amazon datasheet OV5620 CLCC DS 20 1 3 pdf http electronics123 net amazo
  • Android:访问硬件相机预览帧数据而不绘制它们

    根据 Java SDK 端的 android 相机文档 必须为相机预览帧提供一个要绘制的 可见且活动的 表面 以便访问帧数据 我已经链接了我在这里遇到的一些内容 我是新人 所以最多有 2 个超链接 但是在最终在这里发布我自己的问题之前 我查
  • 还有其他访问相机的替代方法吗?

    除了使用 ActionScript 3 之外 还有其他方法来访问相机吗 import flash media Camera videoInstance attachCamera cameraInstance 或者我应该使用任何 API 吗
  • 上传前压缩相机图像

    我正在使用这段代码 来自www internetria com http www internetria com blog 2013 04 12 android enviar imagenes por webservice 拍照并上传到服务
  • AVLayerVideoGravityResize 在新设备、iOS 10 上不匹配?

    具有全屏实时预览功能的相机 previewLayer videoGravity AVLayerVideoGravityResize 制作图像 stillImageOutput captureStillImageAsynchronously
  • 相机 API:跨设备问题

    我正在开发一个相机应用程序 基本上作为消息传递应用程序的一部分来附加图像等 该应用程序需要适用于 gt SDK 2 2 并且 I can t尽可能多地使用默认的 Android 相机 因为 该应用程序的性质决定了图像不应保存到磁盘上 一些
  • 如何使用 UIImagePickerController CropRect

    我刚刚找到了一种方法来更改裁剪框的矩形 该裁剪框在捕获图像后出现UIImagePickerViewController 这可以在以下帮助下完成UIImagePickerControllerCropRect 但我不知道如何使用它 最初的裁剪框
  • 如何在 AVCaptureDevice 上准确设置快速快门速度(曝光时间)?

    我正在开发适用于 IOS 13 的相机应用程序 为此 我将 AVCaptureSession 与 AVCaptureVideoPreviewLayer 结合使用 到目前为止一切正常 现在我想让用户从给定的典型快门速度值数组 以 1 3 曝光
  • Actionscript 3主类是根,但不允许动画虚拟相机

    我最近开始使用 Actionscript 3 学习 Animate CC 我正在尝试使用 Animate 的 虚拟相机 功能 为我提供一个可以平移 旋转和缩放游戏的相机 当根没有子类时 很容易实现 Camera 例如 您可以在屏幕上放置一个
  • 如何打开相机然后切换到图像模式(反之亦然)

    就我而言 我想拍照或捕捉视频 实际上 如果我创建单独的意图 我可以做到这些 我的意思是我可以将相机打开为图像模式或视频模式 但无法在它们之间切换 这与我使用的意图过滤器有关吗 我应该怎么办 我如何在它们之间切换 我有同样的问题 在我想放置一
  • Marshmallow 中的手电筒控制

    我对最新 Marshmallow 版本中的相机 更具体地说是手电筒 有疑问 在任何棉花糖之前的版本上 我需要执行以下操作来打开 关闭闪光灯 private void turnFlashOn final Camera camera int f
  • 如何在 Ionic 3 中调整图像大小而不降低质量和目标宽度和高度?

    我想减小相机 API 拍摄的图像的大小 但质量降低不好 最好的办法是降低分辨率 但我不想对所有图像使用目标宽度和高度 例如 我希望图像宽度为 1280 图像高度按其比例自动变化 但在 API 中我应该使用精确的宽度和高度 如何通过图像比例更
  • 您如何在 Android 上处理超高 MP 相机(和图像)? - “画布:尝试绘制太大的位图”

    我有一个活动 用户可以像这样打开相机 getPictureUri createImageFromFile true let photoUri it openCameraActivity REQUEST IMAGE CAPTURE it ph

随机推荐

  • 通过 docker 镜像 vcs 进行仿真

    学习空白的贝塔 摸鱼范式公众号 安装docker 并拉取镜像 远程 进行 vcs 与 verdi 的联合仿真 我踩得的坑一一列举 1 直接按照教程安装docker wsl 但是出现问题 安装失败 首先我的账户是中文名字 可能直接导致我安装失
  • FreeRTOS卡在SVC_Handler

    FreeRTOS已经实现了SVC Handler 和PendSV Handler 两个函数的功能 xff0c 对应port c中的vPortSVCHandler 和xPortPendSVHandler 为了使用FreeRTOS的这两个函数
  • 【Git】实现Gitee和Github仓库的同步操作

    本篇博客的设置方法同样可以适用于gitlab等其他平台 不多bb xff0c 直入主题 实现两个仓库的同步 1 准备两个仓库 分别在两个平台创建一个相同名字的仓库 xff0c 当然 xff0c 你也可以在a平台上导入b平台已有的仓库 xff
  • [ROS官方教程] catkin/CMakeLists.txt的使用

    目录 1 概述2 整体结构和顺序3 CMake版本4 功能包名称 package name 5 发现CMake Packages5 1 find package 做了什么5 2 为何将catkin packages指定为Components
  • C++工程:总结 CMake 添加第三方库依赖方式

    代码依赖 这种方式是把第三方库的完整代码直接添加到我们的项目中 xff0c 当做项目代码的一部分进行编译 xff0c 这种方式会把第三方代码和我们的代码混在一起 xff0c 并不推荐使用 首先我们需要到 jsoncpp 下载需要的头文件和实
  • 四款好看实用的CSS表格样式分享

    文章参考 xff1a https www w3cschool cn css css sfrk2opy html https www php cn css tutorial 375461 html https www laozuo org 2
  • 线程与进程,你真得理解了吗

    线程与进程 xff0c 你真得理解了吗 1 进程与线程的关系和区别2 并行与并发3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难 xff0c 那就是进程和线程的区别是什么 xff1f 这个问题延申开来并不像表面那么简单 xf
  • Ubuntu18.04安装librealsense和realsense-ros

    目录 一 librealsense 1 二进制安装 2 源码安装 xff08 个人推荐 xff09 3 测试运行 4 报错 二 realsense ros xff08 2 3 0 xff09 一 librealsense intel rea
  • KaLibr校准 双目相机和IMU realsense D455

    kalibr安装参考我的另一篇博客https mp csdn net mp blog creation editor 117604718 除此之外 xff0c 需要自己准备棋盘 xff0c 以及棋盘的配置文件april 6x6 50x50c
  • ubuntu系统屏幕分辨率只有一个无法修改

    新装好的ubuntu系统 xff0c 如果没有办法调节适当的分辨率和刷新率 xff0c 多半是没有装显卡驱动 安装方法也很简单 xff0c 在software amp Update里面选择Additional Drivers 选择自己显卡的
  • mavros安装

    官方地址 xff1a https github com mavlink mavros 因为github有时侯不好上 xff0c 所以我自己弄了个gitee https gitee com qq408007026 mavros tree ma
  • ubuntu docker ROS主从机配置 screen ssh基本使用方法

    目录 1 docker安装 2 docker简单命令 3 镜像的使用 4 主从机配置 5 screen简单使用 6 SSH远程登录 7 docker进阶使用 部分参考https blog csdn net qq 42800654 artic
  • Ubuntu下VSCode配置Clang-format,并在保存时自动格式化代码的方法(带配置文件)

    花了一上午解决 xff0c google和百度查的还都有点奇怪 不能解决问题 xff0c 故Mark一下 Ubuntu环境中 xff0c 使用VSCode编译器 xff0c 在保存时自动格式代码还是很方便的 xff0c 有助于养成良好的编程
  • docker容器学习

    容器是什么 xff1f 容器是轻量级应用代码包 xff0c 它还包含依赖项 xff0c 例如编程语言运行时的特定版本和运行软件服务所需的库 镜像是什么 我们都知道 xff0c 操作系统分为 内核 和 用户空间 对于 Linux 而言 xff
  • 卷帘相机原理和卷帘门补偿(其中循环的理解)

    具体的这个文章讲的很清楚了 详细图解 xff0c 一眼就能看懂 xff01 卷帘快门 xff08 详细图解 xff0c 一眼就能看懂 xff01 卷帘快门 xff08 Rolling Shutter xff09 与全局快门 xff08 Gl
  • cartographer中分支定界法理解——为什么能保证上界

    定界原理 储存的不同分辨率栅格图 xff0c 为保证上边界正确性 xff0c 即高层中的评分一定高于其底层节点的评分 xff0c 压缩的地图并非直接从原图固定间隔采样 xff0c 而是将固定间隔中所有坐标概率值最大值作为低分辨率地图 理解
  • Matlab中Filter Builder的使用(以滤除音乐中的人声为例)

    Matlab中Filter Builder的使用 xff08 以滤除音乐中的人声为例 xff09 以matlab2017a为例 先设计一个带通滤波器 xff0c 修改如下参数为 Input sample rate 为信号采样率 xff0c
  • 批量解决word中行距设置为固定值图片显示不全的问题

    在写论文的时候 xff0c 很多学校要求正文行距为固定值 xff08 比如说23磅 xff09 xff0c 这时候在正文中的图片格式往往是嵌入式的 xff0c 也就被当做文本的一部分 xff0c 故其只能在word文档中显示出一小部分 解决
  • HoloLens原理分析和硬件拆解

    不同于Google Glass 等AR 产品只能在固定位置显示一个虚拟屏幕 xff0c HoloLens 能把全息影像和真实环境杂糅在一起 xff0c 使全息影像像真实物体一样摆放在一个固定位置 xff0c 并且能像真实物体在视觉上一样近大
  • Kalibr标定camera-IMU详细步骤

    Kalibr标定相机和IMU Camera IMU Calibration 基本情况 目的 我们进行camera IMU标定的目的是为了得到IMU和相机坐标系的相对位姿矩阵T和相对时间延时t shift t imu 61 t cam 43