赞
踩
在运行视觉SLAM程序时,总会要求输入一个校正文件。这次的目的就是要把里头的参数全部填满。需要标定的参数包括:相机内参fx,fy,cx,cy;相机镜头畸变k1,k2,p1,p2;IMU陀螺仪偏移,加速度计偏移;大概就这些。
这里使用的相机是zed-sdk相机。
标定流程:
1、打印标定板
标定板可以找合适的下载。标定板下载地址
2、录制视频
用zed相机自带tools,录制一段视频,视频会保存为svo文件。
3、安装Kalibr
zed相机自带标定程序(ubuntu默认在/usr/local/zed/tools里),这里是想和kalibr对比效果。Kalibr下载地址
4、安装zed-ros-wrapper
下载地址
5、视频打包
这里是指把zed录好的svo文件打成bag包,方便处理。
这里参考ZED2相机标定及运行VINS-mono
先打开一个终端
roscore
第二个终端,准备接收话题,注意这里接收的话题不是zed_wrapper发布的话题。录制结果保存在终端所在文件夹,结果文件名为Kalib_data_vga.bag。
这里还有一点,就是zed相机里有几个话题和原始图像对应,比如:
/zed2/zed_node/left/image_rect_color,这个话题也可以使用:分辨率没有发生变化,但是是对原始图像进行边缘裁剪后拉伸,这可能会导致丢失信息。
rosbag record -O Kalib_data_vga.bag \
/zed2/zed_node/imu/data_raw2 \
/zed2/zed_node/left_raw/image_raw_color2 \
/zed2/zed_node/right_raw/image_raw_color2
第三个终端,意外发现,原因不明,总之是为了让程序发布imu数据,不用imu可以无视。
rosrun rviz rviz
打开rviz以后,添加PointCloud2,Topic填为
/zed2/zed_node/point_cloud/cloud_registered
订阅了这个话题以后,就能正常接收imu数据了。还可以添加Image之类的,确保正常录制。
第四、五、六个终端,修改消息发布频率。
因为zed相机通常以60Hz左右的频率进行录制,而kalibr标定又要求频率不能过高,因此要降低原话题发布频率,参考降低图像数据到20Hz,IMU数据至200Hz,ros的做法是先订阅,然后重新发布。
rosrun topic_tools throttle messages /zed2/zed_node/imu/data_raw 200 /zed2/zed_node/imu/data_raw2
rosrun topic_tools throttle messages /zed2/zed_node/left/image_rect_color 20 /zed2/zed_node/left/image_rect_color2
rosrun topic_tools throttle messages /zed2/zed_node/right/image_rect_color 20 /zed2/zed_node/right/image_rect_color2
第七个终端,zed_wrapper发布话题,因为要用到imu,所以运行zed2.launch,等待录制完毕。
roslaunch zed_wrapper zed2.launch svo_file:=/path/to/xx.svo
用我的电脑一般需要重复录制两三遍,才能确认流畅录制,原因不明。
在kalibr文件夹下,执行单目标定,其中的checkboard.yaml表示同标定板一起下下来的参数文件。
第一个终端
roscore
第二个终端
source devel/setup.bash
kalibr_calibrate_cameras \
--bag /path/to/xxx.bag \
--topics /zed2/zed_node/left/image_rect_color2 \
--models pinhole-radtan \
--target /path/to/checkboard.yaml
1、安装imu_utils
下载地址
2、录制IMU数据
这里按照默认值需要录制两个小时的IMU数据,imu也不能动。参考ZED2相机标定及运行VINS-mono,录制结果保存在终端所在文件夹,结果文件名为imu_calibration.bag。
rosbag record -O imu_calibration /zed2/zed_node/imu/data_raw
3、标定
在imu_utils文件夹下打开终端,这里的ZED2_calibration.launch通过需要修改A3.launch得到。
source devel/setup.bash
roslaunch imu_utils ZED2_calibration.launch
这里表示按照0.5倍速播放bag,可以按照需要修改,不过尽量保证播放频率为400Hz。
rosbag play -r 0.5 imu_calibration.bag
这里会用到之前标定的结果,总之需要把相机和IMU的标定结果填到两个yaml文件里,文件格式参考https://github.com/ethz-asl/kalibr/wiki/yaml-formats。
不过相机的yaml文件可以直接用,文件在kalibr文件夹下;imu_utils得到的结果直接用avg-axis就可以。
执行联合标定
kalibr_calibrate_imu_camera \
--target /path/to/checkboard.yaml \
--bag /path/to/xxx.bag \
--cam /path/to/cam.yaml \
--imu /path/to/imu.yaml \
顺便一提,–imu-models scale-misalignment表示在bias+noise的模型基础上考虑scale和misalignment参数,zed相机可能用不上,参考【泡泡传感器评测】小觅双目摄像头D1000-IR-120/Color模组评测(中) 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。