技术分享 | 带你实现IMU和双目相机的联合标定

2023-05-16

转载自:https://mp.weixin.qq.com/s/578zLmelTqxrPggOakxkVw

技术分享 | 带你实现IMU和双目相机的联合标定

原创 阿木实验室 阿木实验室 今天

紧接着上次我们讲解了VINS的基本原理,这次需要做的就是VINS落地之前的参数配置,我们先标定IMU和双目相机。联合标定是指,将IMU和双目相机之间的变换矩阵以及其他一些无法估计的Bias标定出来。变换矩阵对于VINS极为重要,如果精度过低,整个系统就会变得极为不鲁棒。

1.imu_utils标定IMU的内参

imu_utils 标定IMU的内参,可以校准IMU的高斯白噪声和随机游走误差

kalibr包标定相机的内外参数,相机与IMU的外参

1.1首先需要安装环境,安装ceres库

下面安装ceres的依赖

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev

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

下载编译ceres-solver

git clone https://github.com/ceres-solver/ceres-solver.git

cd ceres-solver

mkdir build

cd build

cmake ..

make && sudo make install

1.2安装code_utils

mkdir -p ~/kalibr_workspace/src

cd ~/kalibr_workspace

catkin_make

sudo apt-get install libdw-dev

cd kalibr_workspace/src

git clone https://github.com/gaowenliang/code_utils.git

cd ..

catkin_make

1.3安装imu_utils

cd kalibr_workspace/src

git clone https://github.com/gaowenliang/imu_utils.git

cd ..

catkin_make

2.kalibr的安装

2.1依赖安装

 

图片

图片

图片

 

2.2下载源码

这里建议新建一个工作空间

mkdir -p kalibr_ws/src

git clone https://github.com/ethz-asl/Kalibr.git

cd ~/kalibr_ws

catkin build -DCMAKE_BUILD_TYPE=Release -j4

这里可能会出现问题

图片

原因是kalibr只支持opencv2,提供一个非常简单的做法文件

kalibr/aslam_cv/aslam_imgproc/include/aslam/implementation/aslam_helper.hpp里面,changing “CvSize”into “cv::Size”即可。

3.imu的标定

3.1录制IMU的数据集

rosbag record /marvos/imu/data -O imu_D435I.bag 网上建议录制两个小时,根据个人情况而定。

3.2标定配置文件imu.launch 文件为如下内容

 <launch>

    <node pkg="imu_utils" type="imu_an" name="imu_an"

 output="screen">

        <param name="imu_topic" type="string" value=

 "/marvos/imu/data"/>

        <param name="imu_name" type="string" value=

 "imu_px4"/>

        <param name="data_save_path" type="string"

 value= "$(find imu_utils)/data/"/>

        <param name="max_time_min" type="int" value=

 "120"/>

        <param name="max_cluster" type="int" value=

 "100"/>

    </node>

</launch>

3.3随后启动imu_utils 标定IMU

rosbag play -r 200 imu_D435I.bag

roslaunch imu_utils imu.launch

可得到如下结果:

图片

 

我们并不需要使用这么多参数,只需要使用标红的地方。新建一个imu.yaml文件,具体内容如下:

图片

4.相机标定

4.1改变相机发布频率

话题名需要根据自己的话题名更改,降低发布频率主要是为了减小录制包的大小 

rosrun topic_tools 

throttle messages /camera/infra1/image_raw 4.0

rosrun topic_tools 

throttle messages /camera/infra2/image_raw 4.0

4.2录制bag 包

rosbag record /cmaera/infra1/image_raw

 /camera/infra2/image_raw -O camera.bag

4.3标定

我这里使用的标定板是官方提供的标定板,并不是常见的棋盘格。大小也需要根据自己的实际大小修改,不可直接粘贴复制!

kalibr_calibrate_cameras --target

 april_6x6_24x24mm.yaml --bag camera.bag --bag-from-to

 5 30  --models pinhole-radtan pinhole-radtan --topics

/camera/infra1/image_raw /camera/infra2/image_raw

之后会得到一个标定好的yaml文件,我的是camchain.yaml,具体看你自己。这个yaml文件是为我们联合标定做准备的。

注:红色字体部分都需要根据自己的修改。

5.校准相机和IMU

把IMU和相机固定在一起录制bag 包,录制的时候需要充分激励IMU的各个轴,绕3个轴旋转和3个方向的平移。这里附上官方标定动作,需要挂梯子。

https://www.youtube.com/watch?app=desktop&v=puNXsnrYWTY

这里需要修改imu的发布频率,官方推荐为200HZ

rosrun topic_tools throttle messages /camera/imu 200.0 /imu

5.1录制相机的IMU的bag包

rosbag record /camera/infra1/image_rect_raw

 /camera/infra2/image_rect_raw /imu -o camera_imu.bag

kalibr_calibrate_imu_camera --target april_6x6_24x24mm.yaml –

bag camera_imu.bag --cam camchain.yaml  --imu  imu.yaml

24x24是标定板尺寸大小,红色部分需要根据自己的实际修改。

得到一个联合标定文件

其中就包括了我们需要的相机和IMU之间的相对变换矩阵。

图片

图 1 左目和IMU之间的变换矩阵

图片

图 2 右目和IMU之间的相对变换矩阵

好了,到此为止我们已经标定出我们需要的所有参数,后面需要做的就是把这些参数代入VINS即可。

- End -

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

技术分享 | 带你实现IMU和双目相机的联合标定 的相关文章

随机推荐