发布于 

外骨骼机电架构:生物力学与关节模组

工业机械臂的围栏里不许站人,而外骨骼的"工作空间"就是人的身体。同样一台六关节机器,装在桌面上和绑在人腿上,设计逻辑完全相反:机械臂追求轨迹精度和循环时间,外骨骼的第一设计准则不是性能,是别伤害人。这条准则会一路向下渗透到每一个选型决策——减速比、编码器数量、传感器的摆放位置、安全电路的拓扑。

反面教材并不少见:早期一些"位置跟踪式"康复外骨骼把患者的腿当负载,按录制轨迹硬拽,结果肌张力高的患者全程和机器对抗,不但没训练到位,还落下关节挫伤。教训就一句话——把人当负载的设计,一定会被人反噬。这篇的每一个工程决策,都可以看作对这句话的回应。

这篇沿着"人在回路里"这条主线,把外骨骼机电架构拆成四层:生物力学输入 → 关节模组 → 传感网络 → 安全防线。每一层的设计动机,都能追溯回"它贴着人的身体工作"这个事实。

一、人在回路里:外骨骼与机械臂的根本区别

传统机器人的控制框图里,人是环境的一部分,被围栏隔在外面。外骨骼把人放进了控制回路:人的神经系统是上层控制器,肌肉是执行器,外骨骼是串并联在其中的机械腿。人发一个"抬腿"的意图,外骨骼要么跟随、要么助力、要么对抗——三者都发生在毫秒级的人机交互中。

这个区别带来四个机械臂不存在的约束:

  1. **交互力必须可控。**机械臂末端撞上东西叫碰撞检测,外骨骼与人体的每一次接触都是常态工况。人机接口处的压力要长时间保持在舒适区(一般 < 30 kPa,超过会压伤软组织并阻断血流)。
  2. **机器不能与人较劲。**人的意图随时改变,外骨骼的机械阻抗必须足够低,让人"推得动"它。这条引出了后文的核心指标:反向可驱动性。
  3. **失效模式直通人身。**机械臂急停损失的是节拍,外骨骼急停失误损失的是用户的膝关节。安全设计从"功能"升级为"架构"。
  4. **重量预算由人支付。**机械臂自重 200 kg 无所谓,底座扛着;外骨骼每多 100 g,都是用户的髋关节在爬山时多扛 100 g。功率密度和重量,在这台机器上不是成本指标,是性能指标——自重越大,助力中"自耗"的比例越高,最坏情况是机器只够搬自己。

带着这四条往下走。

二、步态周期:需求文档写在人体上

外骨骼的"负载谱"不在任何电机手册里,在步态分析实验室里。一个步态周期(水平行走约 1.0–1.2 s)分为两个相位:

  • 站立相(约 60%):足底触地、承重、支撑中期、蹬离推进。关节输出大力矩支撑体重。
  • 摆动相(约 40%):足离地、小腿前摆、伸膝准备下一次触地。主要克服肢体惯性,力矩小但速度高。

细分的八个步态分期与关节动作对应关系(矢状面):

步态分期 占周期 相位 膝关节动作 主导约束
首次触地—承重反应 0–15% 站立相 屈曲吸能(15–20°) 冲击力矩峰值
支撑中期 15–45% 站立相 伸展锁紧 体重全负荷
蹬离推进 45–60% 站立相 屈曲起步 踝跖屈主发力
摆动前期—初期 60–75% 摆动相 快速屈曲到 60–70° 转速需求
摆动中期—末期 75–100% 摆动相 减速伸展 制动控制

这张表对电气工程师的价值在于最后一列:站立相的挑战是力矩,摆动相的挑战是转速和制动——同一关节在一个周期里先后考核驱动器的两个极限。这就是为什么外骨骼关节模组不能只看额定力矩选型,必须对着"力矩-转速"全包络校核。

