Kalibr 之 Camera-IMU 标定 (总结)

2024-05-31 22:32
文章标签 总结 标定 imu camera kalibr

本文主要是介绍Kalibr 之 Camera-IMU 标定 (总结),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Overview

欢迎访问 持续更新:https://cgabc.xyz/posts/db22c2e6/

ethz-asl/kalibr is a toolbox that solves the following calibration problems:

  • Multiple camera calibration: intrinsic and extrinsic calibration of a camera-systems with non-globally shared overlapping fields of view
  • Camera-IMU calibration: spatial and temporal calibration of an IMU w.r.t a camera-system
  • Rolling Shutter Camera calibration: full intrinsic calibration (projection, distortion and shutter parameters) of rolling shutter cameras

本文以 单目+IMU双目+IMU 为例,讲解使用 Kalibr工具 标定 Camera-IMU,其中使用的摄像头分别为 Realsense ZR300MYNT-EYE S系列摄像头

注意:本文用于学习kalibr标定过程,文中结果仅供参考。

1. 标定 Camera

采集 images

注意: 采集图像时,帧率控制在4帧左右

  • 单目

    rosbag record /camera/fisheye/image_raw -O images.bag
    
  • 双目

    rosbag record /stereo/left/image_raw /stereo/right/image_raw -O images.bag
    

标定 Camera

  • 单目

    kalibr_calibrate_cameras \--target april_6x6_24x24mm.yaml \--bag images.bag --bag-from-to 5 20 \--models pinhole-fov \--topics /camera/fisheye/image_raw
    
  • 双目

    kalibr_calibrate_cameras \--target april_6x6_24x24mm.yaml \--bag images.bag --bag-from-to 5 30 \--models pinhole-radtan pinhole-radtan \--topics /stereo/left/image_raw /stereo/right/image_raw
    

标定评估

重投影误差在 0.1~0.2 以内,标定结果较好,如下所示。

Other Camera Calib Tools

  • ROS camera_calibration
  • PTAM Calibration ( ATAN / FOV camera model )
  • OCamCalib toolbox
  • Camera Calibration & Rectification

输出 cam_chain.yaml

  • 单目

    sample file output:

    cam_overlaps: []camera_model: pinholedistortion_coeffs: [0.9183540411447179]distortion_model: fovintrinsics: [252.40344712951838, 253.29272771389083, 310.9288373770512, 227.37425906476517]resolution: [640, 480]rostopic: /camera/fisheye/image_raw
    
  • 双目

    sample file output:

    cam0:cam_overlaps: [1]camera_model: pinholedistortion_coeffs: [0.962084349711143]distortion_model: fovintrinsics: [334.23991339518517, 333.6035571693483, 368.20264278064553, 252.393048692916]resolution: [752, 480]rostopic: /stereo/left/image_raw
    cam1:T_cn_cnm1:- [0.9999904159643447, 0.0026734233431591698, -0.003467100673890538, -0.1172292375035688]- [-0.002666210133778015, 0.999994275307285, 0.002083428947247444, 0.0001658846059485747]- [0.003472650713385957, -0.002074164960638575, 0.9999918192349059, -0.0002328222935304919]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [0]camera_model: pinholedistortion_coeffs: [0.9617138563016285]distortion_model: fovintrinsics: [330.66005261900216, 330.07191301082963, 371.03802575515203, 231.03601204806853]resolution: [752, 480]rostopic: /stereo/right/image_raw
    

2. 标定 IMU

  • imu_utils: A ROS package tool to analyze the IMU performance, C++ version of Allan Variance Tool.

采集 IMU 数据

  • collect the data while the IMU is Stationary, with a two hours duration
rosbag record /camera/imu/data_raw -O imu.bag

标定 IMU

rosbag play -r 200 imu.bag
roslaunch imu_utils ZR300.launch

ZR300.launch 文件内容

<launch><node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"><param name="imu_topic" type="string" value= "/camera/imu/data_raw"/><param name="imu_name" type="string" value= "ZR300"/><param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/><param name="max_time_min" type="int" value= "80"/><param name="max_cluster" type="int" value= "100"/></node>
</launch>

输出 ZR300_imu_param.yaml,sample file output:

