
本周一直在加班项目能不能如期交付还是个问题......本周值得积累和深挖的问题有两个记录下来方便日后翻阅也希望能帮到同样在 ROS 路上摸索的朋友。问题一~/.colcon/defaults.yaml是什么文件一句话概括这是colcon 构建工具的默认参数配置文件用来给 colcon 的各个命令如build、test设置默认参数避免每次构建都要手动输入一长串选项。背景知识在 ROS 2 中colcon是官方的构建工具相当于 ROS 1 中的catkin_make/catkin build。每次编译时我们可能都需要敲colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease如果每天都这样敲既繁琐又容易遗漏。defaults.yaml就是来解决这个问题的——把这些常用参数写进配置文件以后直接colcon build即可自动生效。文件位置默认路径为~/.colcon/defaults.yaml即环境变量COLCON_HOME指向的目录下的defaults.yaml。配置示例build: symlink-install: true # 使用符号链接安装Python文件改动后无需重新编译 cmake-args: - -DCMAKE_BUILD_TYPERelease # Release模式编译提升运行性能 test: event-handlers: - console_cohesion # 测试结果汇总输出更直观配置后以后只需运行colcon build效果就等同于带上了配置中的所有参数。注意事项顶层 key 是 colcon 的verb如build、test、test-result必须与 colcon 支持的命令名对应。参数名与命令行参数保持一致只是去掉了--前缀。文件格式是标准的 YAML注意缩进规范写错了会报错。问题二什么是 AMCL 的粒子贫化一句话概括粒子贫化Particle Impoverishment / Particle Depletion是指在粒子滤波定位过程中经过多轮重采样后粒子群中的粒子越来越雷同多样性丧失导致滤波器失去纠错能力和鲁棒性的现象。产生原因AMCL 的核心是蒙特卡洛粒子滤波用一堆粒子表示机器人可能位姿的概率分布。每轮迭代包含三个步骤预测根据运动模型传播粒子更新根据传感器观测计算每个粒子的权重重采样按权重重新抽取粒子——高权重粒子被复制低权重粒子被淘汰。问题就出在重采样这一步经过多次迭代后存活的粒子往往都是少数几个祖先粒子的复制品粒子群的多样性急剧下降。当机器人定位收敛后几乎所有粒子都挤在一个很小的区域且大量粒子完全相同。带来的危害失去多假设跟踪能力粒子都收敛到一个位姿后无法同时维护多个可能的位姿假设。绑架问题难以恢复机器人被绑架人为搬移到别处后如果粒子全部贫化在错误位置滤波器没有多余的粒子去覆盖真实位姿定位彻底失效。过度自信协方差估计过小一旦实际位姿偏离无法纠正。AMCL 的应对策略① KLD 自适应采样AMCL 的A——Adaptive 的由来根据粒子分布的不确定性动态调整粒子数量不确定性大时多用粒子收敛后减少粒子既保证多样性又节省算力。相关参数min_particles: 500 # 粒子数下限 max_particles: 2000 # 粒子数上限 kld_err: 0.05 # KLD采样误差阈值 kld_z: 0.99 # 置信度参数② 注入随机粒子恢复机制AMCL 维护粒子平均权重的快慢两个指数滑动平均当快平均显著低于慢平均说明当前粒子群整体匹配度骤降可能被绑架或贫化就随机注入一批新粒子重新探索状态空间recovery_alpha_slow: 0.001 # 慢平均衰减系数 recovery_alpha_fast: 0.1 # 快平均衰减系数