矢状面内三关节的峰值力矩(按体重归一化,Winter 经典数据)大致是:踝跖屈 ~1.3–1.5 Nm/kg、膝伸展 ~0.5–1.0 Nm/kg、髋伸展 ~0.6–0.8 Nm/kg。注意踝比膝大——很多人凭直觉以为膝盖最费力,其实蹬离阶段踝关节是主发力点。工程选型时按包络取值:膝取 ~1.0 Nm/kg,70 kg 用户即 ~70 Nm 的持续峰值需求。

换算成电气的语言更直观:70 Nm 作用在 0.3 m 力臂的踏板上约 230 N 的推力,按助力比 α = 0.5、关节转速 1 rad/s 计,单膝瞬时要输出 ~35 W 机械功率,加上膝髋踝三关节同相位的重叠,一条腿的峰值机械功率向 100 W 看齐——这就是电池和驱动器功率预算的来源,也是为什么外骨骼电池动辄 200 Wh 起步、还要精打细算热设计。

**上楼梯时这份表格要重画:膝关节峰值力矩接近翻倍(~1.8–2.0 Nm/kg,即 70 kg 人 ~140 Nm)。**原因有三层:一是膝屈曲幅度从行走的 ~20° 涨到 ~90°,股四头肌的力臂与负荷同步增大;二是重心每步要净升高一个台阶(~17 cm),单腿做正功没有对侧腿分摊;三是支撑全程几乎单腿承重,没有站立相双支撑期的过渡缓冲。这就是为什么有的外骨骼平地行走很优雅、一到楼梯就露馅——力矩包络没按楼梯工况设计。

把负载谱变成选型校核,一段脚本就够:

# 从步态数据拟合关节力矩包络,校核电机+减速器组合
# 力矩数据:Winter 2009 矢状面力矩,按体重归一化 (Nm/kg)
GAIT_PROFILE = {
    #  关节: (水平行走峰值, 上楼梯峰值, 摆动相峰值)
    "knee":   (1.0, 2.0, 0.4),
    "ankle":  (1.5, 1.8, 0.1),
    "hip":    (0.8, 1.2, 0.5),
}
USER_MASS = 70.0          # kg
DUTY_FACTOR = 0.3         # 峰值力矩占空比(站立相占比的经验折算)
KNEE_RATIO = 9.0          # QDD 行星减速比
MOTOR_TORQUE_CONT = 11.0  # 电机连续力矩 Nm(数据手册)
MOTOR_TORQUE_PEAK = 33.0  # 电机峰值力矩 Nm

for joint, (walk, stair, swing) in GAIT_PROFILE.items():
    tau_walk  = walk  * USER_MASS          # 水平行走需求 Nm
    tau_stair = stair * USER_MASS          # 楼梯需求 Nm(设计包络)
    tau_swing = swing * USER_MASS          # 摆动相需求 Nm(转速高)
    # 驱动链能提供的力矩(减速器效率按 0.9 计)
    avail_cont = MOTOR_TORQUE_CONT * KNEE_RATIO * 0.9
    avail_peak = MOTOR_TORQUE_PEAK * KNEE_RATIO * 0.9
    ok = tau_stair <= avail_peak and tau_walk * DUTY_FACTOR <= avail_cont * 0.6
    print(f"{joint:5s}: 行走 {tau_walk:5.1f} / 楼梯 {tau_stair:5.1f} Nm, "
          f"可用 {avail_cont:.0f}(cont)/{avail_peak:.0f}(peak) Nm -> "
          f"{'PASS' if ok else 'FAIL'}")

楼梯是包络工况,行走是发热工况——连续力矩按占空比折算去对电机的热极限,峰值力矩对减速器的瞬时极限,两条线都要过。两条线分开校核的原因很实际:峰值力矩烧的是驱动管,连续力矩烧的是绕组,失效的物理位置不同,冗余设计也得分别留。

还有一个容易被忽略的量:摆动相的速度需求。摆动相约 0.4 s 内膝关节要完成 60–70° 的屈伸,平均角速度 ~2.5 rad/s、峰值接近 4–5 rad/s。减速比放大扭矩的同时也放大转速需求——N = 9 时电机峰值转速要 ~40 rad/s(约 4000 rpm),这个数字决定了电机反电动势设计和母线电压下限。力矩和转速的乘积是功率,包络校核最后都落在功率上。