%YAML:1.0
---
type: IMU
name: ZR300
Gyr:unit: " rad/s"avg-axis:gyr_n: 2.7878706973951564e-03gyr_w: 1.6503780396374297e-05x-axis:gyr_n: 3.2763884944799469e-03gyr_w: 1.8012497709865783e-05y-axis:gyr_n: 2.7204386280639753e-03gyr_w: 1.6637042617714669e-05z-axis:gyr_n: 2.3667849696415461e-03gyr_w: 1.4861800861542444e-05
Acc:unit: " m/s^2"avg-axis:acc_n: 2.5172832889483965e-02acc_w: 4.4150867224248972e-04x-axis:acc_n: 2.4450765767551903e-02acc_w: 4.0728821351916671e-04y-axis:acc_n: 2.1474226370935746e-02acc_w: 2.1468705215157706e-04z-axis:acc_n: 2.9593506529964245e-02acc_w: 7.0255075105672530e-04

输出 imu.yaml

根据标定结果修改 imu.yaml,其文件内容为

#Accelerometers
accelerometer_noise_density: 2.52e-02   #Noise density (continuous-time)
accelerometer_random_walk:   4.41e-04   #Bias random walk#Gyroscopes
gyroscope_noise_density:     2.78e-03   #Noise density (continuous-time)
gyroscope_random_walk:       1.65e-05   #Bias random walkrostopic:                    /camera/imu/data_raw   #the IMU ROS topic
update_rate:                 200.0      #Hz (for discretization of the values above)

3. 标定 Camera-IMU

采集 images & imu 数据

  • 单目 + IMU

    rosbag record /camera/imu/data_raw /camera/fisheye/image_raw -O images_imu.bag
    
  • 双目 + IMU

    rosbag record /camera/imu/data_raw /stereo/left/image_raw /stereo/right/image_raw -O images_imu.bag
    

标定

kalibr_calibrate_imu_camera \--target april_6x6_24x24mm.yaml \--bag images_imu.bag \--bag-from-to 5 45 \--cam camchain.yaml \--imu imu.yaml \--imu-models scale-misalignment \--timeoffset-padding 0.1
  • –bag-from-to 5 45: because there are shocks in the dataset (sensor pick-up/lay-down), only the data between 5 to 45 s is used

输出 camchain-imucam.yaml

  • 单目 + IMU

    sample file output:

    cam0:T_cam_imu:- [0.9996455719455962, 0.02441693761016358, -0.010608659071806014, -0.15423539234968817]- [-0.024769907516072436, 0.9990969029165591, -0.03452289478279192, -0.0032297199459559245]- [0.00975613505470538, 0.03477343440443987, 0.9993476002315277, 0.150153755143352]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: []camera_model: pinholedistortion_coeffs: [0.9183540411447179]distortion_model: fovintrinsics: [252.40344712951838, 253.29272771389083, 310.9288373770512, 227.37425906476517]resolution: [640, 480]rostopic: /camera/fisheye/image_rawtimeshift_cam_imu: 0.7904787918609288
    
  • 双目 + IMU

    sample file output:

    cam0:T_cam_imu:- [0.0008247496568674628, 0.9999961104998093, -0.002664352314491823, 0.043041669055924436]- [-0.9999929524133787, 0.0008149826348758382, -0.003664822898610003, 0.003376471075594937]- [-0.0036626372434111396, 0.0026673560986662063, 0.9999897350972485, -0.021104195227740437]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [1]camera_model: pinholedistortion_coeffs: [0.962084349711143]distortion_model: fovintrinsics: [334.23991339518517, 333.6035571693483, 368.20264278064553, 252.393048692916]resolution: [752, 480]rostopic: /stereo/left/image_rawtimeshift_cam_imu: 0.00019201226395901445
    cam1:T_cam_imu:- [-0.001835964017484093, 0.999979457302906, -0.00614118948676923, -0.07410578385444819]- [-0.9999970575613598, -0.001845664547293735, -0.001574290634432294, 0.003383609126826685]- [-0.001585592869970595, 0.0061382810757381065, 0.9999799034984085, -0.021194379548050524]- [0.0, 0.0, 0.0, 1.0]T_cn_cnm1:- [0.9999904159643451, 0.00267342334315917, -0.003467100673890538, -0.1172292375035688]- [-0.0026662101337780156, 0.9999942753072855, 0.0020834289472474446, 0.0001658846059485747]- [0.003472650713385957, -0.0020741649606385755, 0.9999918192349063, -0.0002328222935304919]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [0]camera_model: pinholedistortion_coeffs: [0.9617138563016285]distortion_model: fovintrinsics: [330.66005261900216, 330.07191301082963, 371.03802575515203, 231.03601204806853]resolution: [752, 480]rostopic: /stereo/right/image_rawtimeshift_cam_imu: 0.0001648708557824339
    

这篇关于Kalibr 之 Camera-IMU 标定 (总结)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到