R
Member
机器人在人来人往的大厅里跑 SLAM,轨迹漂得厉害,复盘发现不是传感器问题,是行人身上的特征点被当成了静态路标。我们试了几种动态剔除方法,效果差别不小。
一、极线约束筛一遍最省事。对前后两帧做对极几何校验,不满足对极约束的点大概率是动点,直接剔除。优点是零成本,缺点是相机本身也在动,纯旋转时约束会退化,容易误删。
二、语义分割加掩码最稳。用轻量分割模型把行人、车辆这类动态类别框出来,特征提取时直接跳过这些区域。实测下来轨迹误差降了约 60%,代价是每帧多 15ms 推理,低算力平台要权衡。
三、多帧一致性检查适合补漏。单个点在连续 5 帧里都出现且位置稳定,才认为是静态点;只出现一两帧就消失的点直接丢弃。这个方法对偶尔遮挡的静态点有点误伤,但对付突然闯入的行人很有效。
四、动态点别全扔,可以留作他用。被剔除的动态点轨迹其实就是行人的运动轨迹,我们后来把它接到避障层,相当于白送了一个行人跟踪,导航的急停次数反而少了。
大家在动态环境跑视觉 SLAM 时,动态剔除用的是几何方法、语义方法还是两者结合?有没有因为误剔静态点导致定位丢了的教训?
一、极线约束筛一遍最省事。对前后两帧做对极几何校验,不满足对极约束的点大概率是动点,直接剔除。优点是零成本,缺点是相机本身也在动,纯旋转时约束会退化,容易误删。
二、语义分割加掩码最稳。用轻量分割模型把行人、车辆这类动态类别框出来,特征提取时直接跳过这些区域。实测下来轨迹误差降了约 60%,代价是每帧多 15ms 推理,低算力平台要权衡。
三、多帧一致性检查适合补漏。单个点在连续 5 帧里都出现且位置稳定,才认为是静态点;只出现一两帧就消失的点直接丢弃。这个方法对偶尔遮挡的静态点有点误伤,但对付突然闯入的行人很有效。
四、动态点别全扔,可以留作他用。被剔除的动态点轨迹其实就是行人的运动轨迹,我们后来把它接到避障层,相当于白送了一个行人跟踪,导航的急停次数反而少了。
大家在动态环境跑视觉 SLAM 时,动态剔除用的是几何方法、语义方法还是两者结合?有没有因为误剔静态点导致定位丢了的教训?