ROS机器人-从零开始每日日志记录day11
本周一直在加班,项目能不能如期交付还是个问题......
本周值得积累和深挖的问题有两个,记录下来方便日后翻阅,也希望能帮到同样在 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_TYPE=Release
如果每天都这样敲,既繁琐又容易遗漏。defaults.yaml 就是来解决这个问题的——把这些常用参数写进配置文件,以后直接 colcon build 即可自动生效。
文件位置
默认路径为 ~/.colcon/defaults.yaml,即环境变量 COLCON_HOME 指向的目录下的 defaults.yaml。
配置示例
build:
symlink-install: true # 使用符号链接安装,Python文件改动后无需重新编译
cmake-args:
- "-DCMAKE_BUILD_TYPE=Release" # 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 # 快平均衰减系数
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)