4、笛卡尔空间力矩控制:阻抗控制、导纳控制、力位混合控制
聊到笛卡尔空间的力矩控制,我得先说说自己的一个体会。刚入行那会儿,我总觉得让机器人走个轨迹、定个位就完事了。直到有一次做精密装配,零件公差只有0.02毫米,位置控制死活怼不进去,还把工件给压坏了。那时候我才真正意识到——光有位置控制,机器人就是个瞎子。
笛卡尔空间力矩控制,说白了就是让机器人不光知道“我在哪”,还得知道“我用了多大力”。这在实际工程里太重要了。你想想看,擦玻璃、拧螺丝、甚至给人按摩,哪样不得控制力?
今天咱们就掰开揉碎,聊聊三种最主流的笛卡尔空间力矩控制方法:阻抗控制、导纳控制、力位混合控制。
4.1 阻抗控制:让机器人学会“柔顺”
阻抗控制这个名字,其实挺容易让人误解的。它不是去控制阻抗本身,而是让机器人表现出一个虚拟的弹簧-阻尼系统的行为。
什么意思呢?我举个例子。你用手去推一面墙,墙不会躲,但你的手会感觉到反作用力。如果你推的是一个海绵,海绵会变形,你的手感觉到的力就小很多。阻抗控制就是让机器人像海绵一样——你推它,它就让;你推多狠,它让多少。
M * (ẍ_d - ẍ) + B * (ẋ_d - ẋ) + K * (x_d - x) = F_ext
这个公式看着唬人,其实道理很简单:
M 是惯性(质量),B 是阻尼,K 是刚度。
你施加的外力 F_ext 越大,位置偏差 (x_d - x) 就越大。反过来,你把 K 设得很大,机器人就变得很“硬”,推不动。
我在项目中遇到过这样一个场景:用机器人给手机屏幕涂胶。胶枪需要贴着屏幕表面走,但屏幕本身有微小的起伏。如果用纯位置控制,胶枪要么压太紧把屏幕压碎,要么压太轻胶水涂不匀。后来我用了阻抗控制,把 Z 方向的刚度 K 设得很小,机器人就能顺着屏幕的起伏自动调整高度——既贴得住,又压不坏。
4.2 导纳控制:反过来想
导纳控制和阻抗控制,其实是一对“孪生兄弟”。
阻抗控制:你给我位置偏差,我给你力。
导纳控制:你给我力,我给你位置偏差。
说白了,导纳控制就是用力的信号去修正位置指令。这在工业机器人上特别常见,因为大多数工业机器人的底层还是位置环,你没法直接给力矩指令。那怎么办?你测到外力,然后算出一个位置修正量,加到原来的轨迹上就行了。
我记得有一次做力控打磨,机器人末端装了一个六维力传感器。工件表面有毛刺,机器人走过去一碰,力突然变大。如果用阻抗控制,我得直接控制关节力矩,但当时的控制器不支持。后来我改用导纳控制——力传感器读到力大了,我就让机器人往后退一点点。效果一样好,而且实现起来简单得多。
// 导纳控制伪代码
while (running) {
F_ext = readForceSensor(); // 读取外力
dx = F_ext / K; // 计算位置修正量
x_desired = x_trajectory + dx; // 修正目标位置
moveTo(x_desired); // 发送位置指令
}
4.3 力位混合控制:各管各的
前面两种方法,都是在同一个方向上同时控制力和位置。但有些场景下,你希望在某些方向控力,在另一些方向控位。这就是力位混合控制。
举个例子:用机器人擦桌子。
- 在桌面的法线方向(Z 方向),你需要控制压力,不能太大把桌子压坏,也不能太小擦不干净。
- 在桌面的切线方向(X、Y 方向),你需要控制位置,沿着规划好的路径走。
力位混合控制的核心就是选择矩阵 S。S 是一个对角矩阵,对角线上的元素是 0 或 1:
- S = 1 表示这个方向用位置控制
- S = 0 表示这个方向用力控制
| 方向 | S 值 | 控制模式 | 说明 |
|---|---|---|---|
| X | 1 | 位置控制 | 沿桌面水平移动 |
| Y | 1 | 位置控制 | 沿桌面水平移动 |
| Z | 0 | 力控制 | 保持恒定压力 |
| Rx | 0 | 力控制 | 保持力矩为零 |
| Ry | 0 | 力控制 | 保持力矩为零 |
| Rz | 1 | 位置控制 | 保持朝向不变 |
这样做的好处是解耦。你不用担心位置控制会干扰力控制,因为它们在正交的方向上各干各的。我当年做曲面抛光时,就是靠这个思路搞定的——沿着曲面法线控力,沿着切线控位,效果出奇地好。
4.4 三种方法的对比与选择
说了这么多,到底该用哪一种?我个人的习惯是这样的:
- 阻抗控制:适合需要连续接触的场景,比如打磨、抛光、擦玻璃。优点是响应快,缺点是需要力矩控制接口。
- 导纳控制:适合底层只有位置环的工业机器人。实现简单,但力传感器噪声会影响精度。
- 力位混合控制:适合任务方向明确的场景,比如装配、写字、曲面跟踪。解耦性好,但需要仔细设计选择矩阵。
你可能会问:能不能混着用?当然可以。我见过不少项目,在同一个任务的不同阶段切换控制模式。比如装配开始时用力位混合控制找正,插入过程中用阻抗控制柔顺,最后用导纳控制保压。灵活搭配才是王道。
嗯,关于笛卡尔空间力矩控制的三种方法,今天就聊到这儿。这三种方法没有的好坏,关键看你的机器人硬件、控制器能力、以及任务需求。我个人建议,先从导纳控制入手,因为它最容易在现有平台上实现。等你对力控有了感觉,再尝试阻抗控制和力位混合控制。
记住一句话:力控不是让机器人变“软”,而是让机器人变“聪明”。它知道什么时候该用力,什么时候该收力。这才是真正的智能。
可可精品资料库