4. 轨迹优化目标函数:时间最优、能量最优、平滑性最优、多目标优化

聊到轨迹优化,其实核心就一句话:我们到底想让机器人怎么动?

是越快越好?还是越省电越好?还是动作看起来像人类一样丝滑?

嗯,这背后就是目标函数在起作用。我做了这么多年机器人,见过太多团队一上来就怼优化算法,结果目标函数没定义清楚,折腾半天全白费。今天咱们就把这四种最常见的优化目标掰开揉碎讲清楚。

4.1 时间最优:让机器人跑得飞快

时间最优,说白了就是让机器人从A点到B点,花的时间最短。

这在工业场景里特别常见。比如流水线上的抓取动作,每快0.1秒,一天就能多产几百个零件。我当年在汽车焊装线项目里,客户要求节拍必须压缩到3.2秒以内,那时候真是被时间最优逼得头发都少了一半。

数学上,时间最优的目标函数长这样:

J_time = ∫₀ᵀ 1 dt = T

嗯,你没看错,就是积分1。从0到T,积分结果就是总时间T。我们要最小化这个T。

但这里有个坑——时间最优往往伴随着剧烈的加速度变化。你想想看,要让时间最短,电机就得拼命加速、急刹车。结果就是:

  • 关节冲击大,齿轮容易坏
  • 末端抖动明显,精度下降
  • 能耗飙升,电机发热严重
⚠️ 我曾经踩过的坑: 在某次码垛机器人项目中,我单纯追求时间最优,结果机器人跑到第3万次循环时,减速器直接崩了。后来才意识到,时间最优必须配合约束条件一起用,比如加速度上限、力矩上限。

4.2 能量最优:省电才是硬道理

能量最优的目标,是让机器人消耗的总能量最小。

对于移动机器人或者无人机来说,这直接决定了续航能力。我有个朋友做物流AGV,他们算过一笔账:能量效率每提升5%,一天就能多跑2小时,一年省下来的电费够买两台新机器人了。

能量最优的典型目标函数:

J_energy = ∫₀ᵀ (τ² · q̇²) dt

其中τ是关节力矩,q̇是关节速度。说白了,就是力矩和速度的乘积积分,代表瞬时功率。

但这里有个有意思的现象:能量最优的轨迹往往不是最平滑的。为什么?因为有时候稍微"抖"一下,反而能利用惯性省力。就像你骑自行车上坡前先猛蹬几下,利用惯性冲上去,比匀速踩更省力。

💡 个人经验: 我建议在做能量优化时,别忘了加上电机效率曲线。电机在不同转速和负载下的效率差别很大,忽略这个,你算出来的"最优"可能在实际中并不省电。

4.3 平滑性最优:让动作看起来像人

平滑性最优,追求的是加速度变化率(也就是加加速度,Jerk)最小。

为什么要关注这个?因为人眼对加速度变化特别敏感。你想想看,一个机器人如果突然加速又突然减速,哪怕幅度不大,看起来也特别"机械"、特别生硬。

平滑性最优的目标函数:

J_smooth = ∫₀ᵀ (jerk²) dt = ∫₀ᵀ (q̇̇̇²) dt

最小化加加速度的平方积分,能让轨迹的加速度变化非常平缓。

我在做人形机器人步态规划时,对这个体会特别深。如果只优化时间和能量,机器人走起来就像个醉汉——东倒西歪的。但加上平滑性约束后,步态立马变得自然,甚至能骗过外行人的眼睛。

📌 核心要点: 平滑性最优的代价是——轨迹执行时间会变长,能耗也会增加。因为你要刻意"压制"加速度的变化,相当于给电机加了低通滤波器。

4.4 多目标优化:成年人不做选择

现实世界里,我们很少只优化一个目标。时间、能量、平滑性,往往要同时考虑。

多目标优化的通用形式:

J_total = w₁ · J_time + w₂ · J_energy + w₃ · J_smooth

其中w₁、w₂、w₃是权重系数,代表你对各个目标的重视程度。

举个例子:

应用场景 w₁(时间) w₂(能量) w₃(平滑性)
工业码垛 0.6 0.2 0.2
服务机器人 0.1 0.3 0.6
手术机器人 0.05 0.05 0.9

你看,不同场景下权重完全不同。手术机器人几乎只关心平滑性,因为哪怕一丁点抖动都可能造成危险。而工业码垛则更看重时间,毕竟效率就是钱。

⚠️ 避坑指南: 我曾经犯过一个错误——把三个目标的量纲直接相加。时间单位是秒,能量单位是焦耳,平滑性单位是(m/s³)²,数值量级差了好几个数量级。结果时间项的权重虽然设了0.1,但因为数值太大,实际上完全主导了优化。正确的做法是先归一化,让每个目标的值都在0~1之间。

4.5 知识体系总览

下面这张图,是我自己总结的轨迹优化目标函数的知识框架,你可以对照着理解:

轨迹优化目标函数 时间最优 能量最优 平滑性最优 多目标优化 权衡 J_total = w₁·J_time + w₂·J_energy + w₃·J_smooth 工业码垛:重时间 服务机器人:重平滑 手术机器人:重安全 权重系数决定最终轨迹特性

这张图把四个目标函数的关系梳理得很清楚。你看,它们最终汇聚到"权衡"这个核心节点上。说白了,没有完美的轨迹,只有最适合场景的轨迹。

4.6 实际项目中的选择策略

说了这么多理论,最后分享一点实战经验。

我现在的习惯是:先做单目标优化,再做多目标权衡

具体来说:

  1. 先分别算出时间最优、能量最优、平滑性最优的轨迹
  2. 看看这三个轨迹的差异有多大
  3. 根据实际需求,调整权重系数
  4. 用交叉验证的方式,检查不同权重下的轨迹质量

举个例子,我之前做协作机器人喷涂轨迹时,先算出来时间最优轨迹只要8秒,但末端抖动太大,喷出来的漆面不均匀。平滑性最优轨迹要15秒,漆面完美但太慢。最后我取了w₁=0.3、w₂=0.1、w₃=0.6,得到一条11秒的轨迹,漆面质量达标,效率也能接受。

这就是多目标优化的魅力——它不是找一个"最好"的解,而是找一个"最合适"的解

📌 最后提醒一句: 别把目标函数搞得太复杂。我见过有人加了七八个目标项,结果优化器跑了两天都不收敛。记住,好的目标函数应该是"少而精"的——每个项都有明确的物理意义,每个权重都有充分的理由。

公众号:蓝海资料掘金营,微信deep3321