-
Notifications
You must be signed in to change notification settings - Fork 419
VSLAM之相机标定篇
本篇主要介绍相机的类型,标定过程及标定结果。相机类型包含双目和RGBD相机,分别选用了MYNTEYE
S1030-ir和realsense D435i两款
参照小觅标准版官方标定过程
双目选用的款式为小觅的标准款,从官方github下载SDK,并进行编译:
make init
make all
编译完成后便可运行相应的测试例程
./samples/_output/bin/camera_with_junior_device_api`
或者运行ROS:
roscore
启动相机节点:
source ./wrappers/ros/devel/setup.bash
roslaunch mynteye_wrapper_d mynteye.launch
需要注意的是,如果选用的是小觅相机带红外的的标准款,则在image_raw图像中会出现一些条纹,可能会影响标定效果,需要设置参数进行修改,标准版的参数保存在路径
MYNT-EYE-S-SDK/wrappers/ros/src/mynt_eye_ros_wrapper/config/device/standard.yaml
文件中,可以对其中参数进行修改。将ir_control设置为0便可对其关闭,同时对于标定,可以将相机图像帧率进行降低,此处降至最低10hz
按照官方安装教程对kalibr进行源码编译
- 安装ROS,在此不再赘述
- 安装和编译依赖
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo pip install python-igraph --upgrade
需要注意的是,官方安装教程较老,使用的ROS版本还是Indigo,所以需要将其替换为melodic,同时删除python-software-properties,因为新版系统也没有该软件可供安装。
- 创造工作空间
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/indigo/setup.bash
catkin init
catkin config --extend /opt/ros/indigo
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
- 刷新工作空间
source ~/kalibr_workspace/devel/setup.bash
参照多相机标定的官方例程对双目相机的内参和外参进行标定,Kalibr是使用ROSBAG进行标定的,所以首先采集图像。
- 图像采集
将相机固定,移动标定板以获得标定图像,官方建议降低图像发布频率到4hz,使用ros throttle的工具可以实现对两个相机分别降频,但问题在于经过实测,这样降低频率会造成双目图像不同步,如下图所示:
所以在此不建议采用此方法,本次标定使用的方法是修改上述配置参数的方式,虽然只能降低至最低10hz,经测试并不影响效果,但实现了毫秒级同步,这个同步效果对标定而言很理想:
rosbag record /mynteye/left/image_w /mynteye/right/image_raw -O stereo_calibration.bag
其中输入参数为左右目相机topic和保存的rosbag文件名
- 进行标定
标定需要的文件:
-
包含数据的rosbag
-
所有相机的topic,要与--models中的顺序对应
-
相机的畸变模型,kalibr所支持的畸变模型
-
标定版参数。此处使用的方格(checkboard)标定版,需要设置角点的xy方向的数量及方格尺寸:
#Accelerometers accelerometer_noise_density: 0.02680146180736048 #Noise density (continuous-time) accelerometer_random_walk: 0.0026296086159332804 #Bias random walk #Gyroscopes gyroscope_noise_density: 0.008882328296710996 #Noise density (continuous-time) gyroscope_random_walk: 0.00037956578292701033 #Bias random walk rostopic: /mynteye/imu/data_raw #the IMU ROS topic update_rate: 200.0 #Hz (for discretization of the values above)
运行如下命令进行标定
cd ~/kalibr_workspace
source devel/setup.bash
kalibr_calibrate_cameras --bag /home/colin/datasets/stereo_calibration.bag --topics /mynteye/left/image_raw /mynteye/right/image_raw --models pinhole-radtan pinhole-radtan --target /home/colin/datasets/checkerboard.yaml
- 输出文件
- report-cam-%BAGNAME%.pd:标定完成后数据会生成PDF文件,从重投影误差的效果来看标定的比较好。
- results-cam-%BAGNAME%.txt:结果总结
- camchain-%BAGNAME%.yaml:相机内参外参畸变系数结果,此文件用于下一步camera-imu的标定
此处需要使用IMU的datasheet进行设定,因暂时未查到,使用kalibr默认配置
- 数据采集
使用官方推荐的频率设置,IMU200hz,图像20hz,录制rosbag:
rosbag record -O dynamic /mynteye/left/image_raw /mynteye/right/image_raw /mynteye/imu/data_raw
- 进行标定
kalibr_calibrate_imu_camera --target /home/colin/datasets/checkerboard.yaml --cam /home/colin/datasets/second/camchain_stereo_mynt.yaml --imu /home/colin/datasets/second/imu.yaml --bag /home/colin/datasets/dynamic.bag --bag-from-to 1 105
- 输出文件
感谢使用Prometheus自主无人机软件平台!