首页 / 机器人控制

高自由度灵巧手设计:自由度构型、驱动架构、传感与控制

灵巧手是机器人最后的 20+ 个自由度:二指夹爪只做"夹",五根手指要完成捏、握、捻、抓取与操作。本文从人手的自由度解剖讲起,对比腱驱动/直驱/连杆/软体四种驱动架构,落到微型执行器(空心杯/无框电机 + 微型减速器 + 磁编,FOC 电流环照常用)、腱驱动运动学建模、张力与触觉传感,以及位置/力/阻抗控制——衔接机械臂与仿生臂篇的欠驱动概述,专攻高自由度(≥12 DOF)设计,配腱驱动手指交互演示和可编译 C 代码。

1. 为什么需要高自由度灵巧手

机械臂末端执行器有三个代际:夹爪(1 自由度,夹持一个位姿)、三指/四指欠驱动手(3~6 自由度,自适应包络抓取)、高自由度灵巧手(≥12 自由度,指内多关节独立驱动或强耦合)。自由度决定了操作能力上限——人手约 27 个自由度(手腕 6 + 手内约 21),可以完成捻笔、翻硬币、穿针这类需要指内运动(in-hand manipulation)的任务,这是任何夹爪都做不到的。

末端类型自由度驱动复杂度操作能力典型应用
二指夹爪11 电机抓取(平行/包络)工业上下料、装配
欠驱动三指手3~63~6 电机,手指自适应多形态抓取,无指内操作服务机器人、物流分拣
高自由度灵巧手12~2412~20 电机 + 腱/连杆传动抓取 + 指内操作 + 手势遥操作、人形机器人、精密装配、科研

高自由度的价值不在"手指多",而在指内多关节独立运动:四指每指 4 个自由度(MCP 两轴 + PIP/DIP 屈伸),加对掌拇指,才能把物体在掌心内"揉"来调整姿态。代价是驱动、传感与控制全面变难——这就是本文要拆解的设计主线。

2. 自由度构型设计:人手解剖与自由度预算

先看人手:四指(食中无名小)每指 4 DOF = MCP 掌指关节 2(屈伸 + 侧摆)+ PIP 近端指间 1(屈伸)+ DIP 远端指间 1(屈伸),共 16;拇指 5 DOF(TMC 腕掌 2 的屈伸/内收外展 + MCP 1 + IP 1,部分模型把对掌记为独立旋转);手腕 6 DOF(实际有效 3)。合计手内约 21 + 手腕 6 ≈ 27。

部位关节自由度作用灵巧手设计要点
四指MCP2(屈伸/侧摆)手指开合主关节侧摆轴常被简化合并,省 4 自由度
四指PIP1(屈伸)指尖定位与 DIP 常做腱耦合(屈曲时近远节按比例合拢)
四指DIP1(屈伸)指尖微调、贴合驱动收益低,最常被欠驱动合并
拇指TMC/MCP/IP4~5对掌、对捏核心最关键的 5 个自由度——对掌使拇指能与各指指腹相对
手腕俯仰/偏摆/滚转3调整手整体位姿整手旋转(滚转)常由腕部承担
ℹ️ 自由度预算:全驱动 vs 欠驱动

全驱动(每关节一个执行器)控制自由、精度高,但手又重又大、成本随自由度线性涨——Shadow Dexterous Hand 用 20 个电机驱动 24 自由度即是代表。欠驱动(电机数 < 关节数,通过腱耦合/差动/弹性自动分配)在自由度上"打折",但换来轻量、自适应包络、鲁棒抓取——Pisa/IIT SoftHand 仅 1 个电机驱动 19 个关节。工程上几乎都是折中:每指 1~3 个电机 + PIP/DIP 耦合 + 侧摆省去或共享,拇指保留最多自由度。预算决策顺序:先定抓取任务(要哪些手势/操作)→ 分配拇指与四指 DOF → 选耦合方式。

3. 驱动架构:腱驱动、直驱、连杆与软体

驱动架构决定整手的重量分布、力传递效率与控制复杂度。四种主流方案对比:

