跳转至

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

最近修改日期:2026-05-05

参与者:Jackrainman

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 是否达标

看三点:响应速度、稳定性、稳态误差。 - 全部满足且可复现 → 保留 - 不满足 → 继续调基线,不要急着上复杂算法

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

负载变化频繁吗?外扰明显吗?模型不确定性高吗? - 确实存在 PID 兜不住的持续扰动 → 考虑升级 - 否则 → 优先优化工程链路和参考层

第5步:工程能否承载

控制周期稳不稳?有没有阻塞调用?饱和策略和回退路径到位了没有? - 周期稳定且有保底回退 → 可以升级 - 不满足 → 先修工程,再谈 LADRC/ESO


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

调试时按这个顺序排查,大部分问题出在前三步:

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

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

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

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

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

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


7. 常见误区与反例

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

参数越来越多,问题定位越来越慢——这是典型的症状。 如果参考本身就是跳变的,执行器又处于饱和,换 LADRC 只会更难调。 先修参考层和工程层,再谈升级。

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

文件很多、接口很多,联调效率反而更低。 把 ESO、限幅、微分器拆成过细的碎片,维护成本涨得比收益快。 模块化放在"算法之间",别放在"算法内部"。

误区3:通用逻辑全扔 utils

utils 里东西一多,参数责任就说不清了,故障定位只能绕圈。 复用是有了,边界却丢了。 先明确职责边界,再考虑抽象复用。

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

一改就全链路不稳,回滚成本高。 没有保底链路时,复杂方案只会放大系统风险。 先保证 PID 能保底,再去做可回退的演进。


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

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

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

上线前检查表:

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

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