三、关节模组:QDD 与谐波的两条路线

力矩需求定了,怎么产生它?低速大扭矩有两条工业化路线,取舍的核心是一个外骨骼特有的指标。

反向可驱动性(backdrivability):电机关掉,人用手掰关节,感受到的阻力有多大。它由两部分组成——折算到负载端的摩擦(τ_friction × N)和反射惯性(J_motor × N²)。减速比 N 是把双刃剑:它把电机力矩放大 N 倍,也把反射惯性放大 N² 倍。N = 100 的系统,电机转子惯量被放大一万倍,人掰关节像在推一堵墙——这时候机器不"让"人,人机就进入较劲状态,第三节的安全问题全部被放大。

量化一下这个差别有多大:典型外骨骼电机转子惯量 ~2×10⁻⁴ kg·m²(不含单位制混淆,即是 0.0002 kg·m²),N = 100 时反射惯量 2 kg·m²——比人小腿加脚的惯量(~0.35 kg·m²)大一个数量级,穿上去就是"腿上绑了沙袋",摆动相全程人在拖着机器走。N = 9 时反射惯量只有 ~0.016 kg·m²,比肢体自身惯性小两个数量级,机械上近乎透明。减速比每降一档,透明性按平方买回来——这是 QDD 路线全部的赌注。

两条路线的对比:

维度 QDD 准直驱(行星 N≈6–10 + 大扭矩电机) 谐波减速(N≈50–160)
扭矩密度 中,靠大电机堆 高,同体积输出力矩大
反向可驱动性 好,反射惯性低、摩擦小 差,N² 反射惯性 + 柔轮摩擦
位置精度 依赖负载端编码器补偿 高,但有空程(见下节)
功耗(透明模式) 低,摩擦损耗小 高,克服减速器摩擦需持续电流
噪音 中高频电磁噪音,可优化 低速安静
成本 电机贵、行星便宜 谐波柔轮是消耗件,贵
寿命 长(滚动接触) 柔轮疲劳寿命有限,需按批次更换

结论不难猜:助力型外骨骼主流选 QDD——MIT Cheetah 系列把这条路线带火,逻辑就是"用低减速比换透明性,用力控带宽弥补力矩"。谐波路线适合康复机器人:患者没有主动力,机器牵着走,反向可驱动性无所谓,但需要大力矩密度和安静运转。没有最好的减速器,只有匹配场景的减速器。

还有第三条路线偶尔被提起:串联弹性执行器(SEA)。在减速器输出端串一个已知刚度的弹簧,用力矩传感器测它的压缩量间接得到力矩。好处是力控变成"位置环 + 弹簧换算",对总线实时性要求骤降,且弹簧天然吸收冲击;代价是带宽被弹簧质量共振限制在 ~10–20 Hz,且多了一层机械柔顺需要额外行程。康复训练这类慢速高安全场景 SEA 至今仍是主力,助力行走这类要跟步态节奏的场景,QDD 直接力控更从容——又一次"没有最好的技术,只有匹配场景的技术"。

选定减速比后回头看第二节的脚本:N = 9 时电机需要 140/9 ≈ 16 Nm 峰值力矩——这已经是相当大的电机,这就是为什么楼梯工况是外骨骼驱动器的分水岭。

选型敲定后,模组还要过三道工艺关,每道都直接对应上文某条设计准则:

  1. 热设计。1.0 Nm/kg 的连续功率在模组内部变成绕组铜耗和减速器摩擦热,而模组就绑在小腿上、贴着皮肤。绕组极限 108°C(H 级)不代表壳温可以到 108°C——壳温上限由人的耐受决定,长时间接触的安全温度在 41–44°C 量级。导热路径(绕组→机筒→铝壳)和散热面积是硬约束,必要时降额使用,把"别伤害人"从电气的翻译成热的。
  2. **线缆走向。**膝关节每步屈伸一次,一天八千步,髋膝之间的线缆就被弯折八千次。动态线缆要走关节回转中心的弧线(减少弯折幅度),接头处应力和应变消除(strain relief)必须做,弯曲寿命标称 > 1000 万次 的机器人线缆不是营销词,是这里的地板要求。
  3. **轴向布局。**人体侧影是窄的,模组轴线要尽量贴合肢体轴线、凸出量压到最小——凸在外侧的模组每走一步都在改变腿的转动惯量分布,凸得越多,摆动相控制越难做,人机协调性越差。

