第二章:控制理论基础回顾
各位同学,在正式开始力位混合控制编程之前,咱们得先把地基打牢。说实话,我见过太多人一上来就调参数,结果连位置环和力环的区别都没搞明白——那肯定是要翻车的。这一章,我用最直白的方式,把几个核心概念给你讲透。
2.1 位置控制原理
位置控制,说白了就是让机器人末端走到你指定的位置。你给它一个目标坐标,它就得老老实实过去。
最基本的实现方式,是PID控制。我刚开始做项目时,用的就是最简单的比例控制:
// 位置PID控制伪代码
float error = target_position - current_position;
float output = Kp * error + Ki * integral + Kd * derivative;
motor_drive(output);
这里有个坑,我当年踩过。位置控制里,积分项不能太大。为什么?因为位置误差一旦消除,积分项还在累积,就会产生超调。我曾经在一个焊接机器人项目里,就因为Ki设大了0.1,结果每次定位都多冲出去2毫米——焊枪差点把工件戳穿。
2.2 力控制原理
力控制就反过来了。你不是要它走到哪,而是要它施加多大的力。比如打磨、装配、抛光这些场景,位置控制搞不定,得用力控。
力控制的核心思路是:把力误差转换成位置修正量。你想想看,传感器测到当前力,跟目标力一比较,差值用来调整位置——力大了就往后退一点,力小了就往前压一点。
// 力控制伪代码
float force_error = target_force - current_force;
float position_adjust = Kf * force_error;
target_position = original_position + position_adjust;
嗯,这里要注意。力控制的带宽通常比位置控制低。我做过一个抛光实验,力控频率设到200Hz,结果系统抖得跟筛子似的。后来降到50Hz,反而稳了。为什么?因为力传感器本身有噪声,频率太高会把噪声放大。
2.3 阻抗控制简介
阻抗控制,你可以把它理解成位置控制和力控制的中间态。它不直接控制位置,也不直接控制力,而是控制机器人的「刚度」和「阻尼」。
想象一下:你用手推一个弹簧。弹簧越硬,你推它需要的力越大;弹簧越软,轻轻一推就动了。阻抗控制就是让你能调节这个「软硬程度」。
数学上,阻抗控制描述的是力与位置偏差之间的关系:
F = M * d²x/dt² + B * dx/dt + K * (x - x0)
其中:
- M — 惯性系数(质量),影响响应速度
- B — 阻尼系数,影响震荡抑制
- K — 刚度系数,影响位置跟踪精度
- x - x0 — 位置偏差
我在做医疗机器人时,就用了阻抗控制。病人手臂会动,你不能硬顶着,也不能完全跟着跑。把刚度设到中间值,阻尼稍微大一点——这样既不会伤到人,又能完成操作任务。
2.4 导纳控制简介
导纳控制跟阻抗控制正好是「对偶」关系。很多人搞混这两个概念,我简单说清楚:
- 阻抗控制:输入位置偏差,输出力。适合位置源驱动的系统。
- 导纳控制:输入力,输出位置修正。适合力源驱动的系统。
说白了,阻抗控制是「你推它,它给你反作用力」;导纳控制是「你推它,它让开」。实际应用中,导纳控制更常见,因为大多数工业机器人都是位置控制内环,你只需要在位置指令上叠加一个力修正量就行。
// 导纳控制实现示例
void admittance_control(float force_sensor_value) {
float force_error = desired_force - force_sensor_value;
// 二阶系统求解位置修正量
float acc = (force_error - B * vel - K * pos_delta) / M;
vel += acc * dt;
pos_delta += vel * dt;
// 修正后的目标位置
float final_target = original_target + pos_delta;
position_control(final_target);
}
我曾经在一个装配项目里,用导纳控制做轴孔装配。一开始刚度设得太高,零件死活插不进去。后来把K值降到原来的1/5,阻尼B调大两倍——嗯,一次成功。你想想看,装配本身就需要一定的「顺从性」,导纳控制正好干这个。
- 如果你的机器人是力矩控制模式,用阻抗控制
- 如果你的机器人是位置控制模式,用导纳控制
- 大多数商用机器人(如UR、KUKA)都支持位置模式,所以导纳控制更实用
2.5 四种控制方式对比
| 控制方式 | 输入 | 输出 | 适用场景 | 典型应用 |
|---|---|---|---|---|
| 位置控制 | 目标位置 | 驱动力矩 | 刚性接触、轨迹跟踪 | 码垛、焊接 |
| 力控制 | 目标力 | 位置修正 | 恒力接触 | 打磨、抛光 |
| 阻抗控制 | 位置偏差 | 力 | 柔顺接触、人机协作 | 医疗机器人 |
| 导纳控制 | 力 | 位置修正 | 位置内环、装配 | 轴孔装配 |
2.6 知识体系总览
下面这张图,把四种控制方式的关系画清楚了。我建议你多看几遍,理解它们之间的转换逻辑。
这张图里,你注意看上下两层的对应关系。位置控制和阻抗控制都在左侧,力控制和导纳控制在右侧。为什么这么排?因为位置控制和阻抗控制都是「位置驱动」的思路,而力控制和导纳控制都是「力驱动」的思路。
实际项目中,我经常把导纳控制和位置控制嵌套使用。位置控制做内环保证精度,导纳控制做外环提供柔顺性。这种组合方式,在工业机器人上实现起来最方便,也是后面几章我们要重点讲的内容。
- 位置控制适合刚性场景,力控制适合恒力场景
- 阻抗控制和导纳控制是「对偶」关系,一个输入位置输出力,一个输入力输出位置
- 实际工程中,导纳控制+位置内环是最常用的组合
- 参数调节时,刚度K决定「软硬」,阻尼B决定「震荡」,惯性M决定「响应速度」
好了,这一章的内容就到这里。这些概念你理解了,后面讲力位混合控制的时候,就不会觉得晕了。记住一句话:控制理论不是数学题,是工程直觉。多动手调参,比死磕公式管用得多。
公众号:蓝海资料掘金营,微信deep3321