Cartographer 生产落地案例
五、生产落地案例
案例一:商场清洁机器人的全楼层建图与跨楼层定位。背景是一台商用清洁机器人,需要在一栋有六层、每层上万平米的商场里自主作业。做法分两步:先用一台带 IMU 与轮式里程计的手推式采集车逐层走一遍,每层单独跑一条 Cartographer 轨迹并各自保存为独立的 pbstream;机器人实际作业时按电梯位置切换到对应楼层的地图做纯定位。关键配置有三处:把 TRAJECTORY_BUILDER_2D.max_range 按实际激光指标收到一个保守值以剔除无效远距读数;把 motion_filter.max_distance_meters 调小,保证在商场这种大幅度长距离行走中节点不会过稀;纯定位时把 pure_localization_trimmer.max_submaps_to_keep 设为 3,控制内存占用。效果是每层地图拼接处没有出现错层,机器人在长廊里连续运行数小时不出现整体漂移。踩到的坑是商场地砖在大理石区域高度反光,激光在地面附近产生一圈虚假点,导致机器人以为自己前方有障碍,最终通过把 min_range 略微上调并调整雷达安装倾角解决;另一个坑是手推采集车的轮径与实际机器人不同,导致 use_odometry = true 时里程计尺度有偏差,改成采集与分析分离、纯定位时降低里程计权重后才稳定。
案例二:仓储 AGV 的窄通道建图与单机重复部署。背景是电商仓的窄通道货架区,通道宽度只比 AGV 宽出很小余量,两侧是金属货架,激光多次反射严重。做法是用 2D 激光加 IMU 建图,把 submaps.num_range_data 从默认量级下调,让子图更小更局部化,从而在窄通道这种小范围内也能形成有效的回环约束;同时把 ceres_scan_matcher 中空闲空间项的权重适当调低,减少对反射点的过拟合。效果是通道内轨迹与货架列线基本平行,AGV 沿预定路径行驶时不会因为地图错位而反复急停。踩到的坑主要有两个:一是金属货架造成的多次反射点被当作真实障碍写入栅格,后来通过在配置文件里限制 missing_data_ray_length 并配合雷达自带的滤波参数缓解;二是多台 AGV 共用同一份配置文件,但每台的雷达安装角度有微小差异,导致其中一台定位时频繁丢失,最终为每台设备单独生成一份配置文件,把雷达外参按实测值写入。
两个案例的共性是:Cartographer 本身的默认配置已经能覆盖大部分室内场景,真正决定项目成败的是传感器安装的一致性、地图的版本管理,以及纯定位模式下的参数收紧。建议在项目里建立一条纪律——每次改雷达安装、改底盘、改货架布局,都要重新标定外参并重建地图,不要让旧地图去适配新硬件。