这三道关没有一道的解法在芯片手册里,它们都长在"机器穿在人身上"这个前提上。

四、分布式传感网络:机器的"体感"

力控的前提是知道力,透明的前提是知道位置。一套外骨骼的传感网络按"测什么"分四层:

**双编码器是标配。**电机端编码器(磁编或增量)服务 FOC 换相和高速测速;负载端编码器(绝对值磁编,17–19 bit)测真实关节角。为什么必须两个?谐波/行星减速器不是刚体:谐波柔轮靠弹性变形传动,存在 0.5–2° 空程与滞回,负载侧还有结构变形。只用电机端编码器反推关节角,误差在力矩增大时非线性扩大——而力控恰恰要在大力矩下工作。双编码器差值还能在线估计减速器变形量,做温度补偿和磨损监控。

这里有个权衡很实际:双编码器方案下,负载端分辨率决定了力控的"眼睛"分辨率。17 bit 绝对值编码器在 360° 内分 131072 份,量化步长 ~10 arcsec;对一个 0.5 kg·m² 的反射惯量做 1 kHz 差分两次求角加速度,量化噪声会被放大 dt² 倒数倍——编码器噪声是力控抖动的头号来源,这就是为什么负载端要上 17 bit 起步而不是便宜的 12 bit(量化步长差 32 倍,二阶差分后噪声差三个数量级)。

双编码器装好后的第一件事是零点标定——两个编码器测量的是同一根"名义上的"轴,安装误差必须标掉:

# 双编码器零点标定:静置多姿态采样,拟合电机端->负载端映射偏移
import numpy as np

def calibrate_dual_encoder(q_motor, q_load, tau):
    """q_motor/q_load: 各姿态角序列, tau: 对应关节力矩(标定砝码或已知力)
    模型: q_load = q_motor / N + offset + k_deflection * tau  (减速器弹性)
    """
    N_guess = 9.0
    x = q_motor / N_guess                 # 电机角折算到负载侧
    A = np.column_stack([np.ones_like(x), tau])
    offset, k_deflection = np.linalg.lstsq(A, q_load - x, rcond=None)[0]
    resid = q_load - (x + offset + k_deflection * tau)
    return {
        "ratio_check": np.polyfit(x, q_load, 1)[0],   # 斜率应接近 1/N
        "offset_deg": np.degrees(offset),
        "compliance_deg_per_Nm": np.degrees(k_deflection),
        "residual_arcmin": np.std(np.degrees(resid)) * 60,  # 验收: < 3 arcmin
    }

残差这项就是减速器柔性的"体检报告"——新模组标一次、按周期重标,compliance 系数漂移超过两成,就是该查磨损的信号。

**力矩/力传感器决定放哪。**串联弹性方案把应变片贴在关节输出轴上(UR 机械臂的做法);直接测量人机交互力则把六维力传感器放在绑带/护板与框架之间(膝、踝各一)。前者测关节输出(给控制器),后者测人机接触(给安全层与助力意图识别)——测的对象不同,放的位置就不同,很多设计混淆了这两者。

**足底 FSR 阵列做步态相位检测。**足跟、第一跖骨、第五跖骨、足尖四点压阻传感器,成本几块钱,采样 100 Hz 就够。足底压力中心从足跟滚到跖骨的轨迹就是步态相位的直接物理信号,比纯 IMU 估计可靠——它不怕传感器漂移,坏一个点还有三个能兜底。

**多节点 IMU 补盲区。**大腿、小腿、躯干各一 9 轴 IMU,与双编码器做互补滤波:编码器给关节相对角(快、准、无漂移),IMU 给绝对姿态(慢、漂移、但不受机械变形影响)。两者融合后的关节绝对角误差可压到 1–2°,这是摆动相控制的地基。

