VIO标定工具kalibr和imu_utils的使用

0.参考资料

Kalibr进行IMU+相机的标定 : 这个步骤写的非常好,应该是目前看到的最符合的步骤了。

使用ROS功能包标定相机内参

Kalibr标定camera-IMU详细步骤 : 这篇博客里给出了它的标定结果,重投影像素误差在1pixel之内,感觉也是很大的。另外注意里面提到了如果自己的包开始和结束的时候有拿起和放下的动作,那么要注意把开始和结束的地方截取掉,不要使用。

1.步骤

  1. 标定相机内参
    这个部分可以使用的工具很多,kalibr功能很全,可以单独标定相机内参、IMU零偏以及相机和IMU外参,所以可以使用kalibr来标定相机内参。
    也可以使用其他工具来标定相机内参,比如ROS自带的相机标定工具包,或者自己采集图像使用MATLAB进行标定。

  2. 标定IMU零偏和随机游走
    同理标定IMU也可以使用kalibr进行标定,还有其他工具,比较容易使用的就是港科大的imu_utils

  3. 使用1和2的结果,联合标定相机和IMU外参
    这个就只能使用kalibr了,也就是后面主要的步骤

2.安装

官网安装教程:https://github.com/ethz-asl/kalibr/wiki/installation

注意官网的安装教程不是用catkin_make,而是使用catkin build(注意中间没有_),catkin build应该是catkin_make的一个改进版本,好像是对于有多个ROS功能包的工程进行编译互不影响,而catkin_make则是一起编译,会污染工作空间。(不一定对,具体可以再查一下)

所以下面的安装步骤就严格按照官网安装步骤来进行,我尝试过使用catkin_make命令直接编译,也可以编译成功,但是最后进行标定的时候求解非线性优化一直卡在第一次优化的地方不动,不知道什么原因,所以最好还是按照官网的步骤来安装吧。

下面以Ubuntu 18.04为例:

  1. 确保电脑上已经安装了ROS-melodic
  2. 在当前窗口导出ROS版本环境变量,并且安装catkin-tools,不安装这个是没有catkin build命令的
export ROS1_DISTRO=melodic
sudo apt-get install python-catkin-tools
  1. 安装编译和运行依赖库(注意下面\不用删除,终端会自动识别)
sudo apt-get install -y \
    git wget autoconf automake nano \
    libeigen3-dev libboost-all-dev libsuitesparse-dev \
    doxygen libopencv-dev \
    libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev

此外还要安装不同版本的Python依赖

sudo apt-get install -y python3-dev python-pip python-scipy \
    python-matplotlib ipython python-wxgtk4.0 python-tk python-igraph
  1. 创建工作空间,注意这个地方很重要,官网教程写了,这个地方一定要配置成Release模式,否则优化会很慢。所以可能之前自己测试的用catkin_make编译优化卡住可能就是没有设置成Release模式。
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
export ROS1_DISTRO=melodic
source /opt/ros/$ROS1_DISTRO/setup.bash
catkin init
catkin config --extend /opt/ros/$ROS1_DISTRO
catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
  1. 下载工程并编译
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/kalibr.git

cd ~/kalibr_workspace/
catkin build -DCMAKE_BUILD_TYPE=Release -j4

最后编译成功截图如下,可以看到catkin build编译的输出配色更丰富,比原来的catkin_make 更好看,科技在进步啊!
VIO标定工具kalibr和imu_utils的使用_第1张图片

3.官网IMU和camera外参标定

3.1.标定步骤

官网教程:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration

The tool must be provided with the following input:

  • –bag filename.bag
    ROS bag containing the image and IMU data
  • –cam camchain.yaml
    intrinsic and extrinsic calibration parameters of the camera system. The output of the multiple-camera-calibration tool can be used here. (see YAML formats)
  • –imu imu.yaml
    contains the IMU statistics and the IMU’s topic (see YAML formats)
  • –target target.yaml
    the calibration target configuration (see Cailbration targets)

The calibration can be run using:

kalibr_calibrate_imu_camera --bag [filename.bag] --cam [camchain.yaml] --imu [imu.yaml] --target [target.yaml]

总结就是运行标定的程序,需要提供四个文件,分别是ros bag包、相机内参文件、IMU零偏和随机游走文件、标定板的参数文件。

注意:但是上面有一个问题并不能直接运行kalibr_calibrate_imu_camera这个可执行文件,而且我在devel下也没有找到bin目录。所以最后还是用rosrun命令来运行这个节点吧,这里也比较奇怪,刷新了环境变量之后,还是不能用tab键进行补全,只能自己全部打上,例如官网提供的这个IMU和camera标定的实例:

rosrun kalibr kalibr_calibrate_imu_camera --bag imu_april.bag --cam cam_april-camchain.yaml --imu imu_adis16448.yaml --target april_6x6_80x80cm.yaml

3.2.标定结果分析

  • 相机重投影误差如下,可以看到xy轴的像素重投影误差都在1个像素(1 pixel)左右。问题:这个标定误差在多少范围内才算作比较好?
    VIO标定工具kalibr和imu_utils的使用_第2张图片

  • 更详细的数值结果可以看输出的pdf报告中的内容,如下所示。这个结果是官方的标定实例结果,所以如果要标定自己的设备,可以把自己的标定结果和这个进行比较,标定误差相差不太大就说明标定结果较为准确。
    VIO标定工具kalibr和imu_utils的使用_第3张图片

4.运行可能报错

报错:

ImportError: dynamic module does not define module export function (PyInit_libnumpy_eigen)

解决参考:Kalibr标定 中的一个巨大的天坑

5.参考

https://codeantenna.com/a/45xdYtWupm

https://blog.csdn.net/sinat_36502563/article/details/103053292

https://guyuehome.com/34592

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

你可能感兴趣的:(SLAM,自动驾驶,ubuntu,python)