如果您在学术研究中使用了该代码,请引用下列工作:
Manasi Muglikar, Mathias Gehrig, Daniel Gehrig, Davide Scaramuzza, "How to Calibrate Your Event Camera", Computer Vision and Pattern Recognition Workshops (CVPRW), 2021
@InProceedings{Muglikar2021CVPR,
author = {Manasi Muglikar and Mathias Gehrig and Daniel Gehrig and Davide Scaramuzza},
title = {How to Calibrate Your Event Camera},
booktitle = {{IEEE} Conf. Comput. Vis. Pattern Recog. Workshops (CVPRW)},
month = {June},
year = {2021}
}
原仓库中支持了三种事件文件的格式,这里仅介绍ROS包格式(dvs_msgs)的依赖安装和使用。想了解另外两种格式的可以参考原仓库
安装过程总共分为两步(默认已安装了ROS):
- 因为兼容性的问题,需要在原始环境(不能是虚拟环境)中安装转换代码的依赖包。
- 在conda环境中安装图像恢复代码的依赖包。
pip3 install --no-cache-dir -r requirements.txt # 请在克隆的本仓库路径下执行
pip3 install dataclasses # 如果你的python版本小于3.7
pip3 install --extra-index-url https://rospypi.github.io/simple/ rospy rosbag
首先需要安装anaconda,可参考链接。
然后执行下述,cuda请根据显卡驱动版本进行安装,对应关系可参考链接。
cuda_version=10.1
conda create -y -n e2calib python=3.7 # 创建e2calib的conda虚拟环境
conda activate e2calib
conda install -y -c anaconda numpy scipy
conda install -y -c conda-forge h5py opencv tqdm
conda install -y -c pytorch pytorch torchvision cudatoolkit=$cuda_version
pip install python/ # 请在克隆的本仓库路径下执行,这一步是为了安装e2vid
图像恢复代码通过E2VID将h5格式文件中的事件恢复成灰度图像。
为了将结果输入kalibr (多相机和IMU标定包),还需要将恢复的图像转换为rosbag,因此还需要在原始环境中安装以下依赖:
pip3 install tqdm opencv-python opencv-contrib-python
pip3 install --extra-index-url https://rospypi.github.io/simple/ sensor-msgs
请参考kalibr官方安装手册
标定分为四步:
- 将rosbag转换为常规hdf5格式的文件。
- 将(1)生成的h5文件以固定频率实现图像恢复,这一步需要之前构建的
e2calib
环境。 - 将恢复图像和IMU信息合成rosbag
- 使用
kalibr
对(3)生成的rosbag进行标定
注意:除步骤(2)之外,其他python环境使用的都是原始环境。
cd python/ # 请在克隆的本仓库路径下执行
python3 convert.py ${rosbag名(含路径)} -o ${h5文件名(含路径)} -t ${事件在rosbag中的topic}
cd python/ # 请在克隆的本仓库路径下执行
python3 offline_reconstruction.py --h5file ${h5文件名(含路径)} --freq_hz ${保存图像的频率} --upsample_rate ${上采样率} --height ${图像高度} --width ${图像长度}
上采样率:举个例子,若freq_hz
设置为5,upsample_rate
设置为4,则生成图像频率为5hz,生成图像的窗长为
建议将freq_hz
设置为5,upsample_rate
设置为4。
图片会被默认保存至${e2calib}/python/frames/e2calib
路径
由于可能需要进行外参标定,所以建议使用kalibr的bagcreater,以下以两个相机+一个IMU举个例子:
保存路径设置为
+-- dataset-dir
+-- cam0
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
+-- cam1
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
\-- imu0.csv
imu0.csv文件应使用以下格式:(timestamps=[ns], omega=[rad/s], alpha=[m/s^2])
timestamp,omega_x,omega_y,omega_z,alpha_x,alpha_y,alpha_z
1385030208736607488,0.5,-0.2,-0.1,8.1,-1.9,-3.3
...
1386030208736607488,0.5,-0.1,-0.1,8.1,-1.9,-3.3
通过以下命令合成rosbag(请先source kalibr工作空间的环境变量)
rosrun kalibr kalibr_bagcreater --folder dataset-dir/. --output-bag ${rosbag名}
按照上述得到的rosbag话题名为:
- /cam0/image_raw
- /cam1/image_raw
- /imu0
请参考kalibr的wiki。