双目相机与IMU联合标定

前言

为了后面的视觉激光融合SLAM以及跑通VINS-Fusion,需要标定双目相机和IMU得内参以及它们得外参(变换矩阵)。

准备工作

  • 双目相机:ZED-m
  • IMU:realsense-t265(仅使用它的imu信息)
  • 系统:Ubuntu16.04 + ROS kinetic *(ros推荐使用纯净的,就是新系统装ros,可以使用虚拟机)

双目相机标定

这里需要得到相机的内参矩阵,可以使用相机自带的标定信息,也可以使用标定工具包标定,比如VINS-Fusion,Kalibr,这里我以Kalibr为例。

Kalibr安装

因为后面联合标定也需要使用Kalibr,这里介绍一下它的安装。可以直接进Wiki看官方安装教程,教程写了两种安装方式,这里我们使用源码编译安装。官方使用的Ubuntu14.04+ ROS indigo,亲测Ubuntu16.04也行。


sudo apt install libv4l-dev

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

cd ~/kalibr_workspace
catkin_make

安装完成后我们进行测试,是否安装成功,这里生成一张标定板,为了能够使用A4纸打印,命令如下


roscore

rosrun kalibr kalibr_create_target_pdf --type checkerboard --nx 6 --ny 7 --csx 0.05 --csy 0.05

在当前目录下能找到生成的pdf(如图),按实际大小打印出来,每个格子应该是2.92cm

双目相机与IMU联合标定
新建target_6x7.yaml保存参数
target_type: 'checkerboard'
targetCols: 6
targetRows: 7
rowSpacingMeters: 0.029
colSpacingMeters: 0.029

标定过程

  • 将相机固定,在前方移动标定板大概十几秒,记录下bag包:
    rosbag record /cmaera/image_1 /camera/image_2 -O camera.bag

这里可以降低相机的发布频率,减小包的大小和后面处理时间

  • 进行标定
    rosrun kalibr kalibr_calibrate_cameras --target target_6x7.yaml --bag cameara.bag --models pinhole-radtan pinhole-radtan --topics /cmaera/image_1 /camera/image_2 --show-extraction --bag-from-to 5 20
    双目相机与IMU联合标定
  • 标定结果在当前目录生成 yaml文件:
    双目相机与IMU联合标定
cam0:
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.0067221785223551735, 0.0006309071251854829, -0.0009206033732726818,
    -0.005807607326385791]
  distortion_model: radtan
  intrinsics: [374.8798664259513, 376.62433296380203, 633.6382978832153, 368.203361863134]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/left/image_rect_color
cam1:
  T_cn_cnm1:
  - [0.9999958135540992, 0.0007219875640781401, 0.002802072131479685, -0.06140952719752661]
  - [-0.0007241075974458178, 0.9999994523273698, 0.0007556541173352181, -0.0009541268599771967]
  - [-0.0028015250239860137, -0.0007576799555491327, 0.9999957886804435, 0.0005387148522162342]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.008041841705316074, 0.0003735182825901831, -0.001170616434022235,
    -0.006061625440876723]
  distortion_model: radtan
  intrinsics: [373.7879644856689, 376.1467414780452, 632.7953296858204, 368.521883006889]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/right/image_rect_color

相机标定完成

IMU标定

IMU都有高斯白噪声和随机游走误差,这里使用港科大的imu_utils进行标定。

ceres-solver安装

因为工具需要ceres-solver支持,所以首先编译安装ceres-solver。


sudo apt-get install libgoogle-glog-dev libgflags-dev

sudo apt-get install libatlas-base-dev

sudo apt-get install libsuitesparse-dev

wget http://ceres-solver.org/ceres-solver-2.0.0.tar.gz
tar zxf ceres-solver-2.0.0.tar.gz
cd ceres-solver
mkdir build && cd build
cmake ..

make
sudo make install

code_utils安装


sudo apt-get install libdw-dev

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..

catkin_make

报错解决:

backward.hpp No such file

  • 将报错文件的 #include "backward.hpp"改成 #include "code_utils/backward.hpp"

‘integer_sequence’ is not a member of ‘std’

  • 将CMakeLists.txt中的 set(CMAKE_CXX_FLAGS "-std=c++11") 改成 set(CMAKE_CXX_STANDARD 14)

imu_utils安装

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/imu_utils.git

cd ..

catkin_make

注意一定要先编译code_utils再编译imu_utils

录取bag包

  • 这里将IMU静置,录取bag包,官方建议是两个小时,时间短点也没事。
    rosbag record /imu -O imu.bag

标定

  • imu_utils包中新建一个 launch文件,格式如下:
<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
            # imu topic的名字
            # imu名字,和生成的标定结果文件名有关

           #标定的时长,bag包时长

    node>
launch>
  • 开始标定

roslaunch imu_utils imu.launch

rosbag play -r 200 imu.bag
  • 大概不到一分钟就能出结果了,生成的 yaml文件保存在 imu_utilsdata文件夹中,如下:

`yaml
%YAML:1.0

Original: https://blog.csdn.net/qq_34935373/article/details/122563824
Author: 合工大机器人实验室
Title: 双目相机与IMU联合标定

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/558910/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球