利用kalibr工具进行camera-IMU标定

2023-05-16

camera-IMU标定

camera-IMU标定简述

1标定目的

我们进行camera-IMU的目的是为了得到IMU和相机坐标系的相对位姿矩阵T。

2标定工具

我们利用Kalibr标定工程对camera-IMU进行标定,链接https://github.com/ethz-asl/kalibr/wiki/calibrating-the-vi-sensor.以下内容是在对在camera-IMU成功标定后的总结。

3输入文件:

以下内容默认为标定双目相机。和静态标定不同,本标定的输入文件包括

1 用带imu的相机拍摄的视频

2 视频中imu实时数据

3 imu参数和cam的内外参

4标定板信息

后面会详细的介绍一下输入文件以及制作方法。

Kalibr安装

           Kalibr工程有两种,一种是已经编译好的包,叫CDE package,另一种是未经编译的源文件。

           前者:安装简单,不需要依赖ROS,但是功能不全。

           后者:安装稍麻烦,但功能全,建议安装这种。

后者安装方法:

1安装 ROS

2安装依赖项

sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-devlibboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencvros-indigo-image-transport-plugins ros-indigo-cmake-modulespython-software-properties software-properties-common libpoco-devpython-matplotlib python-scipy python-git python-pip ipython libtbb-devlibblas-dev liblapack-dev python-catkin-tools libv4l-dev

 

sudo pip installpython-igraph --upgrade

注意:pip未安装会报错

3创建一个工作空间,这就是以后的工程根路径

mkdir -p~/kalibr_workspace/src
cd ~/kalibr_workspace
source/opt/ros/indigo/setup.bash
catkin init
catkin config --extend /opt/ros/indigo
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release

4下载工程代码并编译

cd~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git

cd~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4

注意:如果你电脑内存不太够用,试着减少编译时开的线程数,把参数 –j4换成-j2或直接省略。

5设置一下你刚才编译工程的环境变量

source~/kalibr_workspace/devel/setup.bash

至此,安装部分结束,标定需要的所有工具都在本工程的devel/bin/目录下。

camera-IMU标定需要输入的四个文件

一个标定的例子:

它们分别是:包含图形和imu数据的bag文件、相机参数文件、IMU参数文件和标定板参数文件

1 bag 文件

<1>. bag 文件内容:

这是在连续时间获得的拍摄标定版的图像和IMU数据包,需要自己采集后再利用kalibr提供的一个工具去转化成.bag包。

.bag文件的具体内容是:标定需要的图像以及相对应的imu数据。格式是:


+-- dataset-dir  

    +--cam0

   │   +-- 1385030208726607500.png

   │   +--      ...

   │   \-- 1385030212176607500.png

    +--cam1

   │   +-- 1385030208726607500.png

   │   +--      ...

   │   \-- 1385030212176607500.png

    \--imu0.csv

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

timestamp,omega_x,omega_y,omega_z,alpha_x,alpha_y,alpha_z

1385030208736607488,0.5,-0.2,-0.1,8.1,-1.9,-3.3

 ...

1386030208736607488,0.5,-0.1,-0.1,8.1,-1.9,-3.3

<2>bag的制作工具:

kalibr_bagcreater--folder dataset-dir --output-bag awsome.bag

dataset-dir是数据输入路径:

其内文件结构应是这样:

/cam0/image_raw

/cam1/image_raw

/imu0

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

2相机参数文件:camchain.yaml:

cam0:

  camera_model:pinhole

  intrinsics:[461.629, 460.152, 362.680, 246.049]

  distortion_model:radtan

 distortion_coeffs: [-0.27695497, 0.06712482, 0.00087538, 0.00011556]

 timeshift_cam_imu: -8.121e-05

  rostopic:/cam0/image_raw

  resolution: [752,480]