方案原理优势代价代表
腱驱动(远端电机)电机放基座/前臂,腱索(Dyneema/钢丝)绕过关节把力传到远端指尖质量小、惯量低、整手轻;电机散热好;力可精确控制腱摩擦/弹性/蠕变、需张力管理与预紧、结构复杂Shadow Hand(24 DOF)、DLR/HIT II、因时/兆威部分型号
直驱微型电机(关节内)每个关节内置微型电机+减速器控制简单直接、无腱损耗、刚度高、易装编码器指尖质量大、惯量高、功率密度受限、散热难小型化关节模组堆叠方案、部分科研手
连杆驱动电机驱动连杆机构带动远端关节刚性传动、无腱蠕变、力传递效率高结构占用指内空间、构型受限于机构学DexLink Hand(16 DOF)、部分抓取手
软体/气动气腔/流体驱动弹性体变形本质柔顺安全、成本极低、抓取任意形状响应慢、力小、无精确位置/力控制Pisa/IIT SoftHand(腱+软性)、柔性仿生手

腱驱动是高自由度灵巧手的绝对主流:20 个电机塞不进手指,但可以塞进手掌甚至前臂。设计三要素——腱路(走线、套管弯曲半径,决定摩擦)、预紧(消除松弛与迟滞,需弹性张紧机构)、张力管理(每根腱实时张力测量,见第 5 节)。代价是腱的弹性与蠕变进入控制环:要么建模补偿,要么用高模量腱(Dyneema 比钢轻 8 倍同强度、蠕变小)把弹性压到可忽略。

4. 微型执行器选型:电机、减速器、编码器与 FOC

无论哪种驱动架构,能量最终来自微型电机。高自由度手对执行器的要求:小(直径 6~16mm)、轻(克级)、功率密度高、可精确力矩控制。三类电机:

电机类型特点适用控制
空心杯(coreless)无铁芯、低惯量、启动快、无齿槽转矩腱驱动远端电机(体积小功率密度高)FOC/方波均可;低速零齿槽是最大优势
无框力矩(frameless BLDC)扁环形、中空、可嵌入关节直驱关节方案(大指/拇指根)FOC 标准流程(见驱动算法板块)
微型有刷便宜、简单,但电刷磨损低成本手、科研样机电压/电流开环或简单闭环

减速器选型延续减速器篇的逻辑,只是尺度缩小:微型行星(直径 ≤8mm,减速比 4~30,高功率密度,用于腱轮驱动)与微型谐波(直径 ≤20mm,零背隙,用于直驱关节)为主。腱驱动还有一个"减速放大器":小半径腱轮 + 大半径关节轮 = 无齿轮减速(速比 = R_关节/R_腱轮,可达 5~15),免去减速器重量与背隙,但腱张力放大倍数也等于该速比——电机侧力小、腱受大力,需要张力上限保护。

腱轮减速比与关节力矩(衔接第 6 节模型)

n = Rjoint / Rpulley (腱轮→关节轮放大比)

τjoint = n · τmotor = Rjoint · ftendon (腱张力 × 关节轮半径)

例:腱轮半径 4mm、关节轮半径 20mm → n=5,电机 0.05Nm → 关节 0.25Nm,腱受力 12.5N(0.25Nm / 20mm)

编码器装在电机侧(磁编 12~14bit,×腱轮速比后关节分辨率足够)还是关节侧(直接测指节角,但装不进小关节,常只有指尖磁铁方案)是经典取舍:腱驱动的腱伸长/蠕变会让电机侧读数≠真实关节角,所以高配方案电机侧 + 关节侧双编码器,或用腱张力做间接估计。FOC 本身与站内流程一致——电流环带宽决定指尖力的动态响应,微型电机电感小、开关频率可做高,电流环带宽反而容易做上去。

5. 传感方案:关节角、腱张力与指尖触觉

灵巧手"手感"来自三层传感,缺一不可:

