起因
本来一直都是直接使用ROS的camera_calibration package标定stereo camera的,最近有个工作需要用kalibr标定。还从来没用过,倒腾了一阵,发现还起步比较曲折,但是最后还是挺顺利,这记录一下。
使用的平台是Ubuntu 16.04 LTS, ROS kinetic. kalibr直接从github上clone下来。
kalibr 编译
Github的readme上也没写清楚,看看源码文件夹发现应该是放到catkin工作目录里面直接build。测试了一下,编译没有通过,系统上缺少 libv4l, 通过apt-get直接安装
sudo apt-get install libv4l-dev
之后catkin_make就顺利通过了。
kalibr 标定camera
录制bagfile
直接用的rosbag recored
录的topic,没有用kalibr_bagcreater之类的东西。
标定
这里感觉kalibr 在github上的wiki并没有写太清楚,我直接试了一下rosrun
发现是可行的,实例如下
rosrun kalibr kalibr_calibrate_cameras --bag <bag_file_name> --topics <topic_0> <topic_1> --models <mode_0> <mode_1> --target <target_description_yaml_file>
这里kalibr wiki上对–models参数的解释并不直观,但好在kalibr_calibrate_cameras的报错信息非常体贴,告诉你正确的参数有哪些可选。
- pinhole-radtan
- pinhole-equi
- omni-radtan
- pinhole-fov
- ds-none
- omni-none
- eucm-none
最后两个相机都是使用的pinhole-radtan
。
在第一次执行标定时,系统报了找不到igraph的错误,通过
pip install python-igraph
解决。
由于使用的相机image size非常小(320x240),标定过程很快,大概一分钟就完成了1600幅图的处理(左右各800幅图)。结果和之前用ROS camera_calibration很接近。
下一步
接下来是要标定IMU+camera。这个估计要等明天了。
20200722更新
系统升级为Ubuntu 18.04 + ROS melodic。运行kalibr时遇到
edge_label=self.G.es["weight"],
KeyError: 'Attribute does not exist'
为结尾的报错信息,和下方的python2.7 import错误
ImportError: cannot import name NavigationToolbar2Wx
解决方案都在kalibr的Github issue 页面找到了。
https://github.com/ethz-asl/kalibr/issues/364
https://github.com/ethz-asl/kalibr/issues/202