各传感节点的采样率分工也值得一张表——它背后是"每个信号拿来做什么"的决策,不是拍脑袋的堆料:

传感节点 采样率 主要用途 数据去向
电机端编码器 20–40 kHz FOC 换相、转速 驱动器本地(不上总线)
负载端编码器 1–5 kHz 关节角、导纳外环 实时总线 → 控制器
关节力矩/六维力 1–2 kHz 力控反馈、意图估计 实时总线 → 控制器 + 安全层
足底 FSR 阵列 100 Hz 步态相位检测 独立 MCU → 状态话题
多节点 IMU 200–500 Hz 绝对姿态、融合 状态话题(非实时链路)

注意采样率最高两个信号(换相用编码器、电流环)根本不上总线——它们在驱动器本地闭环,总线上只传结果。这是实时系统的分工智慧:把最快的环留在最靠近执行器的地方,总线只承担毫秒级的协调。

四层传感各自独立供电、独立走线,这份冗余不是浪费——它直接服务于下一节。

五、安全三道防线:层层失效,层层兜底

"别伤害人"落到工程上是一组嵌套的防线,设计原则只有两条:每道防线的响应时间要快于人受伤的过程,且任何一道失效不影响其余两道。

先看人受伤需要多久:从异常力矩出现到软组织损伤,量级在百毫秒到秒级;从摔倒启动到头部触地,约 300–500 ms。三道防线的响应时间必须全部嵌进这个窗口,且递进兜底——正常情况下第一道就够了,第一道瞎了有第二道,第二道也瞎了有第三道。

**第一道:机械硬限位。**关节两端加工出的挡块加无源弹性垫(聚氨酯或碟簧),把关节活动范围锁死在人体解剖学范围以内(如膝 -90°–0°,永远不许过伸)。响应时间"零"——它是物理约束,不依赖任何电子。失效独立性强:断电、固件崩溃、传感器全毁,它都在。代价是体积和重量,这是花克重买回来的最后一道墙。

第二道:驱动器底层硬切断。在 FOC 驱动板固件(最好在 FPGA/硬件比较器层)实现三重保护:瞬时力矩限幅(电流环阈值比较,~10 μs)、绕组温度看门狗(超阈值停发 PWM)、位置增量窗(单位时间角度变化超限即封波,防失控甩腿)。这一层必须在驱动器本地闭环,不能依赖上位机——哪怕 EtherCAT 断线、ROS 2 死机,驱动器自己得能停。响应时间 ~100 μs 级。

值得展开一层:温度看门狗为什么能靠"本地"解决——电机绕组的热时间常数是分钟级,而过热恰恰是穿戴设备最隐蔽的伤害路径(低温烫伤在 44°C 以上持续接触即可发生,比急性挫伤更难被用户察觉)。绕组到人皮肤隔着机筒、空气层和衣物,驱动器端的 NTC 在热传导链条的源头,比贴在人机接口的皮肤温度计早几分钟看到趋势——安全层的传感器要放在能最早看见危险的地方,而不是最方便放的地方。

**第三道:ROS 2 顶层安全监控状态机。**一个独立节点订阅所有传感话题 + 急停按钮 + 心跳,跑一个显式状态机:

# safety_monitor 声明式配置:状态机 + 触发条件 + 独立监护
safety_monitor:
  ros__parameters:
    heartbeat_timeout_ms: 50        # 控制器心跳丢失即降级
    joint_torque_limit_nm: 90.0     # 包络的 1.3 倍冗余
    interaction_force_limit_n: 180  # 人机接口力上限
    fsr_phase_timeout_ms: 1500      # 步态相位信号消失
    states:
      NORMAL:        { transitions: { FAULT: [torque, force, heartbeat], SOFT_STOP: [e_stop_sw] } }
      SOFT_STOP:     { action: ramp_down_200ms, transitions: { NORMAL: [operator_reset] } }
      FAULT:         { action: free_mode_drop_stiffness, transitions: { NORMAL: [operator_reset_two_hand] } }
    independence:
      power_rail: independent_5v    # 监控节点独立供电,不与逻辑共轨
      channel: dedicated_eth_port   # 不与实时控制流共链路