传感原理关键参数用途
关节角电机侧磁编(间接)+ 关节侧霍尔/磁铁(直接)分辨率 0.01~0.1°;腱驱动需补偿腱伸长运动学、位置控制
腱张力应变片电桥测腱轮/过线柱形变;或电机电流反推量程 5~50N,精度 ±0.1N,带宽 ≥100Hz力控制、预紧监测、断腱检测
指尖触觉压阻阵列/电容阵列/微型六维力;Taxel 多点分布空间分辨率 1~3mm,力分辨率 mN 级抓取力闭环、滑觉检测、物体识别

腱张力的实现细节:腱绕过小轮(测力轮)时,轮轴受合力 = 2f·sin(包角/2),贴应变片即可测;更简单的是在腱的固定端串联S 形弹性梁 + 应变片。张力信号进控制环有两个用途:前馈(关节力矩指令直接映射为张力指令,见第 7 节)与保护(超限断腱、防夹力超标的最后防线)。指尖触觉在欠驱动手上尤其重要——没有关节级力控,就用指尖力闭环替代抓握力控制。

6. 腱驱动手指运动学建模

腱驱动手指的控制核心是腱长度 ↔ 关节角腱张力 ↔ 关节力矩两个映射。以单关节双腱拮抗(屈腱 F / 伸腱 E 绕半径 r 的腱轮)为最简模型:

双腱拮抗关节(差动模型)

θ = (ΔLF − ΔLE) / (2r) ——差动长度 → 关节角

τ = r · (fF − fE) ——张力差 → 关节力矩

约束:fF + fE = 2f0(预紧守恒,腱只能拉不能推)→ 关节角由差动长度决定、刚度由预紧决定,两者解耦

多关节手指(MCP + PIP)有两种腱路:独立腱(每关节一对腱,4 腱驱动 2 关节)控制自由度完整;耦合腱(一根腱绕 MCP 再绕 PIP,ΔL = r1θ1 + r2θ2)使近远指节按半径比合拢——这正是人手 DIP 跟随 PIP 的生理耦合,也是欠驱动手指自适应包络的几何来源:

耦合腱与欠驱动自适应

ΔL = r1θ1 + r2θ2,k = r2/r1 → θ2 = k·θ1(空载比例)

抓握时若指尖先接触物体,PIP 受阻则 θ2 停止、ΔL 全部转为 θ1 继续屈曲 —— 手指"绕"物体轮廓贴合

欠驱动的自适应包络原理:腱持续收缩,哪个关节阻力小就先动哪个,碰到物体后该关节锁定(几何限位或摩擦自锁),其余关节继续屈曲,最终手指整体贴合被抓物体。这种"无控制的自适应"是高自由度设计里用最少执行器获得鲁棒抓取的关键。正运动学(关节角 → 指尖位置)与机械臂一致:指尖 = Σ li·[sin(Σθ), −cos(Σθ)],见第 8 节演示与第 9 节代码。

7. 控制架构:位置、力与阻抗,以及抓取模式

灵巧手控制是三层问题:关节层(每根腱的电机伺服,位置/力矩)、手指层(指节角/指尖力)、整手层(多指协同抓取)。工程实现通常把腱张力环作为最内环(类比电流环),外层是关节位置/力矩环:

  1. 张力环(最内):每根腱一个力闭环,指令来自上层关节力矩映射(τ = r·Δf),带宽 ≥50Hz,超限即保护
  2. 位置/力矩环:期望指节角 → 逆映射为腱长/张力指令;或期望指尖力 → 张力指令
  3. 整手协同:抓取规划选模式(power grasp 握持:全指包络大物体,靠摩擦与几何锁紧;precision grasp 捏持:拇指+一/两指指腹相对,靠力控),多指力分配 + 阻抗/导纳柔顺

柔顺控制与力觉篇同源:指尖阻抗控制把手指末端等效为弹簧-阻尼(期望接触力 = K·(xd−x)),抓取物体时位置偏差自动产生接触力,配合张力/触觉闭环做抓握力限制。高自由度手的控制难点在耦合——腱路交叉(一根腱影响多关节)、欠驱动耦合(θ₂=kθ₁)、手指间共享电机(差动)都会让各环互相干扰,工程上要么解耦建模,要么用整手级学习/优化控制(强化学习在 Shadow Hand 上已能学出捻笔类操作)。

