(1)数据集介绍:
如图-1所示,KITTI数据集的数据采集平台装配有2个灰度摄像机,2个彩色摄像机,一个Velodyne 64线3D激光雷达,4个光学镜头,以及1个GPS导航系统。具体的传感器参数如下[2] :
图-2所示为传感器的配置平面图。为了生成双目立体图像,相同类型的摄像头相距54cm安装。由于彩色摄像机的分辨率和对比度不够好,所以还使用了两个立体灰度摄像机,它和彩色摄像机相距6cm安装。为了方便传感器数据标定,规定坐标系方向如下[2] :
• Camera: x = right, y = down, z = forward
• Velodyne: x = forward, y = left, z = up
• GPS/IMU: x = forward, y = left, z = up
从KITTI主页可以发现,KITTI数据集主要包括三个部分,相机和激光数据,calibration文件,groundtruth位置。如何明白三个部分的数据构成和参数意义,将会是我们使用KITTI数据的关键。
1. 从KITTI数据到rosbag
为了在机器人导航系统中方便测试,先将KITTI图片数据转到ROS系统兼容的rosbag文件,以便于做出一个通用的数据集借口进行测试。
2. groundtruth真实地图
poses文件其实已经很方便的展示了相机的位姿,为了全面,也为了记录自己遇到问题过程,依然附上完整解释。
3. calib 相机参数
描述了相机的参数,以及传感器之间的关系,理解参数将有利于用于其他SLAM系统中,比如DSO,SVO,ORB-SLAM。
在calib文件中,有sequence 00-21序列,包括calib.txt 和 times.txt文件。
在sequence calib.txt 中,
P0: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 0.000000000000e+00 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 P1: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 -3.861448000000e+02 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 P2: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 4.538225000000e+01 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 -1.130887000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 3.779761000000e-03 P3: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 -3.372877000000e+02 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 2.369057000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 4.915215000000e-03 Tr: 4.276802385584e-04 -9.999672484946e-01 -8.084491683471e-03 -1.198459927713e-02 -7.210626507497e-03 8.081198471645e-03 -9.999413164504e-01 -5.403984729748e-02 9.999738645903e-01 4.859485810390e-04 -7.206933692422e-03 -2.921968648686e-01
0,1,2,3 代表相机的编号,0表示左边灰度相机,1右边灰度相机,2左边彩色相机,3右边彩色相机。Tr表示将velodyne坐标系转换到左边相机系统坐标
根据calib.txt相机投影矩阵可以得到相机内参
b(i) 代表其他相机相对于cam 0的偏移。
故此可以得到相机参数:内参矩阵:
fu = 718.856
fv = 718.856
cu = 607.1928
cv = 185.2157
(2)KITTI image 序列转为rosbag 文件
利用python将kitti的数据转为rosbag, 仅测试于grayscale数据集,测试过程如下.
python代码请见:
http://git.oschina.net/taiping.z.git/image2rosbag_KITTIodometry
1. 在KITTI网页下载odometry dataset (grayscale, 22GB), 并解压.
2. 指定image路径, 生成的bag名,时间戳路径, 然后运行.
python img2bag_kitti_odo.py /your directory/KITTI/dataset/sequences/00/image_0 kitti_00_l.bag /your directory/KITTI/dataset/sequences/00/times.txt
3. 查看rosbag,并测试结果
查看rosbag
rosbag info image_0 kitti_00_l.bag -------- path: kitti_00_l.bag version: 2.0 duration: 7:50s (470s) start: Jan 01 1970 08:00:00.00 (0.00) end: Jan 01 1970 08:07:50.58 (470.58) size: 2.0 GB messages: 4541 compression: none [2271/2271 chunks] types: sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743] topics: camera/image_raw 4541 msgs : sensor_msgs/Image
在ORBSLAM2上测试
rosbag play --pause kitti_00_l.bag rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml
注意此处我们已经将rostopic设置为了camera/image_raw
.
update Sep.23 2017
4. image to compressed image
压缩图片以便存储
rosrun image_transport republish raw in:=(in_base_topic) compressed out:=(out_base_topic)
image_transport republic 压缩或者解压视频信息存储在rosbag.