注意 FAULT 态的动作是卸刚度而不是锁关节——穿戴中外骨骼突然锁死比缓慢卸力危险得多(人会摔倒)。这一层响应 ~10 ms 级,慢于驱动器层,但它看得见全局:人机交互力、步态逻辑、操作员意图,这些是底层看不见的。

三道防线的关键指标:

防线 响应时间 依赖 失效独立性
机械限位 0(物理) 无 完全独立
驱动器底层 ~100 μs 驱动板本地供电 独立于上位机
ROS 2 监控 ~10 ms 独立电源轨 + 专用链路 独立于控制节点

三行的依赖列没有一个交集——这不是巧合,是架构约束:如果第三道防线的供电和数据链路都挂在被监控对象上,那它监控的可靠性就和被监控者同生共死,防线名存实亡。设计评审时拿这张表逐行问"这行挂了,下一行还活着吗",是检验安全架构最快的方法。

紧急停机的最后一环是硬件级 STO(安全扭矩关断)通道,它切断的是驱动级的功率使能——这条通路必须与上面的软件体系完全隔离,细节在安全电路篇展开。

软硬件联动

关节模组里的双编码器和力矩保护,最终都落在那块 FOC 驱动板上——电流环怎么在 10 μs 里完成限幅判断,见三相 FOC 驱动板:栅极驱动与电流采样。

力矩硬切断再往下挖一层,是驱动级安全通路的设计:STO 布线、医疗级隔离、双通道冗余——见安全电路篇穿戴式安全电路:STO 急停与医疗级隔离。

控制系统侧的实时保障——PREEMPT_RT 内核调优与 EtherCAT 主站部署,见那篇环境构建。

本篇与控制篇的关系一句话说清:**这里给出的是"身体"——力矩包络、机械阻抗、传感分辨率、安全边界;下一篇给出"反射"——电流环之上每一层控制律怎么用这些身体条件,让机器"让"着人。**身体不达标,反射再快也是白搭;这也是为什么每一节都反复回到"人在回路里"这条主线。

参考文献

  1. Winter, D. A. Biomechanics and Motor Control of Human Movement. 4th ed., Wiley, 2009.(步态周期与三关节力矩包络的原始数据来源,本篇第二节的"需求文档")
  2. Young, A. J., & Ferris, D. P. "State of the Art and Future Directions for Lower Limb Robotic Exoskeletons." IEEE Transactions on Neural Systems and Rehabilitation Engineering, vol. 25, no. 2, pp. 171–182, 2017.(下肢外骨骼综述,驱动与传感选型的产业共识)
  3. Yan, T., Cempini, M., Oddo, C. M., & Vitiello, N. "Review of Assistive Strategies in Powered Lower-Limb Orthoses and Exoskeletons." Robotics and Autonomous Systems, vol. 64, pp. 120–136, 2015.(助力策略与执行器路线对比)
  4. McFadyen, B. J., & Winter, D. A. "An Integrated Biomechanical Analysis of Stair Climbing Tasks." Journal of Biomechanics, vol. 21, no. 9, pp. 733–744, 1988.(楼梯工况力矩翻倍的经典测量)
  5. Harmonic Drive Systems. Engineering Data: CSF/SHF Series Strain Wave Gears.(柔轮变形、空程与寿命规格,双编码器必要性的依据)
  6. Wensing, P. M., Blank, S. C., Siebert, T. P., & Bledt, G. D. "Proprioceptive Actuator Design in the MIT Cheetah Model & Control of a Quadruped Robot." IEEE/ASME Transactions on Mechatronics, vol. 27, no. 2, pp. 902–913, 2022.(QDD 准直驱路线的代表作)

模组有了、传感有了、安全框架有了,剩下的问题是:控制环怎么让这台机器"让"着人?下一篇进入力控世界:外骨骼柔顺控制:EtherCAT 实时总线与导纳控制。