8. 交互式演示:腱驱动手指仿真

拖动态滑块,实时计算双腱拮抗手指(MCP + PIP 两关节)的关节角与关节力矩:全驱动模式下四根腱独立控制两关节,直观看出"差动长度决定角度、张力差决定力矩、预紧决定刚度"的解耦关系;切到耦合模式(欠驱动),单根腱按半径比驱动两关节,体会自适应包络的几何来源。

腱驱动手指仿真(双腱拮抗 · 2 关节)
θ = (ΔLf − ΔLe)/(2r);τ = r(fF − fE)。全驱动:r1=4mm、r2=3mm;耦合:ΔL = r1·θ1 + r2·θ2,k = r2/r1 = 0.75。

观察要点:① 全驱动下 ΔLf1−ΔLe1 决定 θ1,ΔLf2−ΔLe2 决定 θ2,两关节互不干扰;② 张力差 (fF−fE) 直接显示为关节力矩,且与角度无关——这就是腱驱动"位置与力解耦"的本质;③ 切到耦合模式,单根腱收 3mm,θ1/θ2 保持 1:0.75 固定比例屈曲,模拟人手 DIP 跟随 PIP。

9. 腱驱动手指 C 代码(运动学 + 力映射)

下面是可编译的腱驱动手指库:差动长度→关节角、张力→关节力矩、耦合腱运动学、以及带张力均衡的单关节位置 PD。可直接移植进灵巧手控制器,或用于上位机仿真验证。

/* tendon_hand.c —— 腱驱动手指运动学与力映射 * 编译:gcc -o tendon_hand tendon_hand.c -lm * 运行:./tendon_hand * 说明:角度单位弧度;腱轮半径 r 单位 mm;张力单位 N;力矩单位 N·mm * 双腱拮抗:屈腱 F 收为正、伸腱 E 放为负,腱只能拉不能推 */ #include <stdio.h> #include <math.h> #define D2R(d) ((d) * M_PI / 180.0) #define R2D(r) ((r) * 180.0 / M_PI) /* 双腱拮抗:差动长度 → 关节角(弧度) */ double joint_angle(double dl_f, double dl_e, double r) { return (dl_f - dl_e) / (2.0 * r); } /* 双腱拮抗:张力差 → 关节力矩(N·mm) */ double joint_torque(double f_f, double f_e, double r) { return r * (f_f - f_e); } /* 预紧后的张力指令:力矩需求 → 双腱张力分配(预紧 f0 守恒) */ void tension_alloc(double tau, double f0, double r, double *f_f, double *f_e) { double df = tau / (2.0 * r); /* 需要( fF - fE ) = tau / r */ *f_f = f0 + df; *f_e = f0 - df; if (*f_f < 0.1) *f_f = 0.1; /* 腱不可推:钳位最小张力 */ if (*f_e < 0.1) *f_e = 0.1; } /* 欠驱动耦合腱:ΔL = r1·θ1 + r2·θ2,k = r2/r1 → θ2 = k·θ1 */ void coupled_kinematics(double dl, double r1, double r2, double *th1, double *th2) { double k = r2 / r1; *th1 = dl / (r1 + k * r2); *th2 = k * (*th1); } /* 手指正运动学:关节角 → 指尖位置(屈曲向下为正) */ void finger_fk(double l1, double l2, double th1, double th2, double *x, double *y) { *x = l1 * sin(th1) + l2 * sin(th1 + th2); *y = -(l1 * cos(th1) + l2 * cos(th1 + th2)); } int main(void) { /* 例1:MCP 屈腱收 4mm、伸腱放 2mm,r=4mm → θ=(4-2)/8=0.25rad≈14.3° */ double th = joint_angle(4.0, 2.0, 4.0); printf("θ = %.1f° (ΔLf=4, ΔLe=2, r=4)\n", R2D(th)); /* 例2:张力映射 —— fF=8N, fE=3N, r=3mm → τ=3*(8-3)=15 N·mm */ printf("τ = %.0f N·mm (fF=8, fE=3, r=3)\n", joint_torque(8.0, 3.0, 3.0)); /* 例3:力矩→张力分配 —— 需 τ=20N·mm,预紧 f0=5N,r=4mm */ double ff, fe; tension_alloc(20.0, 5.0, 4.0, &ff, &fe); printf("分配: fF=%.1fN fE=%.1fN (τ=20, f0=5, r=4)\n", ff, fe); /* 例4:耦合腱 —— ΔL=6mm, r1=4, r2=3 → θ1=6/(4+0.75*3)=0.96rad, θ2=0.72rad */ double a1, a2; coupled_kinematics(6.0, 4.0, 3.0, &a1, &a2); printf("耦合: θ1=%.1f° θ2=%.1f° (k=0.75)\n", R2D(a1), R2D(a2)); /* 例5:正运动学 —— l1=l2=40mm,θ1=θ2=60° → 指尖坐标 */ double x, y; finger_fk(40, 40, D2R(60), D2R(60), &x, &y); printf("指尖: (%.1f, %.1f) mm (l1=l2=40, θ=60°/60°)\n", x, y); return 0; }

