news 2026/9/8 15:54:57

ROS机器人-从零开始每日日志记录day11

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ROS机器人-从零开始每日日志记录day11

本周一直在加班,项目能不能如期交付还是个问题......
本周值得积累和深挖的问题有两个,记录下来方便日后翻阅,也希望能帮到同样在 ROS 路上摸索的朋友。


问题一:~/.colcon/defaults.yaml是什么文件?

一句话概括

这是colcon 构建工具的默认参数配置文件,用来给 colcon 的各个命令(如buildtest)设置默认参数,避免每次构建都要手动输入一长串选项。

背景知识

在 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(如buildtesttest-result),必须与 colcon 支持的命令名对应。
  • 参数名与命令行参数保持一致,只是去掉了--前缀。
  • 文件格式是标准的 YAML,注意缩进规范,写错了会报错。

问题二:什么是 AMCL 的粒子贫化?

一句话概括

粒子贫化(Particle Impoverishment / Particle Depletion)是指在粒子滤波定位过程中,经过多轮重采样后,粒子群中的粒子越来越"雷同",多样性丧失,导致滤波器失去纠错能力和鲁棒性的现象。

产生原因

AMCL 的核心是蒙特卡洛粒子滤波:用一堆"粒子"表示机器人可能位姿的概率分布。每轮迭代包含三个步骤:

  1. 预测:根据运动模型传播粒子;
  2. 更新:根据传感器观测计算每个粒子的权重;
  3. 重采样:按权重重新抽取粒子——高权重粒子被复制,低权重粒子被淘汰。

问题就出在重采样这一步:经过多次迭代后,存活的粒子往往都是少数几个"祖先"粒子的复制品,粒子群的多样性急剧下降。当机器人定位收敛后,几乎所有粒子都挤在一个很小的区域,且大量粒子完全相同。

带来的危害

  • 失去多假设跟踪能力:粒子都收敛到一个位姿后,无法同时维护多个可能的位姿假设。
  • 绑架问题难以恢复:机器人被"绑架"(人为搬移到别处)后,如果粒子全部贫化在错误位置,滤波器没有多余的粒子去覆盖真实位姿,定位彻底失效。
  • 过度自信:协方差估计过小,一旦实际位姿偏离,无法纠正。

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 # 快平均衰减系数
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 15:54:12

单片机毕设选题推荐:基于 STM32 的 Android 蓝牙水产养殖远程监控系统设计与实现 基于 STM32 单片机的养殖定时投喂增氧控制系统设计(012307)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/8 15:52:23

腾讯云AI Skills实战:从设计到部署,构建稳定可用的业务Agent

腾讯云 AI Skills 这个词,最近在 Agent 开发圈子里被频繁提起。我花了两周时间,从读文档到搭出第一个能用的 Agent,再到现在跑在云上给业务干活,中间踩了不少坑,也理清了一些思路。这篇文章不聊虚的,就围绕…

作者头像 李华
网站建设 2026/9/8 15:52:10

AI编程助手集体宕机:如何搭建抗宕机的开发环境

1. 一次集体宕机,把我打回原形 那天下午三点,我正对着三个窗口来回切换:ChatGPT 在帮我设计一个消息队列的架构方案,Claude Code 在稳步重构一个 Python 微服务,Grok 在批量生成单元测试。说实话,这已经成了…

作者头像 李华
网站建设 2026/9/8 15:51:04

Spring Retry 源码解析与二次改造:从 RetryListener 到最终失败落库

什么是Spring Retry?Spring Retry帮你自动重试那些「这次失败、下次可能就成功」的操作,省得你手写循环。一、Spring Retry 有一个问题 问题:当一次重试流程最终仍然失败时,Spring Retry 默认并不会帮我们完成失败记录等后续处理…

作者头像 李华
网站建设 2026/9/8 15:51:00

把Windows 11系统砍掉一半:Tiny11Builder精简镜像上手指南

把Windows 11系统砍掉一半:Tiny11Builder精简镜像上手指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 原版Windows 11装完动辄超过25GB磁盘&#…

作者头像 李华