cam1:

  camera_model:omni

  intrinsics:[0.80065662, 833.006, 830.345, 373.850, 253.749]

  distortion_model:radtan

 distortion_coeffs: [-0.33518750, 0.13211436, 0.00055967, 0.00057686]

  T_cn_cnm1:

  - [ 0.99998854,0.00216014, 0.00427195,-0.11003785]

  - [-0.00221074,0.99992702, 0.01187697, 0.00045792]

  -[-0.00424598,-0.01188627, 0.99992034,-0.00064487]

  - [0.0, 0.0, 0.0,1.0]

 timeshift_cam_imu: -8.681e-05

  rostopic:/cam1/image_raw

  resolution: [752,480]

 

  • camera_model//相机模型
    camera projection type (pinhole / omni)
  • intrinsics//相机内参
    vector containing the intrinsic parameters for the given projection type. elements are as follows:
    pinhole: [fu fv pu pv]
    omni: [xi fu fv pu pv]
    distortion_model//畸变模型
    lens distortion type (radtan / equidistant)
  • distortion_coeffs//畸变参数
    parameter vector for the distortion model
  • T_cn_cnm1//左右摄像头的相对位姿
    camera extrinsic transformation, always with respect to the last camera in the chain
    (e.g. cam1: T_cn_cnm1 = T_c1_c0, takes cam0 to cam1 coordinates)
  • timeshift_cam_imu//在捕捉数据时,imu数据和图像时间偏移
    timeshift between camera and IMU timestamps in seconds (t_imu = t_cam + shift)
  • rostopic
    topic of the camera's image stream
  • resolution
    camera resolution [width,height]

3 IMU参数文件:imu.yaml

#Accelerometers

accelerometer_noise_density: 1.86e-03   #Noise density (continuous-time)

accelerometer_random_walk:   4.33e-04  #Bias random walk

 

#Gyroscopes

gyroscope_noise_density:     1.87e-04  #Noise density (continuous-time)

gyroscope_random_walk:       2.66e-05   #Bias random walk

 

update_rate:            200.0    #Hz //imu输出数据频率

编写这个文件需要imu的手册。

4 标定板参数文件:target.yam

Kalibr支持三种标定板,分别是AprilgridCheckerboardCirclegrid。

参数比较简单:见https://github.com/ethz-asl/kalibr/wiki/calibration-targets

运行标定

在制作完成标定需要文件后,就可以对cam-imu进行标定了。

比如:你的标定板文件是april_6x6.yaml,相机参数文件时camchain.yamlimu参数文件是imu_adis16448.yaml,图集文件是dynamic.bag--bag-from-to 5 45这里的545是你想在标定时利用图集数据的时间段,单位是S。执行

kalibr_calibrate_imu_camera --targetapril_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag  dynamic.bag --bag-from-to 5 45

你会得到几个输出文件。

  • report-imucam-%BAGNAME%.pdf: Report in PDF format. Contains all plots for documentation.
  • results-imucam-%BAGNAME%.txt: Result summary as a text file.
  • camchain-imucam-%BAGNAME%.yaml: 这个文件是在输入文件camchain.yaml基础上增加了标定后的cam-imu信息的结果文件。我们想要的T_cam_imu矩阵就在这里。

注意事项

1 virtual memory exhaust 原因:电脑内存不够

2 如果电脑没有安装 numpy,会报错,安装numpy

3 执行指令时如果找不到输入文件,附绝对路径试试。

4 CDE包只支持64linux系统

5注意:在采集标定图集时

i,确保图像不要模糊,运动不要太快。

ii,最好要遍历imu的所有轴,即充分旋转和加速。

6calib可以标定单目+imu,bag内只放单目图像,修改带参运行中的参数即可。

7虽然标定板有几种可以选择,但作者建议使用aprilgrid类型的标定板来标定,aprilgrid地址:https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit

 

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

