Kalibr进行IMU+相机的标定 : 这个步骤写的非常好,应该是目前看到的最符合的步骤了。
使用ROS功能包标定相机内参
Kalibr标定camera-IMU详细步骤 : 这篇博客里给出了它的标定结果,重投影像素误差在1pixel之内,感觉也是很大的。另外注意里面提到了如果自己的包开始和结束的时候有拿起和放下的动作,那么要注意把开始和结束的地方截取掉,不要使用。
标定相机内参
这个部分可以使用的工具很多,kalibr功能很全,可以单独标定相机内参、IMU零偏以及相机和IMU外参,所以可以使用kalibr来标定相机内参。
也可以使用其他工具来标定相机内参,比如ROS自带的相机标定工具包,或者自己采集图像使用MATLAB进行标定。
标定IMU零偏和随机游走
同理标定IMU也可以使用kalibr进行标定,还有其他工具,比较容易使用的就是港科大的imu_utils
。
使用1和2的结果,联合标定相机和IMU外参
这个就只能使用kalibr了,也就是后面主要的步骤
官网安装教程:https://github.com/ethz-asl/kalibr/wiki/installation
注意官网的安装教程不是用catkin_make
,而是使用catkin build
(注意中间没有_
),catkin build
应该是catkin_make
的一个改进版本,好像是对于有多个ROS功能包的工程进行编译互不影响,而catkin_make
则是一起编译,会污染工作空间。(不一定对,具体可以再查一下)
所以下面的安装步骤就严格按照官网安装步骤来进行,我尝试过使用catkin_make
命令直接编译,也可以编译成功,但是最后进行标定的时候求解非线性优化一直卡在第一次优化的地方不动,不知道什么原因,所以最好还是按照官网的步骤来安装吧。
下面以Ubuntu 18.04
为例:
catkin-tools
,不安装这个是没有catkin build
命令的export ROS1_DISTRO=melodic
sudo apt-get install python-catkin-tools
\
不用删除,终端会自动识别)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
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
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
更好看,科技在进步啊!
官网教程:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration
The tool must be provided with the following input:
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
相机重投影误差如下,可以看到xy轴的像素重投影误差都在1个像素(1 pixel)左右。问题:这个标定误差在多少范围内才算作比较好?
更详细的数值结果可以看输出的pdf报告中的内容,如下所示。这个结果是官方的标定实例结果,所以如果要标定自己的设备,可以把自己的标定结果和这个进行比较,标定误差相差不太大就说明标定结果较为准确。
报错:
ImportError: dynamic module does not define module export function (PyInit_libnumpy_eigen)
解决参考:Kalibr标定 中的一个巨大的天坑
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