2、速度规划配置:加速度、减速度、急动度(Jerk)参数配置与约束
速度规划,说白了就是告诉机器人「怎么走」。但光有位置和速度还不够,你得告诉它怎么加速、怎么减速、拐弯时抖不抖。这些参数配置好了,轨迹就顺滑;配不好,机器人在那原地哆嗦,看着都心疼。
我个人习惯把这三个参数称为「速度规划三兄弟」:加速度、减速度、急动度。今天咱们就把它们掰开揉碎了讲清楚。
2.1 加速度与减速度:最基础的约束
加速度决定了机器人从静止到全速需要多久。减速度则相反,决定了它能不能稳稳停下来。
你想想看,如果加速度设得太大,电机电流瞬间飙升,轻则过载报警,重则烧驱动器。设得太小呢?机器人慢得像蜗牛,产线节拍根本跟不上。
核心原则:加速度和减速度通常不相等。减速度一般比加速度大 20%~50%,因为紧急停止的场景比启动更常见。
我在项目中遇到过一台六轴机器人,每次启动都正常,但一停下来就剧烈抖动。查了半天,发现是减速度设得跟加速度一样,但负载变化导致制动距离不够。后来把减速度调到加速度的 1.3 倍,问题就解决了。
| 参数 | 典型范围(工业机器人) | 影响 |
|---|---|---|
| 加速度 | 0.5 ~ 5 m/s² | 启动时间、电机峰值电流 |
| 减速度 | 0.8 ~ 8 m/s² | 停止距离、末端抖动 |
注意:加速度和减速度的单位取决于你的运动学模型。如果是关节空间,单位是 rad/s²;如果是笛卡尔空间,单位是 m/s²。混用会导致灾难性后果——我曾经见过有人把关节加速度当笛卡尔加速度用,结果机器人直接飞出去了。
2.2 急动度(Jerk):被忽视的关键参数
急动度,英文叫 Jerk,是加速度的变化率。单位是 m/s³ 或 rad/s³。
很多人只配加速度和减速度,觉得够了。但实际跑起来,轨迹在加减速切换点会出现「加速度突变」。这个突变会产生冲击力,导致机器人抖动、末端精度下降,甚至缩短减速机寿命。
说白了,急动度就是给加速度加一个「平滑过渡」。没有它,加速度曲线是方波;有了它,加速度曲线变成梯形或 S 形。
我的经验:急动度一般设为加速度的 5~10 倍。比如加速度是 2 m/s²,急动度就设 10~20 m/s³。太小了平滑效果不明显,太大了又失去意义。
2.3 参数配置的约束关系
这三个参数不是独立的,它们之间存在硬约束。我整理了一张图,帮你理清关系:
2.4 实际配置步骤
好了,理论讲完了,咱们直接上实操。我一般按以下步骤来配:
- 先定最大速度——根据工艺要求和电机额定转速确定。
- 再定加速度和减速度——减速度比加速度大 20%~50%。
- 最后配急动度——设为加速度的 5~10 倍。
- 跑一次空载测试——观察轨迹是否平滑,末端有无抖动。
- 微调——如果有抖动,优先增大急动度;如果启动太慢,适当增大加速度。
避坑指南:我曾经在调试一个码垛机器人时,急动度设得太小,结果每次加减速切换时,末端抓手都会把箱子甩出去。后来把急动度从 8 m/s³ 调到 25 m/s³,问题立刻消失。嗯,有时候参数差一点点,效果天差地别。
2.5 代码示例:梯形速度规划
下面是一个简单的梯形速度规划实现,包含了加速度、减速度和急动度的约束检查:
def trapezoidal_velocity_planning(
max_vel: float,
accel: float,
decel: float,
jerk: float,
distance: float
) -> dict:
"""
梯形速度规划,带参数约束检查
参数:
max_vel: 最大速度 (m/s)
accel: 加速度 (m/s²)
decel: 减速度 (m/s²)
jerk: 急动度 (m/s³)
distance: 总位移 (m)
返回:
规划结果字典
"""
# 约束检查
if decel < accel:
raise ValueError(f"减速度({decel})必须 ≥ 加速度({accel})")
if jerk < 5 * max(accel, decel):
raise ValueError(f"急动度({jerk})必须 ≥ 5 × max(accel, decel) = {5 * max(accel, decel)}")
# 计算加速段和减速段所需距离
accel_distance = 0.5 * max_vel * max_vel / accel
decel_distance = 0.5 * max_vel * max_vel / decel
# 判断是否能达到最大速度
if accel_distance + decel_distance <= distance:
# 有匀速段
cruise_distance = distance - accel_distance - decel_distance
cruise_time = cruise_distance / max_vel
accel_time = max_vel / accel
decel_time = max_vel / decel
total_time = accel_time + cruise_time + decel_time
profile_type = "梯形(有匀速段)"
else:
# 无匀速段,三角形规划
# 需要重新计算实际能达到的最大速度
actual_vel = (2 * accel * decel * distance / (accel + decel)) ** 0.5
accel_time = actual_vel / accel
decel_time = actual_vel / decel
total_time = accel_time + decel_time
profile_type = "三角形(无匀速段)"
return {
"profile_type": profile_type,
"total_time": total_time,
"accel_time": accel_time,
"decel_time": decel_time,
"max_vel_actual": max_vel if accel_distance + decel_distance <= distance else actual_vel
}
# 使用示例
result = trapezoidal_velocity_planning(
max_vel=2.0,
accel=1.5,
decel=2.0,
jerk=12.0,
distance=5.0
)
print(result)
重要提醒:上面的代码只是演示约束检查逻辑。实际工程中,急动度约束需要体现在加速度曲线的平滑处理上,而不是简单做个 if 判断。真正的 S 形速度规划会用到三次或五次多项式插值,这个我们后面章节会详细讲。
2.6 参数配置的常见误区
- 误区一:加速度越大越好——大加速度意味着大电流、大冲击,对机械结构是摧残。
- 误区二:减速度等于加速度——紧急停止时往往需要更大的减速度。
- 误区三:急动度可有可无——没有急动度约束,轨迹在加减速切换点会有加速度跳变,抖动随之而来。
- 误区四:参数一次配好不再改——不同负载、不同轨迹段可能需要不同的参数配置。
嗯,到这里,速度规划的三个核心参数就讲完了。记住:加速度管启动、减速度管停止、急动度管平滑。三者配合好了,你的机器人跑起来就像丝绸一样顺滑。