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

本文介绍如何使用Kalibr工具进行Camera-IMU标定,包括所需输入文件的准备、Kalibr的安装配置及标定流程。适用于双目相机与IMU的联合标定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

<think>嗯,用户想了解如何使用Kalibr进行RGBD相机IMU的联合标定。首先,我需要回忆一下Kalibr的基本用法和相关文档。记得Kalibr是ETH Zurich开发的一个标定工具,主要用于多传感器标定,比如相机IMU和轮速计等。用户提到的RGBD相机IMU的联合标定,可能涉及到时间同步和空间标定。 首先,用户可能需要准备标定板。根据引用[3],Kalibr支持Aprilgrid、Checkerboard和Circlegrid三种标定板,用户需要下载对应的PDF并打印。这点很重要,因为标定板的选择会影响标定结果,特别是Aprilgrid可能有更好的检测鲁棒性。 接下来,安装Kalibr。通常是通过ROS来安装,可能需要添加相应的源或者从源码编译。不过用户可能需要先确认自己的ROS版本是否兼容,比如Melodic或Noetic。安装步骤可能需要参考官方文档,或者使用apt-get安装ROS包。 然后,数据采集部分。用户需要同时录制RGBD相机的图像和IMU的数据。这里需要注意的是时间同步的问题,因为相机IMU的时间戳必须对齐。通常建议使用硬件同步,或者确保软件时间戳的准确性。此外,移动标定板的方式也很重要,需要覆盖所有运动轴,尤其是IMU的激励,比如各个方向的旋转和平移,以获取充分的动态信息。 标定过程中,可能需要使用Kalibr工具来检查数据质量,比如kalibr_checkerboard_dataset或者kalibr_imu_camera_check。这些工具可以帮助用户确认数据是否适合标定,比如IMU是否有足够的运动激励,图像中的标定板是否被正确检测到。 标定命令方面,用户需要使用kalibr_calibrate_imu_camera工具,并指定相应的参数文件,比如IMU的配置文件、相机标定文件(如YAML格式),以及bag文件。这里需要注意的是,RGBD相机标定可能需要特别处理,因为通常Kalibr是针对单目或双目相机的,但RGBD可能可以当作带有深度信息的单目来处理。可能需要确认Kalibr是否直接支持RGBD,或者需要将深度信息与其他数据结合使用。 标定完成后,用户需要验证结果,比如重投影误差和IMU参数是否合理。如果误差较大,可能需要重新采集数据或调整参数。此外,引用[1]中提到ORBSLAM3使用Kalibr进行标定,用户可能需要将标定结果应用到SLAM系统中,这时候需要确保标定文件的格式兼容性。 用户可能遇到的问题包括数据同步不好导致标定失败,或者标定板检测不稳定。这时候建议检查时间戳同步,或者尝试不同的标定板类型。此外,IMU的噪声参数设置也可能影响标定结果,需要根据实际传感器的规格进行配置。 最后,用户可能需要参考Kalibr的官方文档和Wiki,以及相关的论文,如引用[2]中的Real-Time Visual Odometry,来深入理解标定的原理和最佳实践。如果有具体的错误信息,可能需要查阅社区或GitHub的issue来寻找解决方案。</think>### 使用Kalibr进行RGBD相机IMU联合标定的步骤 #### 1. **准备工作** - **标定板选择**:使用Kalibr支持的标定板(如Aprilgrid、Checkerboard或Circlegrid),需下载并打印PDF文件[^3]。 - **传感器安装**:确保RGBD相机IMU刚性固定,且时间戳同步(硬件同步或软件同步)。 - **安装Kalibr**:通过ROS安装Kalibr包,或从源码编译: ```bash sudo apt-get install ros-<distro>-kalibr ``` #### 2. **数据采集** - **录制ROS Bag**: - 缓慢移动传感器组合,覆盖所有运动轴(平移、旋转)。 - 确保标定板在RGBD相机的视野内,且IMU受到充分激励(避免静止状态)[^1]。 - 录制命令示例: ```bash rosbag record /rgb/image_raw /depth/image_raw /imu/data -O calibration.bag ``` #### 3. **配置文件准备** - **相机标定文件**(如`camchain.yaml`): ```yaml cam0: camera_model: pinhole intrinsics: [fx, fy, cx, cy] distortion_coeffs: [k1, k2, p1, p2] ``` - **IMU噪声参数文件**(如`imu.yaml`): ```yaml rate: 200 # IMU采样频率 accelerometer_noise_density: 0.01 # 噪声密度 gyroscope_noise_density: 0.005 ``` #### 4. **执行联合标定** ```bash kalibr_calibrate_imu_camera \ --target aprilgrid.yaml \ # 标定板参数 --cam camchain.yaml \ # 相机参数 --imu imu.yaml \ # IMU参数 --bag calibration.bag \ # 数据文件 --time-calibration # 时间偏移校准 ``` #### 5. **结果验证** - 检查输出文件`camchain-imucam.yaml`中的重投影误差(一般需小于0.5像素)。 - 验证IMU相机的时空参数(如时间延迟、相对位姿)。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值