总览
数据集地址为:Complex Urban Dataset
论文中列举了一些其他的数据集的情况,如下图所示。相比于其他数据集,这个数据集会包含更复杂的场景,包括:多车道的马路、高楼大厦、密集分布的居民区。同时也包括一些具有挑战性的场景,如大楼阻挡后 GPS 信号消失等。
数据集中会包括两个 3D Lidar 和两个 2D Lidar。两个 3D Lidar 安装在车顶上车上的左右两侧(大概和车方向成 45°),以此来最大化覆盖范围。两个 2D 雷达分别安装车头和车尾,且朝向分别为朝下和朝上,同样也是为了数据覆盖的范围。同时为了估计汽车的位姿,还提供了一系列导航传感器,如光纤陀螺仪、IMU、GPS 和编码器。同时,数据集提供了使用导航传感器和 Lidar 以 SLAM 生成的汽车位姿作为 baseline,大致以 100 Hz 生成。以这个轨迹可以拼接点云生成 3D 地图,数据集中也提供了生成后的地图(以 las 格式)。可以使用 WebGL 应用查看。此外,数据集还提供了双目相机的数据作为额外补充。
数据集组成
数据采集车上配置的传感器以及采集车如下图所示:
不同模块的数据收集流程如下图所示,三台 PC 分别用于收集 Lidar、Camera 和导航数据,同一台 PC 的时间可以保持同步,而三台 PC 之间的时间也周期性的进行同步(所以可以认为所有数据的时间戳都是经过同步的):
这个数据提供了两个 3D Lidar(VLP-16),并设置以 10 Hz 的频率采集数据,此外还有两个 2D Lidar (SICK LMSS511) 以 100 Hz 收集数据。两个 2D Lidar 安装角度分别为向前和向后;向前的 Lidar 可以用来获取建筑物的结构和道路基础设施,向后的 Lidar 可以获取路面信息。此外,数据集中配备的双目相机可以以 10 Hz 获得前视图照片。
数据集中还包括两种精度的导航传感器,用来估计汽车姿态的传感器包括一个 IMU 和一个 3 自由度的光纤陀螺仪。其中,在 Baseline 中,光纤陀螺仪用来提供高精度旋转信息,而 IMU 可以获得多种信息,例如地磁信息、加速度以及角速度,但精度低于光纤陀螺仪。同样,数据集配有两个精度的 GPS 传感器,其中 VRS(Virtual Reference Station) GPS 通过和参考基站沟通且用来修正位置,全局位置精度大概为 10cm 以内。而消费级别的 GPS 没有类似的修正处理,因此误差可以达到几米。GPS 的测量值依赖卫星的数量以及周围的环境,在城市密集高楼下,VRS-GPS 也会较难估计位置。这个数据集还提供了一个轮式编码器来累计计算汽车行驶距离,以及一个高度传感器用来获取相对高度变化。
下图大致展示了,传感器之间的相对位置关系,传感器系统的中心在地面高度,位置在车子后轮轴的中心:
标定
标定包括:导航传感器标定、Lidar 标定、双目相机内外参标定
TODO
数据集说明
采集环境
数据集包括多样的城市环境,例如 10 车道的宽敞道路以及高楼之间的狭窄道路。下表列举了提供了不同序列及其平均 GPS 卫星数量、使用的传感器类型、以及汽车轨迹长度。
大致上,基于 GNSS 的建图系统需要 10 个以上的卫星才能实现比较精确的定位,但是在城市场景下基本很难达到,下图展示了序列 00 的轨迹,颜色表示该点平均接收到的卫星数量,可以看到只有少部分地区才能达到这个标准。
数据格式
数据集格式如下图所示,大致分为 4 个部分 calibration
包括所有传感器之间的外参标定结果、sensor_data
包含除相机图片以外的所有传感器信息,以及他们的时间戳,image
中包含双目相机的照片,vehicle_pose.csv
则是参考真值:
数据集中,
- 3D Lidar:VLP-16 数据以 10 Hz 采集,并将每一次旋转的结束时间作为该帧的参考时间戳记录。传感器数据保存在
time_stamp.bin
(文件名为该帧扫描对应的时间戳)。 二进制文件中,每个点包含三个笛卡尔坐标值以及一个反射值,即 (x, y, y, R),均为浮点数,笛卡尔坐标为 lidar 坐标系的局部坐标值。时间戳记录在VLP_left/right_stamp.csv
中。 - 2D Lidar: SICK LMS-511 以 100 Hz,数据存储在
SICK_Back/middle
文件夹中。每一帧扫描中的每个点保存了其原始消息,即距离和反射值,每一个光束对应的角度可以通过 LMS-511 的 FoV 和激光密度算出来。LMS-511 的 FoV 为 190°,从 -5° 到 185°,数据频率为 100 Hz,每两次测量之间角度差为 0.666°。 - 双目照片:双目照片采集频率为 10 Hz,以无损 PNG 格式保存,且没有经过校正,需要经过一定过程转化成校正后的 RGB 图像。
- 高度计数据:高度计信息保存在
altitude.csv
,格式为timestamp, altitude
- 编码器数据:编码器数据的保存格式为累计的脉冲数,保存在
encoder.csv
,格式为:timestamp, left count, right count
- FOG 数据:两次测量之间的相对旋转记录在
fog.csv
,格式为:timestamp, delta roll, delta pitch, delta yaw
- GPS 数据:消费级 GPS 的全局位置测量数据记录在
gps.csv
,格式为:timestamp, longtitude, altitude, 9-d vector
,最后 9d 向量为位置的方差 - VRS-GPS:高精度 GPS 测量值保存在
vrs_gps.csv
,保存格式为:timestamp
latitude, longtitude
x, y coordinate
:采用墨卡托投影计算的笛卡尔坐标值altitude
fix state
:一个数字用来表示当前 VRS GPS 的状态:(1 – normal, 2 – DGPS, 4 – fix, 5 – float)horizontal precision
latitude, longtitude std
heading validate flag
magnetic global heading
global heading
speed in knots
speed in km
GNVTG mode
orthometric altitude
- IMU 数据:相邻测量之间的旋转位姿、陀螺仪数据和线性加速度以及磁力计数据保存在
imu.csv
,格式为:timestamp
quaternion x/y/z/w
eular x/y/z
Gyro x/y/z
Acceleration x/y/z
MegnetField x/y/z
Baseline
由于在复杂环境下即使使用 VRS-GPS 也很难获得精确位置,这个数据集采用了 iSAM 的方法融合多个约束来进行位姿估计,其使用了以下约束:
- FOG 提供的相对旋转
- 编码器提供的相对运动距离
- VRS-GPS 在不确定度低时会用做部分约素
- 由于在高楼环境导致 GPS 信号不好时会降低精度,因此在序列中引入回环,在回环中通过 ICP 计算相对位姿获得回环约素
整体优化图如下所示:
产生的数据在 vehicle_pose.csv
,频率为 100 Hz。但是作者不建议用其来作为 ground truth,因为城市的复杂度会很大程度影响的精度。
WebGL 3D demo 和 LAS 数据
数据集中提供了由 baseline 轨迹拼接成的点云地图,以 las 格式存储,可以用来作为先验信息进行定位或者地点识别。该数据可以用 WebGL 应用可视化,下面是一个例子:
开发工具
数据集配套有两个开发工具:
- File Player:应用可以读取保存的
- Data Viewer:应用可以用来可视化数据,可以展示点云,图片以及导航信息。
下面是其中一个序列用 File Player
播放的 topic:
topics: /altimeter_data 3080 msgs : irp_sen_msgs/altimeter
/clock 29528 msgs : rosgraph_msgs/Clock
/dsp1760_data 307986 msgs : irp_sen_msgs/fog_3axis
/encoder_count 30798 msgs : irp_sen_msgs/encoder
/gps/fix 1540 msgs : sensor_msgs/NavSatFix
/imu/data_raw 30800 msgs : sensor_msgs/Imu
/imu/mag 30800 msgs : sensor_msgs/MagneticField
/lms511_back/scan 30750 msgs : irp_sen_msgs/LaserScanArray
/lms511_middle/scan 30750 msgs : irp_sen_msgs/LaserScanArray
/ns1/velodyne_points 3054 msgs : sensor_msgs/PointCloud2
/ns2/velodyne_points 3053 msgs : sensor_msgs/PointCloud2
/odom 30798 msgs : nav_msgs/Odometry
/rosout 23 msgs : rosgraph_msgs/Log (2 connections)
/rosout_agg 8 msgs : rosgraph_msgs/Log
/vrs_gps_data 308 msgs : irp_sen_msgs/vrs
/xsens_imu_data 30800 msgs : irp_sen_msgs/imu
大致上都比较清晰,每个传感器消息的帧id对其对应传感器 id,如 /ns1/velodyne_points
的 frame id 为 left velodyne
。其中,里程计信息由编码计算得到,发布的 frame id 为 map
, child_frame_id 为 baselink
。另外 baseline 的轨迹没有处理,所以如果需要的话需要自己写 node 进行发布。