利用kalibr工具进行camera-IMU标定 的相关文章

  • 【PyQt】PyQt5进阶——串口上位机及实时数据显示

    文章目录 0 前期教程1 前言2 串口部分 QtSerialPort3 绘图部分3 1 QCustomPlot3 2 QtChart3 3 QWT3 4 Qt Designer中如何使用 参考链接 0 前期教程 Python PyQt5入门
  • 【软件相关】Proteus仿真STM32记录

    文章目录 0 前期教程1 前言2 先说说建议的流程3 需要注意的事项3 1 供电网配置不要忘了3 2 ADC模块的使用3 3 元器件查询手册 4 一些小技巧4 1 快速添加标号4 2 出现诡异问题的一种解决思路 0 前期教程 软件相关 Pr
  • 【嵌入式】Modbus实践

    前言 最近接了一个项目 xff0c 需要使用Modbus协议 xff0c 虽然之前有所耳闻 xff0c 但一直没有实操过 xff0c 但实践之后发现其实还是很简单的 xff0c 我认为它本质上就是对串口传输进行 二次封装 建议的入门顺序 大
  • 正则 ^ , \G , \A 区别

    正则 G A 区别 如图
  • c的string库常用函数记录

    1 strcat x xff0c y 将字符串y拼接在字符串x后面 2 strlen xff08 x xff09 返回字符串x的长度 3 strcopy xff08 x xff0c y xff09 将y复制给x xff08 类似于x 61
  • ROS发行版列表完整版

    官方原文 xff1a http wiki ros org Distributions Distro Release date EOL date ROS Melodic Morenia Recommended May 23rd 2018 Ma
  • React styled-components(三)—— 高级特性

    styled components 高级特性 样式继承嵌套设置主题 样式继承 新建 Demo js 文件 xff1a span class token keyword import span React span class token p
  • (九)Java算法:快速排序(详细图解)

    目录 一 前言1 1 概念1 2 算法过程 二 maven依赖三 流程解析3 1 全部数据分区3 2 左边数据分区3 3 右边数据分区 四 编码实现结语 一 前言 1 1 概念 快速排序 xff1a 用数组的第一个数作为基准数据 xff0c
  • 【Linux】树莓派控制光强传感器(C、python手把手教学)

    本文分为三个部分 xff1a 1 光强传感器说明 2 程序解读 3 前期准备 xff08 放在最后一部分 xff0c 供小白查阅借鉴 xff0c 包括本文需要用到的wiringPi库函数 xff09 一 光强传感器说明 1 TSL256x
  • Ubuntu安装VNC,配置多用户vnc连接Ubuntu,开机自启vnc命令

    Ubuntu安装VNC span class token function sudo span span class token function apt span update span class token function sudo
  • 解决登陆github慢的问题

    解决方法 首先本文解决的问题是Github网站可以访问 xff0c 但是由于网络代理商的原因 xff0c 造成访问速度很慢 Ping www github com 时 xff0c 速度只有200多ms 解决思路 xff1a 1 可以花钱购买
  • 什么是反卷积(快速理解)

    什么是反卷积 参考博客 我们知道输入图像通过卷积神经网络 xff08 CNN xff09 提取特征后 xff0c 输出的尺寸往往会变小 xff0c 而又是我们需要将图像恢复到原来的尺寸以便进行进一步的计算 xff0c 整个扩大图像尺寸 xf
  • 李雅普诺夫稳定(内部稳定)与BIBO稳定(外部稳定)的关系

  • 情绪识别论文阅读

    情绪识别论文阅读 情感脑机接口研究综述一种基于情感脑电信号时 频 空特征的3D密集连接网络 1 吕宝粮 张亚倩 郑伟龙 情感脑机接口研究综述 J 智能科学与技术学报 2021 3 01 36 48 情感脑机接口研究综述 情感脑机接口研究面临
  • 一文详细介绍情绪识别常用的数据集

    一文详细介绍情绪识别常用的数据集 SEED采集情况文件介绍 SEED IV采集情况文件介绍 CIAIC多模态情感识别数据采集情况文件介绍 DEAP采集情况文件情况 SEED V采集情况文件情况 本文详细介绍了脑机接口情绪识别常用的数据集 x
  • 父子进程虚拟地址空间情况

    父子进程虚拟地址空间情况 笔记来源于牛客网 Linux多进程开发 The child process and the parent process run in separate memory spaces At the time of f
  • Pytorch中nn.Module中的self.register_buffer解释

    self register buffer作用解释 今天遇到了这样一种用法 xff0c self register buffer name Tensor xff0c 该方法的作用在于定义一组参数 该组参数在模型训练时不会更新 xff08 即调
  • leetcode_回溯算法

    回溯算法刷题总结 回溯法理论基础回溯算法的模板组合问题77 组合优化版本 216 组合总和III17 电话号码的字母组合组合总和组合总和II 分割131 分割回文串93 复原IP地址 子集78 子集90 子集II491 递增子序列 xff0
  • React styled-components(二)—— props、attrs属性

    styled components props attrs属性 96 props 96 96 props 96 穿透添加 96 attrs 96 属性获取 96 state 96 中的样式 变量控制样式通过 96 props 96 控制样式
  • leetcode_贪心算法

    贪心算法相关题 简单题目455 分发饼干1005 K次取反后最大化的数组和860 柠檬水找零 序列问题376 摆动序列法一 xff1a 贪心法法二 xff1a 动态规划 单调递增的数字简化版本 有点难度53 最大子序和贪心算法动态规划 13

