6.4 精细操作与力控:阻抗/导纳控制与接触丰富任务 自由空间里机械臂可以「想怎么动就怎么动」,但一旦接触物体(擦拭、装配、按压),就不能纯位置控制——硬碰硬会撞坏东西或卡死。这一节讲清怎么让机器人「柔顺」地接触世界。 6.4.1 接触任务的挑战 考虑「擦桌子」任务: 纯位置控制:让抹布按预设轨迹移动。但桌面不平、抹布厚度变化时,要么脱离接触(擦不到),要么硬压(损坏)。 力控需求:希望保持恒定的法向按压力,同时让抹布贴合桌面形状。 再考虑「轴孔装配」: 纯位置控制:让轴沿预设路径插入。但制造公差让孔位置有偏差,硬插会卡死甚至损坏。 力控需求:根据接触力反馈微调位置,让轴自然滑入孔。 核心矛盾:位置控制要求精确跟踪轨迹,力控要求顺应接触——两者不能同时同方向满足。需要新的控制范式。 6.4.
自由空间里机械臂可以「想怎么动就怎么动」,但一旦接触物体(擦拭、装配、按压),就不能纯位置控制——硬碰硬会撞坏东西或卡死。这一节讲清怎么让机器人「柔顺」地接触世界。
考虑「擦桌子」任务:
再考虑「轴孔装配」:
核心矛盾:位置控制要求精确跟踪轨迹,力控要求顺应接触——两者不能同时同方向满足。需要新的控制范式。
阻抗控制(Impedance Control) 由 Hogan 在 1985 年提出,核心思想:让机器人表现为一个弹簧-阻尼-质量系统,与环境交互。
其中:
这个方程描述「机器人对外力的响应」——它像一个虚拟的质量-阻尼-弹簧系统。环境推它时,它顺应地移动;环境不推时,它回到期望位置。
<svg viewBox="0 0 600 280" xmlns="http://www.w3.org/2000/svg"> <!-- 墙(环境) --> <rect x="450" y="60" width="20" height="160" fill="#94a3b8" stroke="#475569"/> <text x="460" y="50" text-anchor="middle" font-size="11">环境</text> <!-- 期望位置 --> <line x1="200" y1="140" x2="380" y2="140" stroke="#16a34a" stroke-width="2" stroke-dasharray="6 4"/> <text x="290" y="130" text-anchor="middle" font-size="10" fill="#16a34a">x_d 期望位置</text> <!-- 弹簧 --> <path d="M 200 140 q 10 -10 20 0 q 10 10 20 0 q 10 -10 20 0 q 10 10 20 0" fill="none" stroke="#dc2626" stroke-width="2"/> <text x="240" y="170" text-anchor="middle" font-size="10" fill="#dc2626">K_d 弹簧</text> <!-- 阻尼 --> <rect x="290" y="125" width="40" height="30" fill="none" stroke="#2563eb" stroke-width="2"/> <line x1="295" y1="140" x2="325" y2="140" stroke="#2563eb" stroke-width="2"/> <text x="310" y="170" text-anchor="middle" font-size="10" fill="#2563eb">B_d 阻尼</text> <!-- 末端(机器人) --> <rect x="380" y="115" width="50" height="50" fill="#fde68a" stroke="#ca8a04" stroke-width="2"/> <text x="405" y="145" text-anchor="middle" font-size="11">末端</text> <text x="405" y="200" text-anchor="middle" font-size="11" fill="#ca8a04">实际位置 x</text> <!-- 接触力箭头 --> <line x1="430" y1="140" x2="395" y2="140" stroke="#9333ea" stroke-width="2" marker-end="url(#ar3)"/> <text x="460" y="160" font-size="10" fill="#9333ea">F_ext</text> <defs> <marker id="ar3" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"> <path d="M0,0 L6,3 L0,6 Z" fill="#9333ea"/> </marker> </defs> <text x="300" y="250" text-anchor="middle" font-size="10" fill="#6b7280">阻抗控制:机器人表现为 K_d-B_d-M_d 虚拟系统,受外力时顺应移动</text> </svg>
把阻抗律转换为关节力矩(通过雅可比转换):
def impedance_control(x, dx, ddx, x_d, dx_d, M_d, B_d, K_d, F_ext, J): # 操作空间加速度参考 ddx_ref = np.linalg.inv(M_d) @ (-B_d @ (dx - dx_d) - K_d @ (x - x_d) + F_ext) # 转换为关节力矩(操作空间 → 关节空间) tau = J.T @ (M_d @ ddx_ref + B_d @ (dx - dx_d) + K_d @ (x - x_d)) return tau
关键应用:通过调节 K_d 和 B_d,让同一机器人表现出「硬如钢」(精确装配)或「软如棉」(与人协作)的不同特性。
导纳控制(Admittance Control) 与阻抗控制目标相同(让机器人柔顺),但实现路径相反:
| 维度 | 阻抗控制 | 导纳控制 |
|---|---|---|
| 输入 | 位置偏差 | 外力测量 |
| 输出 | 力矩 | 位置修正 |
| 控制律 | F = M \ddot{x} + B \dot{x} + K x | \ddot{x} = M^{-1}(F_{ext} - B \dot{x} - K x) |
| 适用 | 位置控制型机器人(Cobot 工业臂) | 力控制型机器人(直驱关节) |
| 优点 | 响应快 | 稳定性好 |
简单说:
工业协作机器人(UR、Franka)多用阻抗控制,因为它们本质是位置控制型。人形机器人(Atlas、Optimus)多用导纳控制,因为准直驱关节天然力控。
力位混合控制(Hybrid Force/Position Control) 解决「位置 vs 力」的根本矛盾:在不同方向上分别用位置控制和力控制。
把任务空间分为两个正交子空间:
用选择矩阵 S 描述哪些方向用力控,哪些用位置控:
擦拭任务中:
def hybrid_wipe(position_error, velocity_error, force_error, S): # S = diag(1, 1, 0):XY 位置控制,Z 力控制 F_pos = position_PD(position_error, velocity_error) # XY 方向 F_force = force_PID(force_error) # Z 方向 F_total = S @ F_pos + (np.eye(3) - S) @ F_force tau = J.T @ F_total return tau
轴孔装配(Peg-in-Hole) 是经典力控任务。难点:
策略:
这种 Search-and-Insert 策略依赖高灵敏度的力反馈(第 2.3 节六维力传感器)。
更高档的方案是远程中心柔顺装置(Remote Center Compliance, RCC)——一种纯机械的被动柔顺装置,安装在腕部。它让机械臂在接触时自然顺应,无需控制环路。RCC 在汽车装配线等场景广泛使用。
| 类型 | 实现方式 | 优势 | 劣势 |
|---|---|---|---|
| 被动柔顺 | 机械结构(RCC、柔性关节、软体指) | 快(无延迟)、简单 | 不可调、有限 |
| 主动柔顺 | 控制(阻抗、力位混合) | 可编程、灵活 | 受控制频率限制、可能不稳定 |
实际系统常两者结合:被动柔顺作为安全兜底,主动柔顺提供精细控制。例如 Franka Panda 的关节有 7 个谐波减速器提供一定被动柔顺,再加上阻抗控制实现精细操作。
第 2.3 节讨论的视触觉传感器(GelSight、DIGIT)在精细操作中扮演关键角色:
| 任务 | 触觉作用 |
|---|---|
| 插拔 | 检测接触/对准/插入 |
| 按压 | 检测按压力分布 |
| 滑动检测 | 防止物体从手中滑落 |
| 布料操作 | 检测布料层数、纹理 |
| 柔顺抓取 | 防止压碎易碎物(鸡蛋、水果) |
触觉 + 力控结合,是当前精细操作的「黄金组合」:
视触觉 → 接触/滑动事件 → 力控调节 → 精细操作
人形机器人很多任务需要双手协调(折衣服、拧瓶盖、组装)。双手协调的力控挑战:
代表方法如 对象级阻抗控制(Object-level Impedance Control)——把被抓物体作为整体,控制物体的虚拟阻抗,双手自然分配力。
VLA 模型(第 5 章)输出动作通常不含力信息。但精细操作需要力控,怎么结合?
| 方案 | 描述 | 优劣 |
|---|---|---|
| VLA 出轨迹 + 力控执行 | VLA 输出位置轨迹,底层阻抗控制执行 | 简单,但 VLA 不知道力 |
| VLA 含力输出 | 训练 VLA 同时输出力目标 | 需要力标注数据 |
| 触觉作为 VLA 输入 | 触觉图像进入 VLA | VLA 能感知接触 |
| 混合架构 | VLA 决策 + 力控执行 + 触觉反馈 | 当前主流 |
💡 当前共识:纯 VLA 难以处理精细力控(数据稀缺 + 物理约束硬)。VLA + 传统力控 + 触觉 的混合架构是当前精细操作的工程现实。这也是第 8 章会强调的——VLA 不是替代传统控制,而是与传统控制协作。
最近用 RL 学习力控策略的工作增加:
这些方法在 数据充足的仿真任务 上有效,但真机部署仍依赖传统力控的兜底。
总结精细操作系统的工程要点:
| 要点 | 说明 |
|---|---|
| 高灵敏度力觉 | 六维力传感器 + 视触觉指尖 |
| 可编程柔顺 | 阻抗/导纳控制,参数可调 |
| 力位混合 | 任务相关方向选择控制模式 |
| 被动柔顺兜底 | RCC 或柔性夹爪防撞 |
| 闭环搜索 | 装配时主动搜索 + 力反馈 |
| 触觉事件检测 | 接触、滑动、对准事件触发 |
| VLA + 力控分层 | VLA 高层决策,力控底层执行 |
⚠️ 生产箴言:精细操作是「最后一厘米」难题。VLA 让机器人能从房间一头走到桌前,但要让机器人把 USB 插进孔里、把鸡蛋打进碗里、把衣服叠整齐,仍依赖精细的力控与触觉。这是当前具身智能最难攻克的工程前线之一。
| 挑战 | 描述 | 当前应对 |
|---|---|---|
| 微小力检测 | 微牛级力传感器成本高 | 视触觉 + 算法增强 |
| 高频响应 | 接触事件毫秒级 | 实时控制 + FPGA |
| 多接触协调 | 双手 + 多指 | WBC + 对象级控制 |
| 可迁移性 | 不同物体需要不同参数 | 自适应阻抗、元学习 |
| 安全保证 | 力控不稳可能伤人 | 被动柔顺兜底 + 力限制 |
至此第 6 章结束。你已经理解了从运动规划到底层力控的完整技术栈:规划(6.1)、轨迹(6.2)、控制(6.3)、力控(6.4)。下一章《第 7 章 数据与仿真:Sim-to-Real 与遥操作》将进入「进化」层——机器人怎么获得学习所需的大规模数据。