事件相机的标定方法有很多,我介绍的这一种并不是最优的。该方法主要依照uzh发布的e2calib代码。步骤如下:
一、首先使用事件相机拍摄标定版,并将输出的事件流录制成rosbag。如下图:
这里插入一下inivation事件相机ros包的使用和事件流的录制:
1、事件相机必要依赖安装(我使用的是inivation的DAVIS346-color相机)
For ubuntu-18.04
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo add-apt-repository ppa:inivation-ppa/inivation-bionic
sudo apt update
sudo apt install dv-processing dv-runtime-dev gcc-10 g++-10
For ubuntu-20.04
sudo add-apt-repository ppa:inivation-ppa/inivation
sudo apt update
sudo apt install dv-processing dv-runtime-dev gcc-10 g++-10
sudo apt install python3-catkin python3-catkin-tools ros-noetic-catkin ros-noetic-camera-info-manager
2、git clone dv-ros的代码并编译(inivation相机的ros包)
mkdirs catkin_ws/src
cd catkin_ws/src
git clone https://gitlab.com/inivation/dv/dv-ros.git
cd ..
catkin build --cmake-args -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10
3、执行命令,可视化事件相机的事件帧和图像帧(有些相机可能没有图像)
source devel/setup.bash
roslaunch dv_ros_visualization event_visualization.launch
执行结果如下图:
4、录制事件
在上一步roslaunch之后会产生如下的rostopic
录制/capture_node/events话题
rosbag record /capture_node/events
二、将录制的rosbag转为.h5格式的文件
这一步的初始代码来自uzh的e2calib,但是在这吐槽一下,uzh不维护代码,代码运行上有很多坑。所以我们使用HKUSTGZ的可执行版本。
1、配置环境(全程可在anaconda的虚拟环境中运行下面的所有代码,不必按照uzh所说的rosbag转为.h5文件不得在anaconda中进行之言)
conda create -n e2calib python=3.7
conda activate e2calib
conda install anaconda numpy scipy
conda install conda-forge h5py opencv tqdm
conda install pytorch torchvision cudatoolkit=$cuda_version
pip install rosbag
#pytorch的安装以pytorch官网的安装方法为依据
rosbag安装和使用过程中可能会出现问题,解决方法可参照import rosbag报错解决方法
2、文件转换
在上述创建的虚拟环境中执行以下命令:
python convert.py --input_file test.bag --output_file test.h5 --ros_topic /davis/events
--input_file是rosbag文件的地址
--output_file是输出.h5文件的地址(注意一定要……/test.h5形式)
--ros_topic是指rosbag中需要转换的事件流的话题名
三、将.h5文件经过上采样等处理得到图像(通过e2vid离线模型输出)
1、环境配置
由于第二步配置环境时已经完全配完,所以后续步骤依旧是在第二步的虚拟环境中进行
2、输出图像
在使用offline_reconstruction.py进行图像重建时,需要修改代码(下图第144-145行)。这样就可以使用原始事件流的时间戳作为重建图像的文件名。
#with trigger
python offline_reconstruction.py --h5file test.h5 --output_folder path_to_folder --timestamps_file trigger_format.txt --upsample_rate 4 --height 260 --width 346
#without trigger
python offline_reconstruction.py --h5file xxx.h5 --output_folder path_to_folder --freq_hz 5 --upsample_rate 4 --height 260 --width 346
--h5file是需要处理的.h5文件的地址
--output_folder是输出图片的地址
--timestamps_file是时间戳文件地址
--freq_hz是帧率
--upsample_rate是上采样率
--height和--width分别是图像的高和宽
3、最后输出图像重建结果如下所示(取其中几张):
四、对输出的图像使用kalibr进行标定
1、将图片转换为rosbag
python images_to_rosbag.py --rosbag_folder /img_out --image_folder /e2calib --image_topic /dvs/image_reconstructed
2、使用kalibr标定(注意:如果使用kalibr标定,则将重建代码的参数--freq_hz设置在4及以下)
python kalibr_calibrate_cameras --target /checkerboard.yaml --bag /img_out/reconstruction.bag --models pinhole-equi --topics /dvs/image_reconstructed
Attention:
运行失败时可以尝试以下两个命令
source devel/setup.bash
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7