10. 经典设计对照与工程要点

从 2000 年至今,高自由度灵巧手走过"全驱动堆电机 → 腱驱动精密化 → 欠驱动轻量化 → 软体融合"的演进:

代表自由度驱动特点定位
Shadow Dexterous Hand24(20 电机)腱驱动(气动/电机)科研标杆,超 100 传感器 @1kHz,指尖触觉可选全驱动高保真,重、贵
DLR/HIT Hand II约 15(5 指)微型 BLDC 直驱关节模块化手指,指尖力约 10N,抗冲击直驱精密路线
Pisa/IIT SoftHand19 关节1 电机 + 腱 + 软性自适应包络,本质柔顺,成本极低欠驱动典型
国产商用(因时/兆威等)6~12微型电机 + 腱/连杆性价比高、尺寸小、面向量产人形/服务机器人量产配套
🔧 工程要点与避坑
  • 腱路摩擦与迟滞:腱经过的每个弯都是摩擦源,套管弯曲半径 ≥5×腱径;用高模量低蠕变腱(Dyneema 类)并保持合理预紧,迟滞会直接表现为位置回差。
  • 张力闭环是必须品:只有电流闭环不够——腱预紧会随温升/蠕变漂移,断腱检测也靠它;张力传感器带宽与采样同步进 FOC 控制周期。
  • 电机侧编码器 ≠ 关节角:腱伸长、腱轮打滑都会引入误差;高配双编码器,低配至少做张力补偿的关节角估计。
  • 散热是硬约束:手指腔体毫米级,持续抓握(长时间大电流)会让微型电机/驱动器过热降额;设计任务占空比,必要时腱驱动把电机外移。
  • 欠驱动要防"失稳抓取":自适应包络对异形物体鲁棒,但捏持细长物时欠驱动手指可能"摊开"锁不住——关键手势(对捏)优先保留独立自由度。
  • 整手联动与解耦:腱路交叉、共享电机、差动机构都会引入轴间耦合,控制前先建"腱-关节映射矩阵"做解耦,或用整手级优化统一求解。

11. 小结

高自由度灵巧手设计的一条主线:用最少的执行器换最多的有效自由度。自由度预算先保拇指、再保四指 MCP;驱动架构首选腱驱动(轻、力可控)配合腱轮减速;传感按"电机侧角度 + 腱张力 + 指尖触觉"三层补齐;控制上把腱张力环当作灵巧手的"电流环",上层叠加位置/力矩/阻抗。与站内主线一致——每个腱驱动执行器本质上仍是一台 FOC 伺服,微型化只是把电流环、编码器、标定流程原样缩小。抓取与操作能力,最终由自由度 × 传感 × 控制的乘积决定。