阻抗控制原理:质量-弹簧-阻尼模型、目标阻抗参数设计、内环与外环控制架构
聊到阻抗控制,我得先说说自己的体会。刚入行那会儿,我总觉得机器人控制就是「给个位置,让它过去」这么简单。直到有一次做精密装配,机器人硬生生把零件怼坏了——嗯,那时候我才真正理解,力控和位置控,缺一不可。
阻抗控制,说白了就是让机器人学会「柔顺」。不是软绵绵,而是有弹性地应对环境。你想想看,人抓鸡蛋为什么不会捏碎?因为你的手有阻抗特性——遇到阻力会自然退让。机器人要学的,就是这个。
质量-弹簧-阻尼模型
阻抗控制的核心,是一个二阶动力学模型:
M * (ẍ_d - ẍ) + B * (ẋ_d - ẋ) + K * (x_d - x) = F_ext
这里:
- M — 惯性系数(质量),决定加速度响应
- B — 阻尼系数,决定速度响应
- K — 刚度系数,决定位置偏差与力的关系
- x_d — 期望位置,ẋ_d 期望速度,ẍ_d 期望加速度
- F_ext — 外部施加的力
这个模型怎么理解?我习惯把它想象成「弹簧连着个铁块,泡在油里」。你推铁块,弹簧压缩,油液产生阻力。推得越快,阻力越大。这就是阻抗的本质——机器人对外力的响应特性。
关键点:阻抗控制不是直接控制力,而是控制「位置偏差与力之间的关系」。你设定好M、B、K三个参数,机器人就自动表现出你想要的柔顺特性。
我在做打磨机器人项目时遇到过一个问题:机器人碰到工件表面时,如果刚度K设得太大,接触瞬间会产生冲击力,把工件表面划伤。后来我把K调小,同时把B调大,效果就好多了。说白了,这就是在调「软硬程度」和「缓冲效果」。
目标阻抗参数设计
参数怎么选?我给大家一个实用的思路。
先看刚度K:
- K越大,机器人越「硬」,位置跟踪精度高,但力控效果差
- K越小,机器人越「软」,力控柔顺性好,但位置偏差大
- 我建议:装配任务K取小(100-500 N/m),搬运任务K取大(1000-5000 N/m)
再看阻尼B:
- B决定系统的震荡特性。B太小,机器人会「抖」;B太大,响应太慢
- 临界阻尼比 ζ = B / (2√(MK)),一般取0.7-1.0比较舒服
- 我踩过坑:有一次B设得太小,机器人夹取零件时一直在震荡,像得了帕金森一样…后来把B调大了一倍,稳了
最后是惯性M:
- M影响加速度响应。M越大,机器人越「迟钝」
- 实际中M通常取机器人本身惯量的0.5-2倍
- 注意:M不能设得太小,否则系统容易不稳定
| 参数 | 增大效果 | 减小效果 | 典型范围 |
|---|---|---|---|
| K(刚度) | 位置精度高,力控差 | 柔顺性好,位置偏差大 | 100-5000 N/m |
| B(阻尼) | 响应慢,无震荡 | 响应快,易震荡 | 10-500 N·s/m |
| M(惯性) | 加速度响应慢 | 加速度响应快,易不稳定 | 0.5-2倍实际惯量 |
我的经验:参数设计别一次到位。先设一个保守值(K偏大、B偏大),然后逐步调小K、调优B。每次只改一个参数,观察机器人响应。这样不容易翻车。
内环与外环控制架构
阻抗控制怎么落地?实际工程中,我们通常用两层控制架构。
先看一张我画的架构图:
这张图怎么理解?我拆开来讲。
外环:阻抗控制器
外环接收两个输入:期望位置 x_d 和力传感器反馈的 F_ext。它根据阻抗模型计算出位置修正量 Δx,然后传给内环。说白了,外环就是「根据力的大小,决定位置该偏多少」。
我在项目中遇到过一个问题:力传感器噪声太大,导致外环输出的位置修正量一直在抖动。后来加了低通滤波,把截止频率设在20Hz,效果立竿见影。
内环:位置/速度控制器
内环接收外环给出的修正后位置指令,然后驱动电机去跟踪这个位置。内环通常用PID控制,响应速度要快——一般要求带宽是外环的5-10倍。
为什么内环要快?你想想看,外环算好了「该退让多少」,结果内环半天追不上,那力控效果肯定打折扣。我一般把内环控制周期设在1ms,外环设在5-10ms。
注意:内环和外环的采样频率要匹配。我曾经把外环跑在100Hz,内环跑在1000Hz,结果外环输出的修正量变化太快,内环根本来不及响应,系统直接震荡了。后来把外环降到200Hz,问题解决。
两种实现方式:
- 基于位置的阻抗控制:外环输出位置修正量,内环跟踪位置。适合大多数工业场景,实现简单
- 基于速度的阻抗控制:外环输出速度修正量,内环跟踪速度。适合需要连续力控的场景,比如打磨、抛光
我个人更常用基于位置的方式。为什么?因为大多数工业机器人本身就提供位置控制接口,改造成本低。你只需要在机器人控制器外面加一个阻抗计算模块就行。
避坑指南:我曾经在一个装配项目里,把阻抗参数设得太「软」,结果机器人碰到工件后一直在震荡,就是找不到稳定位置。后来发现是阻尼B设得太小,系统处于欠阻尼状态。把B从50调到200,世界安静了。
最后说一句:阻抗控制不是万能药。它适合接触力不大的场景,比如装配、打磨、人机协作。如果你要做重载力控(比如几百牛的力),建议考虑力位混合控制。不过那是另一个话题了。
公众号:蓝海资料掘金营,微信deep3321