参数调优基础:目标、指标与流程总览
做轨迹规划这些年,我最大的体会就是:算法是骨架,参数才是灵魂。同样的规划器,参数调好了,机器人走起来像老司机;参数没调好,那叫一个「摇头晃脑」,甚至直接撞墙。
这一章,咱们就聊聊参数调优的那些基本功。说白了,就是搞清楚三个问题:我们要优化什么?用什么尺子量?按什么步骤来?
一、参数调优的目标:你到底想要什么?
每次接手一个新项目,我第一件事就是问自己:这次调优,核心诉求是什么?
不同的场景,目标完全不一样。举个例子:
- 工业机械臂:追求的是「快」和「准」,节拍时间压到毫秒级
- 服务机器人:追求的是「稳」和「柔」,别让用户觉得突兀
- AGV/AMR:追求的是「安全」和「平滑」,别把货物晃下来
我个人习惯把调优目标分成三个层次:
- 可行性:轨迹必须能执行,不违反运动学/动力学约束
- 舒适性:加速度、加加速度在合理范围内,不产生冲击
- 经济性:在满足前两条的前提下,尽可能快、尽可能省能量
核心观点:调优不是「越平滑越好」,也不是「越快越好」。真正的目标是——在约束条件下,找到那个最合适的平衡点。
二、常见调优指标:三把尺子
指标就是我们的「尺子」。没有尺子,你根本不知道调得好不好。我常用的三把尺子如下:
1. 平滑性指标
平滑性,说白了就是轨迹「顺不顺」。我见过太多新手只盯着位置看,结果位置曲线很漂亮,速度曲线却像锯齿一样。
常用的量化方式:
- 加加速度(Jerk)的均方根值:越小越平滑
- 加速度变化率:反映冲击程度
- 曲率变化率:对路径而言,曲率突变意味着急转弯
我的经验:在AGV项目中,我通常把加加速度的峰值控制在 0.5 m/s³ 以内。超过这个值,货物就开始晃动了。你可以根据实际负载做调整。
2. 时间最优指标
时间最优,就是「跑完这段路,最少需要多少时间」。但这里有个坑——单纯追求时间最短,往往会导致加速度、速度都顶到极限,机器人会变得很「暴躁」。
我常用的做法是:
- 先设定一个「期望时间」,比如 5 秒
- 然后看实际执行时间与期望时间的偏差
- 偏差在 ±10% 以内就算合格
为什么这样?因为实际项目中,上下游工序都有节拍要求。你跑得太快,反而要等别人,整体效率反而下降。
3. 能量最优指标
这个指标在移动机器人上特别重要——电池就那么点电,省一点是一点。
能量最优通常用「力矩的平方对时间积分」来近似:
J = ∫ τ² dt
其中 τ 是关节力矩或驱动力。这个值越小,说明电机做功越少,能耗越低。
注意:能量最优和时间最优往往是矛盾的。想省时间,就得加大力矩;想省能量,就得慢慢来。调优时一定要明确优先级。
三、调优流程总览:从混沌到有序
很多初学者拿到参数就乱试,改一个值跑一次,跑完再改另一个值。这就像蒙着眼睛找路——效率极低。
我总结了一套「三步走」流程,你可以参考:
第一步:基线建立
先用默认参数跑一次,记录所有指标。这一步很重要——你得知道起点在哪。
- 记录位置、速度、加速度曲线
- 记录执行时间、能耗
- 记录是否出现超调、震荡
第二步:单参数扫描
每次只改一个参数,其他参数保持不变。观察这个参数对各个指标的影响。
举个例子,调「最大加速度」这个参数:
| 最大加速度 (m/s²) | 执行时间 (s) | Jerk RMS | 能耗 (J) |
|---|---|---|---|
| 0.5 | 8.2 | 0.12 | 45 |
| 1.0 | 5.1 | 0.35 | 52 |
| 1.5 | 4.0 | 0.68 | 63 |
| 2.0 | 3.5 | 1.05 | 78 |
看到没?加速度从 0.5 提到 1.0,时间缩短了 38%,但 Jerk 只增加了 2 倍。再往上提,时间收益递减,但平滑性急剧恶化。这就是典型的「拐点」。
第三步:多参数联合调优
单参数调完后,你会发现有些参数是耦合的。比如「最大速度」和「加速度」一起调,效果会互相影响。
这时候我习惯用「网格搜索」或「贝叶斯优化」来辅助。但说实话,在工业现场,经验往往比算法更管用。调得多了,你一眼就能看出问题出在哪。
避坑指南:我曾经在一个项目中,花了三天时间调参数,结果发现是传感器噪声太大,导致轨迹抖动。所以——调参之前,先确认硬件没问题。这个坑我踩过,你别再踩了。
四、知识体系总览
下面这张图,是我对参数调优知识体系的总结。你可以把它当作「地图」,后续章节都会围绕这些展开。
嗯,这张图把咱们这章的核心内容都串起来了。左边是平滑性,中间是时间最优,右边是能量最优。下面那条虚线,就是调优的流程——从基线到单参数,再到联合调优。
你可能会问:这三个目标怎么选?我的建议是——看场景。精密装配,平滑性优先;物流搬运,时间优先;续航敏感,能量优先。没有银弹,只有权衡。
好了,这一章就到这里。参数调优不是一蹴而就的事,但有了清晰的目标、合适的尺子、规范的流程,你至少不会走偏。下一章,咱们聊聊具体的参数有哪些,以及它们各自「管什么」。