
1. 合并不是叠点云
单次轨迹建图相对干净——一条时间线、一套参数、一个坐标系。多会话(multi-session)意味着不同天、不同机器人、不同光照甚至不同传感器配置。合并是在位姿图插入跨会话约束——任何一条错误约束都可能把历史地图拧坏。KPI 是 overlap 区几何一致,不是合并了多少点云体积。
2. 子图与锚点
每个会话维护局部子地图和锚定位姿:
Session A: { submap_1, submap_2, ... } anchored at T_A
Session B: { submap_1, submap_2, ... } anchored at T_B合并估计会话间变换 ,把 B 挂到 A:
Cartographer submap、ORB-SLAM3 Atlas、LIO-SAM keyframe pose graph 思路相同。锚点策略:通常固定第一会话不动,后续 relative 挂接——避免整图被新噪声拖垮。
3. 跨会话回环
描述子库须跨会话可检索:视觉 DBoW2、激光 Scan Context / Iris。候选 来自不同会话 → 几何验证仍用 RANSAC + PnP / ICP。
额外风险:光照/季节变化降召回;动态物体降内点率;单目尺度不一致(Session A scale ≠ Session B)→ 需 Sim(3) 对齐而非 SE(3)。跨会话描述子库要在合并前单独测 recall——「Session B 能召回 Session A 的 80% 共视帧」比合并后看 ATE 更早暴露外观漂移问题。
4. 两阶段合并与保护旧会话
1. 粗对齐:手动初值 / GPS / 共同 landmark / ICP 全局
2. 跨会话回环 → PGO(Session B 锚点 + 跨会话边)
3. 可选:重叠区联合 Local BA保护旧会话:旧 keyframe 部分 fix 或强先验;新边保守信息矩阵;switchable constraints 保护历史。合并不是 deterministic snap——应传播不确定度,重叠区检验点云 distance / 重投影 error。冲突时删可疑跨会话边,不要强行 blend 地图。
5. 单目 Sim(3) 与重叠检验
两趟单目合并前必须估 session 间 Sim(3),不能只靠 SE(3) PGO。重叠区共视路标 + RANSAC Sim(3) 粗对齐,再插相对因子——否则第二趟地图被错误尺度拖成「薄纸」或「厚块」。
合并后在 overlap region 检查:点云 distance RMSE、自由空间是否冲突(A 可通行 B 障碍)、语义标签一致性(若有)。overlap 区人工走一圈看 wall double line 比看 ATE 数字更快发现 Sim(3) 或误回环。跨会话边插入 PGO 后,若最大位姿修正 > 0.5m,应人工复核该边而非直接发布地图——大修正可能是真回环,也可能是误匹配被优化器硬满足。
6. 多机器人与运维
- 时钟不同步 → 无法按时间关联,只能靠空间检索
- 传感器不同 → 跨模态回环(cam-lidar)更 fragile
- 通信带宽 → 只传 submap summary + descriptor
多机器人合并时,各机子图坐标系本就不共享—— 只能靠空间检索与几何验证估计,不能假设「同一 bag 时间对齐」。跨模态回环通过率低时,应优先统一传感器配置再谈合并,而不是反复调 DBoW 阈值。
保留每 session 独立 bag + submap,合并失败可 rollback 到 session 级,而不是整图重跑。B2B 交付里多 session 可能来自不同客户现场,合并前确认数据授权;描述子库跨 session 检索的日志避免写可识别客户信息——工程上常忽略,交付审核会卡。
7. 验收
- 跨会话回环:候选 / 验证通过 / 误匹配(需标注)
- 合并前后 overlap ATE/RPE
- PGO 后最大位姿修正量
- 单目 Sim(3) vs 双目 SE(3) 对齐方式
- 合并后 Nav2 自由空间连通性
多会话合并的契约是跨会话因子质量;一条错边比十条里程计边破坏力大得多。合并后若 Nav2 全局规划偶发「无路径」,先查 overlap 区自由空间是否被双墙夹死,再查 planner——很多「合并成功、导航失败」是几何一致性问题,不是 costmap 参数问题。Session 级 rollback 能力应在合并流水线里一键可用,而不是事后手工删边。
相关
也可以看看
johan's blog