4. 传感器数据基础

SLAM前端里程计的本质,是把不同传感器采集到的原始观测转换成“位姿增量”的估计。不同传感器的数据格式、坐标系约定、时间戳语义和噪声模型差异极大,如果对这些基础特性理解不清,后续的扫描匹配、点云配准、预积分和融合都会出现难以定位的误差。本节从数据格式与噪声特性两个维度,梳理四类常用传感器的关键要点。

一、四类传感器的数据格式与坐标系

激光雷达输出的是距离测量集合。2D激光雷达通常以极坐标形式给出每个角度上的距离,转换为笛卡尔坐标后形成平面点云;3D激光雷达则输出带强度信息的三维点云,常见格式为 PointCloud2,字段包括 x, y, z, intensity, ring, time。RGB-D相机同时输出彩色图像、深度图像和相机内参,深度图每个像素对应一个深度值,需通过内参反投影为点云。IMU输出三轴线加速度与三轴角速度,部分器件还提供磁力计和姿态四元数。轮式里程计则通过编码器脉冲累计得到左右轮位移,再依据运动学模型解算为平面位姿增量。

坐标系是数据格式中容易被忽视却极其关键的部分。激光雷达数据通常定义在 laser 或 lidar 坐标系下,RGB-D相机数据定义在 camera 坐标系下,IMU定义在 imu 坐标系下,轮式里程计定义在 odom 坐标系下。所有传感器数据在进入前端里程计前,必须通过外参标定统一到同一参考坐标系,否则点云配准会出现系统性偏差。

四类传感器数据格式与噪声特性对照 2D 激光雷达 数据:极坐标 (r, θ) 格式:LaserScan 字段:ranges[], angle_min 坐标系:laser 噪声:测距误差 ±2cm 角度分辨率 0.25°~1° 镜面/黑色物体丢失 3D 激光雷达 数据:三维点云 (x,y,z) 格式:PointCloud2 字段:x,y,z,intensity,ring 坐标系:lidar 噪声:测距 ±3cm 运动畸变(旋转/平移) 雨雾/灰尘产生噪点 RGB-D 相机 数据:RGB图 + 深度图 格式:Image + CameraInfo 字段:fx,fy,cx,cy 坐标系:camera 噪声:深度随距离增大 结构光/ToF 多路径误差 透明/反光表面失效 IMU / 轮式里程计 IMU:a_x,a_y,a_z,ω_x,ω_y,ω_z 格式:Imu / Odometry 轮速:v_l, v_r → v, ω 坐标系:imu / odom IMU:零偏 + 随机游走 轮式:打滑 + 标定误差 积分漂移随时间累积 时间戳与同步:前端里程计的生命线 • 每个传感器数据必须携带精确时间戳(header.stamp),用于运动补偿与多传感器对齐 • 激光雷达帧内各点时间不同 → 需去畸变;IMU频率高(100~1000Hz)→ 用于插值位姿 噪声特性对前端里程计的影响 • 激光雷达:测距噪声近似高斯分布,可用统计滤波去除离群点;运动畸变需用IMU或匀速模型补偿 • RGB-D:深度噪声随距离平方增长,远距离点云不可靠,需设置有效深度范围(如0.3~5m) • IMU:零偏需在线估计,随机游走导致积分漂移;轮式里程计打滑时方差骤增,需鲁棒核函数抑制

二、噪声特性与误差来源

激光雷达的测距噪声通常近似为高斯分布,但存在两类非高斯误差:一是运动畸变,即雷达旋转或平台移动过程中,同一帧内不同时刻采集的点不在同一坐标系下,表现为点云“拖尾”;二是环境噪声,如玻璃、镜面、黑色物体导致回波丢失或测距异常。3D激光雷达还存在垂直角分辨率带来的稀疏性问题,远处地面点间距可达数十厘米。

RGB-D相机的深度噪声与距离强相关。结构光相机在近距离精度较高,但随距离增加误差迅速增大;ToF相机在远距离仍有较好表现,但存在多路径干扰。透明物体、反光表面和黑色吸光材质会导致深度缺失或跳变。此外,RGB与深度图之间的对齐误差、卷帘快门效应也会引入额外噪声。

IMU的噪声模型包含两部分:确定性误差(零偏、尺度因子、轴间不对准)和随机误差(高斯白噪声、零偏随机游走)。零偏会随时间缓慢变化,必须在线估计;随机游走导致角速度和加速度积分后位姿漂移随时间累积,因此IMU通常只用于短时高频位姿预测,需与其他传感器融合校正。

轮式里程计的误差主要来自轮径标定不准、轮距标定误差、地面打滑和轮胎形变。在光滑地面或急转弯时,打滑会使里程计读数严重偏离真实运动,表现为位姿协方差急剧增大。因此轮式里程计适合作为低频、平滑的运动先验,而不适合单独承担长距离定位。

三、典型数据格式与参数示例

以下以ROS中常见消息格式为例,展示关键字段与典型参数:

# 2D LaserScan 关键字段
angle_min: -3.14159
angle_max:  3.14159
angle_increment: 0.00436   # 约0.25°
range_min: 0.05
range_max: 30.0
ranges: [1.23, 1.25, ...]  # 每个角度的距离

# 3D PointCloud2 关键字段
fields: x, y, z, intensity, ring, time
point_step: 32
is_dense: false

# IMU 关键字段
linear_acceleration: {x, y, z}
angular_velocity:    {x, y, z}
orientation_covariance: [...]

# 轮式里程计
pose.pose.position: {x, y, z}
pose.pose.orientation: {x, y, z, w}
twist.twist.linear.x: v
twist.twist.angular.z: ω

四、误区与复盘

常见误区一:忽略时间戳同步。激光雷达与IMU时间戳未对齐时,运动补偿会引入系统性偏差,表现为建图重影。务必检查各传感器时间戳是否来自同一时钟源,必要时做时间偏移标定。

常见误区二:直接用原始点云配准。未去畸变的3D点云在快速运动时配准误差显著增大。应先利用IMU或匀速模型做去畸变,再进行扫描匹配。

常见误区三:过度信任轮式里程计。在打滑场景下,轮式里程计方差应被动态放大,否则融合结果会被错误观测拉偏。

复盘建议:建立传感器数据质量检查清单——时间戳是否单调递增、点云是否有NaN、IMU零偏是否收敛、轮式里程计协方差是否合理。每次前端里程计出现异常时,先回查原始数据质量,再排查算法参数。

五、核心要点清单

传感器核心数据主要噪声前端使用方式
2D激光雷达距离+角度测距误差、角度分辨率扫描匹配、位姿增量
3D激光雷达三维点云+强度运动畸变、环境噪点点云配准、去畸变
RGB-D相机RGB+深度+内参深度随距离增大、多路径视觉里程计、点云生成
IMU加速度+角速度零偏、随机游走预积分、运动预测
轮式里程计轮速→位姿打滑、标定误差低频先验、融合约束

理解四类传感器的数据格式与噪声特性,是设计鲁棒前端里程计的前提。实际系统中,往往需要根据场景特点选择传感器组合,并针对各自噪声模型设计滤波、加权或鲁棒核函数,才能获得稳定可靠的位姿估计。