跳转至

机器人控制系统的分层设计与算法选型方法

1. 本文要解决什么问题

战队里最常见的误判是:控制效果不好,就立刻讨论“要不要换更高级算法”。 这一步太快,通常会把问题越改越乱。

本文只讲一条能落地的主线: 先把参考做对,再判断 PID 够不够,最后才考虑 LADRC/ESO。

如果你把这条顺序反过来,常见结果是: - 参数越调越多 - 问题定位越来越慢 - 代码复杂度上去,但稳定性没上去


2. 四层架构:先分层,再谈算法

先记框架: 任务层 -> 参考生成层 -> 跟踪控制层 -> 执行与工程层

如果这四层你还没有分清,先看 01-重新理解控制论.md

这里不再展开讲“什么是四层”,只保留和选型直接相关的摘要:

层次 核心问题 典型内容
任务层 目标从哪里来 遥控器、导航、视觉、任务脚本
参考生成层 给控制器什么样的目标 限速、限加速度、轨迹规划、插值、TD
跟踪控制层 怎么让系统跟上目标 PID、LADRC、PID+前馈、PID+ESO
执行与工程层 真实系统会怎么破坏控制 饱和、摩擦、延迟、周期抖动、阻塞调用

3. 两类任务决定控制策略

先分任务,再选动作。任务没分清,后面基本白调。

任务类型 典型场景 第一优先目标 常见翻车点
实时跟踪型 遥控底盘、实时随动 响应快且可控 平滑过重导致“发肉”
点到点执行型 机械臂到位、自动跑点 轨迹合理、停止精度 目标阶跃导致冲击/超调

快速判定: - 输入是“人实时给”的,优先响应。 - 输入是“系统自动算”的,优先轨迹与边界。


4. 常见算法放在哪一层

下面这张表只做一件事:防止混层。

方法 层次 主要作用
轨迹规划 参考生成层 生成可执行、可预期参考
限速/限加速度 参考生成层 控制参考变化率,降低冲击
TD 参考生成层/辅助 平滑参考并提取变化趋势
PID 跟踪控制层 误差反馈,简单耐造
LADRC 跟踪控制层 扰动估计补偿能力更强
ESO 观测/辅助 估计状态与总扰动
前馈 控制辅助 提前补偿,减小跟踪滞后

一句话: - 参考层决定“喂什么目标”。 - 控制层决定“怎么追目标”。 - 工程层决定“能不能稳定打完整场”。


5. 选型流程(5步,按顺序)

每一步都按“检查项 -> 通过判据 -> 不通过先做什么”。

第1步:任务类型

  • 检查项:当前任务是实时跟踪型还是点到点执行型?
  • 通过判据:能明确写出第一优先目标(响应 或 精度)。
  • 不通过先做:先定任务边界,不进入调参。

第2步:参考是否可执行

  • 检查项:是否有大阶跃、是否越过执行器速度/加速度能力。
  • 通过判据:参考变化率在执行器能力内,且边界明确。
  • 不通过先做:先上限速/限加速度/轨迹规划/TD,再看闭环。

第3步:PID 是否达标

  • 检查项:响应速度、稳定性、稳态误差。
  • 通过判据:三项都满足任务指标,且可重复复现。
  • 不通过先做:继续 PID 基线整定,不急着上复杂算法。

第4步:是否真的需要强抗扰

  • 检查项:负载变化是否频繁,外扰是否明显,模型不确定性是否高。
  • 通过判据:存在持续且可观测的扰动问题,PID 难覆盖。
  • 不通过先做:保持 PID 方案,优化工程链路和参考层。

第5步:工程能否承载

  • 检查项:控制周期稳定性、阻塞调用、饱和策略、回退能力。
  • 通过判据:周期稳定且有保底回退路径。
  • 不通过先做:先修工程,再谈 LADRC/ESO。

6. 工程落地顺序(排障顺序)

效果不好时,按这个顺序查,能解决99%问题:

  1. 输入参考是否合理。 症状:目标一变就猛冲、机械冲击大。 先做动作:先加参考整形,再看闭环。

  2. 控制周期是否稳定。 症状:偶发抖动、同参数复现性差。 先做动作:清理阻塞和抖动源,稳定采样周期。

  3. 执行器是否长期饱和。 症状:输出贴边、积分堆积、恢复慢。 先做动作:补齐限幅与抗积分饱和。

  4. PID 基线是否可保底。 症状:系统只能在某组参数“碰运气”运行。 先做动作:先拿到可复现的 PID 基线版本。

  5. 再考虑 ESO/LADRC。 症状:有明确扰动问题,且工程条件已满足。 先做动作:增量接入并保留 PID 一键回退。

实战常用组合: - 实时任务:轻量平滑 + PID(+前馈) - 点到点任务:轨迹规划 + PID,扰动强再加 ESO/LADRC


7. 常见误区与反例

误区1:控制不好就换高级算法

现场症状:参数越来越多,问题定位越来越慢。 反例:参考是跳变、执行器又饱和时,换 LADRC 通常只会更难调。 先做动作:先修参考层和工程层,再谈升级。

误区2:模块拆得越细越优雅

现场症状:文件很多、接口很多,但联调效率更低。 反例:把 ESO、限幅、微分器拆成过细碎片,维护成本上升。 先做动作:模块化放在“算法之间”,不是“算法内部过度拆分”。

误区3:通用逻辑全扔 utils

现场症状:参数责任不清,故障定位绕圈。 反例:复用是有了,边界却丢了。 先做动作:先明确职责边界,再抽象复用。

误区4:直接从 PID 跨到复杂控制

现场症状:一改就全链路不稳,回滚成本高。 反例:没有保底链路时,复杂方案放大系统风险。 先做动作:先保证 PID 保底,再做可回退演进。


8. 一页总结(上线前检查清单)

核心结论: 不是先选“最强算法”,而是先找“哪一层先出问题”。

三条原则: - 先参考,后控制。 - 能稳定达标就不盲目加复杂度。 - 任何升级都要有保底和回退。

上线前检查表:

检查项 结果 判定标准
任务类型已明确 已明确是实时跟踪型或点到点执行型
参考可执行 无过猛阶跃,变化率在执行器能力内
PID 基线达标 响应/稳定/精度满足任务要求
工程链路稳定 周期稳定、无关键阻塞、饱和可控
升级可回退 出现异常可快速切回保底方案

如果以上 5 项里有 2 项及以上不满足,先补系统,再谈算法升级。

评论