随机推荐

  • leetcode_动态规划

    leetcode 动态规划 基础题目509 斐波那契数70 爬楼梯62 不同路径63 不同路径II343 整数拆分96 不同的二叉搜索树 01背包分割等和子集1049 最后一块石头的重量II494 目标和474 一和零 完全背包518 零钱
  • 北东地/东北天两种导航坐标系与姿态转换

    一 坐标系 1 导航坐标系 常用的导航坐标系有北东地和东北天两种 两种坐标系的指向分别定义如下 xff1a 1 1 北东地坐标系 X轴 xff1a 指北 Y轴 xff1a 指东 Z轴 xff1a 指地 1 2 东北天坐标系 X轴 xff1a
  • 如何消除CACHE对DMA的影响?

    各位看官 xff0c 阅读之前 xff0c 请帮忙点击这里一下 xff0c 多谢 xff01 嵌入式系统中的CACHE 问题 郑州解放军信息工程大学 xff08 450002 xff09 陈曦 李汉宁 随着社会的发展 人们生活水平的提高 x
  • 12种性格导致贫穷

    每个人都有不同的性格和个性 有的性格对于挣钱是有帮助的 有的性格却容易导致贫困 大量的研究表明 至少有十二种性格容易导致贫困和失败 第一 知足 只要有吃有穿 腹饱体暖 就感到满足 对于财富没有追求 第二 自满 自己的总是最好的 这种人不愿与
  • 上海房地产市场救市14条政策出台

    值得纪念的一天 http www sina com cn 2008年10月23日05 53 东方网 东方网10月22日消息 xff1a 为促进本市房地产市场健康发展 xff0c 根据财政部 国家税务总局 中国人民银行等部门有关文件精神 xf
  • 天涯上各大公司裁员应对金融危机的强帖,不断更新中……

    http www tianya cn publicforum content no20 1 171416 shtml 俺的东家赫然在列 xff0c 俺作证 xff0c 裁员是真的 活过冬天就会在春天复苏 xff0c 如果死在冬天 xff0c
  • 学习笔记-Semihosting

    如何理解Semihosting xff08 老帖重发 xff0c 写得比较久了 xff09 Semihosting xff0c 顾名思义 xff0c 就是 34 半主控 34 xff0c 意思就是说 xff0c 运行在target boar
  • 开发笔记-NAND Flash Bad Block Management

    1 xff09 为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠 xff0c 因此 xff0c 在NAND的生产中及使用过程中会产生坏块 坏块的特性是 xff1a 当编程
  • ThreadX 实时操作系统

    ThreadX 实时操作系统 xff08 RTOS xff09 Express Logic日前發佈了支援Altera Nios II軟式核心嵌入處理器的ThreadX即時作業系統 RTOS xff0c 全新的ThreadX具備快速軟體計時器
  • React 条件渲染组件

    组件通常需要根据不同的条件显示不同的内容 xff0c 以及根据应用的状态变化只渲染其中的一部分 在 React 中 xff0c 可以使用 JavaScript 语法有条件地呈现 JSX xff0c 比如 if 语句 amp amp 和 操作
  • BDM的禅义

    2006 4 13 13 16 00 BDM的禅义 这片文章译自 the zen of bdm xff0c 翻译的不好 xff0c 还请大家多提意见 介绍 你可能感到奇怪 xff0c 为什么说BDM的禅义 BDM xff08 背景调试模式
  • RTOS基本原理:多任务和调度-FreeRTOS是如何工作的

    FreeRTOS是如何工作的 RTOS基本原理 多任务和调度 作者 xff1a Gavin Lee 来源 xff1a upsdn net 更新日期 xff1a 2006 04 12 RTOS基本原理 多任务 调度 上下文切换 实时应用 实时
  • 上下文切换-FreeRTOS是如何工作的

    FreeRTOS是如何工作的 上下文切换 作者 xff1a Gavin Lee 来源 xff1a upsdn net 更新日期 xff1a 2006 04 13 上下文切换 跟任何其他程序一样 xff0c 一个任务执行时 xff0c 它使用
  • 国产手机操作系统艰难探索

    4大阵营纷争劲起 国产手机操作系统艰难探索 作者 xff1a 连晓东 出处 xff1a 中国电子报 2005 7 13 13 07 52 阅读 lt script src 61 34 http service donews com numb
  • 嵌入式系统和嵌入式操作系统

    嵌入式系统和嵌入式操作系统 西南交通大学电气学院 张湘 肖建 2004 10 2 文章从概念 特点 种类等不同方面就嵌入式系统和嵌入式操作系统做了介绍 一 什么是嵌入式系统 嵌入式系统一般指非PC系统 xff0c 有计算机功能但又不称之为计
  • FPGA与SRAM相结合完成大容量数据存储

    FPGA与SRAM相结合完成大容量数据存储 作者 xff1a 安莎莎 赖伟林 张辉 阅读 xff1a 248 引用 xff1a 0 发布时间 xff1a 2006 05 25 20 01 出处 xff1a 电子产品世界 西安电子科技大学 通
  • Git客户端(Windows系统)的使用

    分类 xff1a Ubuntu 2013 09 03 02 15 212人阅读 评论 0 收藏 举报 本文环境 xff1a 操作系统 xff1a Windows XP SP3 Git客户端 xff1a TortoiseGit 1 8 5 0
  • PX4飞控-自定义发送MavLink消息

    PX4飞控 自定义发送MavLink消息 一 自定义XML文件 如图所示 这相当于定义了一个结构体 xff0c 结构体里面就有一个类型为uint8 t的u8元素 使用的id端口为150 xff0c 这里注意不要与已经存在的id重复 二 使用
  • IPv4和IPv6何去何从

    一 缘起 某一天 xff0c 在公司技术群内运维大佬们发了这么一条消息 这条消息瞬间勾起了我的好奇心 什么是IPv6 xff1f 为什么要切IPv6 xff1f 于是在上班时多去了几次去卫生间之后 xff0c 对IPv6有了一些初步认识 x
  • 利用kalibr工具进行camera-IMU标定

    camera IMU标定 一 camera IMU标定 简述 1标定目的 xff1a 我们进行camera IMU的目的是为了得到IMU和相机坐标系的相对位姿矩阵T 2标定工具 xff1a 我们利用Kalibr标定工程对camera IMU