紧接着上次我们讲解了VINS的基本原理,这次需要做的就是VINS落地之前的参数配置,我们先标定IMU和双目相机。联合标定是指,将IMU和双目相机之间的变换矩阵以及其他一些无法估计的Bias标定出来。变换矩阵对于VINS极为重要,如果精度过低,整个系统就会变得极为不鲁棒。
1.imu_utils 标定IMU的内参,可以校准IMU的高斯白噪声和随机游走误差
2.kalibr包标定相机的内外参数,相机与IMU的外参
1.imu_utils标定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依赖安装
file
file
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
这里可能会出现问题
file
原因是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
可得到如下结果:
file
我们并不需要使用这么多参数,只需要使用标红的地方。新建一个imu.yaml文件,具体内容如下:
file
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之间的相对变换矩阵。
file
图 1 左目和IMU之间的变换矩阵
file
图 2 右目和IMU之间的相对变换矩阵
好了,到此为止我们已经标定出我们需要的所有参数,后面需要做的就是把这些参数代入VINS即可。
-- End -
技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。
阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!
网友评论