1. 引言

随着人形机器人的高速发展,机器人控制越来越智能。在机器人关节控制中,柔顺控制正逐步取代 CSP 等传统位置控制,成为主流的控制模式。这一转变的背后,是人形机器人在复杂动态环境中对安全性、适应性和交互能力提出的更高要求。

2. 为什么柔顺控制正在取代位置控制

传统 CSP 位置控制强调关节角度的高精度跟踪,适用于结构固定、环境可预测的工业场景。但人形机器人面对的是非结构化环境,需要与人和物体频繁接触。此时,刚性位置控制容易产生过大接触力,带来安全隐患。柔顺控制通过主动调节关节的力与位置关系,让机器人具备“让一步”的能力,从而在接触任务中更安全、更自然。

3. 柔顺控制的核心思路

柔顺控制的核心,是把关节从单纯的“位置跟随器”转变为“力位协调器”。它不再只盯着目标角度,而是同时感知外部力矩,并根据控制策略调整输出。常见的实现方式包括阻抗控制和导纳控制:前者通过调节惯量、阻尼和刚度参数来塑造动态响应;后者则根据外力修正期望轨迹,再交给底层位置环执行。

3.1 阻抗控制的基本原理

阻抗控制的核心思想,是不直接控制接触力,而是通过调节关节的机械阻抗(惯量、阻尼、刚度)来建立期望的力与位置偏差之间的动态关系。当机器人末端受到外力作用时,阻抗控制会让关节表现出类似弹簧-阻尼系统的响应:外力越大,位置偏差越大;刚度越低,关节越“柔软”。这样,机器人既能在自由空间中精确跟踪轨迹,又能在接触时主动“让步”,避免产生过大的冲击力。

从动力学角度看,阻抗控制把机器人末端等效为一个二阶质量-弹簧-阻尼系统,其期望动态关系可用如下方程描述:

M_d * (x'' - x_d'') + B_d * (x' - x_d') + K_d * (x - x_d) = F_ext

其中,x 为机器人末端的实际位置,x_d 为期望位置,F_ext 为外部施加的接触力。等式左侧的三项分别对应惯量、阻尼和刚度对位置偏差的约束,右侧则是外力输入。当系统处于稳态且速度为零时,上式退化为:

K_d * (x - x_d) = F_ext

这说明在静态接触时,位置偏差与外力成正比,比例系数由刚度矩阵 K_d 决定。刚度越小,同样的外力产生的偏差越大,关节表现得越柔顺。

在工程实现中,阻抗参数常以比例-微分(PD)形式体现。若把期望惯量设为系统固有惯量,则控制律可写成:

tau = K_p * (q_d - q) - K_d * q' + tau_ff

其中,K_p 为位置增益(对应刚度),决定关节抵抗位置偏差的能力,K_p 越大关节越“硬”,跟踪精度越高但柔顺性越差;K_d 为速度增益(对应阻尼),决定对关节速度的抑制程度,K_d 越大能量耗散越快,越能抑制振荡,但过大会让响应迟钝;q_dq 分别为期望与实际关节角度,q' 为实际角速度,tau_ff 为前馈力矩项。实际整定时,通常先根据任务刚度需求确定 K_p,再按临界阻尼条件选取 K_d,使系统在接触瞬间既不振荡也不过度迟缓。

3.2 阻抗控制的实现方式

阻抗控制通常分为两类实现路径。一类是基于力矩控制的阻抗控制,它直接由关节力矩环根据期望阻抗模型计算输出力矩,响应快、柔顺性好,但对底层力矩控制精度和模型准确性要求较高。另一类是基于位置修正的阻抗控制,它先根据外力偏差计算出期望的位置修正量,再交给底层位置环执行,实现相对简单,适合在现有位置控制平台上叠加柔顺能力。

3.3 阻抗参数的作用与调节

阻抗控制的效果主要由三个参数决定:刚度决定关节抵抗变形的能力,刚度越低柔顺性越强;阻尼决定能量耗散的速度,合适的阻尼能抑制振荡、让响应更平稳;惯量影响动态响应的快慢。实际应用中,常根据任务阶段动态调节这些参数:例如在快速运动中提高刚度以保证跟踪精度,在接触瞬间降低刚度并增大阻尼以吸收冲击。

下面以一个单关节为例,说明阻抗参数的整定流程。假设该关节为机器人手臂的肩关节,其固有惯量约为 0.05 kg·m²,驱动器力矩环带宽足够,可忽略底层延迟对整定的影响。

第一步:确定刚度。刚度直接决定关节的柔顺程度与稳态位置偏差。以落地缓冲任务为例,脚掌触地瞬间冲击力可达数百牛·米,若刚度设置过高,关节几乎不产生位置偏差,冲击力将直接传递到机体结构,容易造成损伤。因此应选取较低的刚度,例如 K_d = 200 N·m/rad,使关节在受到冲击时能产生足够的让步量来吸收能量。而对于抛光打磨这类需要保持恒定接触力的任务,刚度则不宜过低,否则打磨头会因重力或表面反力产生过大偏移,导致接触力不稳定,通常取 K_d = 800 N·m/rad 左右。

第二步:按临界阻尼条件选取阻尼。在刚度确定后,阻尼的选取应使系统接近临界阻尼,从而在接触瞬间既不产生明显振荡,也不过度迟缓。对于等效质量-弹簧-阻尼系统,临界阻尼系数为 B_c = 2 * sqrt(K_d * M_d)。仍以上述落地缓冲任务为例,取 K_d = 200 N·m/rad、M_d = 0.05 kg·m²,则 B_c = 2 * sqrt(200 * 0.05) ≈ 6.3 N·m·s/rad。实际工程中可在此基础上适当增大阻尼(如取 B_d = 8 N·m·s/rad),以进一步抑制触地瞬间的高频振荡。对于抛光打磨任务,取 K_d = 800 N·m/rad、M_d = 0.05 kg·m²,则 B_c = 2 * sqrt(800 * 0.05) ≈ 12.6 N·m·s/rad,可选取 B_d = 14 N·m·s/rad 左右,使打磨头在表面起伏时能快速、平稳地跟随接触力变化。

第三步:调节惯量。惯量参数影响动态响应的快慢。落地缓冲任务中,较大的期望惯量(如 M_d = 0.08 kg·m²)能延缓关节对冲击的响应速度,让缓冲过程更平缓,避免瞬间位移过大;而抛光打磨任务需要末端快速响应表面起伏,期望惯量应接近或略小于系统固有惯量(如 M_d = 0.04 kg·m²),以保证接触力调节的实时性。

综合来看,不同任务对阻抗参数的取向差异明显:落地缓冲追求的是吸收冲击、保护机体,因此采用低刚度、中等偏大阻尼、较大惯量的组合,让关节在触地瞬间“软着陆”;抛光打磨追求的是接触力恒定与表面跟随精度,因此采用较高刚度、较大阻尼、较小惯量的组合,让末端既能抵抗重力扰动,又能快速响应表面起伏。实际整定时,还需结合关节力矩环带宽、传感器噪声和任务节拍进行现场微调,通常先在仿真中按上述步骤初定参数,再在实物上以小步长逐步逼近最优值。

3.4 阻抗控制与导纳控制的对比

阻抗控制与导纳控制本质上是同一柔顺思路的两种实现视角。阻抗控制以位置偏差为输入、以力为输出,适合配备高精度力矩传感器的关节;导纳控制则以力为输入、以位置修正为输出,适合底层为位置环的关节。在人形机器人中,两者常结合使用:腿部落地缓冲多用阻抗控制,手臂人机协作则更倾向导纳控制。

4. 在人形机器人关节中的典型应用

在人形机器人中,柔顺控制广泛应用于腿部落地缓冲、手臂抓取、人机协作等场景。例如,双足行走时脚掌与地面的冲击力,可以通过关节阻抗调节来吸收;上肢在与人对拉或搬运重物时,则可以通过导纳控制实现“顺着力走”的效果。这些能力是 CSP 位置控制难以直接提供的。

在工程实践中,柔顺控制往往需要落实到具体的关节控制模式上。以人形机器人常用的关节伺服驱动器为例,PVT(Position-Velocity-Time,无力传感器)PVF(Position-Velocity-Force,有力传感器)是两种典型的工作模式,它们分别对应了阻抗控制与导纳控制在底层关节上的实现形态。

4.1 PVT 模式:无力传感器下的柔顺实现

PVT 模式是一种基于位置、速度与时间插值的运动控制模式,其核心特征是不依赖关节力/力矩传感器。驱动器按照预设的轨迹点(位置、速度、时间)进行插值运动,通过精确控制关节的位置与速度来间接实现柔顺效果。由于缺少力反馈,PVT 模式下的柔顺主要依靠前馈力矩补偿阻抗参数整定来实现:系统根据关节动力学模型估算外部负载,再通过调节刚度与阻尼参数,让关节在接触时表现出一定的“让步”能力。

PVT 模式的优点是结构简单、成本低、可靠性高,适合对力感知精度要求不高、但需要平滑轨迹跟踪的场景。其局限在于,当外部接触力变化剧烈或模型误差较大时,缺乏实时力反馈会导致柔顺效果打折,甚至出现接触力过大的风险。

4.2 PVF 模式:有力传感器下的力位混合控制

PVF 模式则在 PVT 的基础上引入了力/力矩传感器,形成位置-速度-力的闭环控制。驱动器不仅跟踪位置与速度轨迹,还能实时读取关节或末端所受的外部力,并根据力误差动态修正输出。这种模式本质上实现了导纳控制:当外部力超过设定阈值时,系统主动调整期望位置,让关节“顺着外力走”,从而在接触任务中保持恒定且安全的接触力。

PVF 模式的优点是柔顺精度高、适应性强,能够应对复杂多变的接触环境;其代价是需要额外配置力传感器,并对传感器噪声、标定与滤波提出更高要求。在人形机器人中,PVF 模式通常用于对接触力有严格约束的精细操作任务。

下面给出一个基于导纳控制的 PVF 模式关节控制示例,展示力传感器读取、期望位置修正与位置环输出的核心逻辑。该示例以 C++ 伪代码形式呈现,便于理解控制流程。

// PVF 模式:基于导纳控制的力位混合关节控制示例
// 核心思路:读取外部力矩 -> 计算位置修正量 -> 更新期望位置 -> 交给底层位置环

class PvfAdmittanceController {
public:
    // 导纳参数(需根据关节特性整定)
    double M_d = 0.1;   // 期望惯量
    double B_d = 20.0;  // 期望阻尼
    double K_d = 500.0; // 期望刚度(柔顺度越高,K_d 越小)

    // 控制周期(秒)
    double dt = 0.001;

    // 状态变量
    double q_d = 0.0;        // 期望关节位置(修正后)
    double q_d_dot = 0.0;    // 期望关节速度
    double q_d_ddot = 0.0;   // 期望关节加速度
    double q_d_prev = 0.0;   // 上一周期的期望位置

    // 位置环增益(底层位置环参数)
    double Kp_pos = 800.0;   // 位置增益
    double Kd_pos = 50.0;    // 速度增益

    // 力传感器读取接口(由驱动器/传感器驱动提供)
    double readJointTorque() {
        // 实际工程中:读取关节力矩传感器原始值,
        // 经过滤波(如低通滤波)与标定后返回单位 N·m
        return filtered_torque;
    }

    // 导纳控制核心:根据外力修正期望位置
    void updateAdmittance(double tau_ext) {
        // 1. 由导纳模型计算期望加速度:
        //    M_d * q_d_ddot + B_d * q_d_dot + K_d * (q_d - q_d_ref) = tau_ext
        //    其中 q_d_ref 为无外力时的原始目标位置
        double q_d_ref = getTargetPosition(); // 原始轨迹目标

        // 位置偏差项(弹簧项)
        double spring_term = K_d * (q_d - q_d_ref);

        // 由导纳方程反解期望加速度
        q_d_ddot = (tau_ext - B_d * q_d_dot - spring_term) / M_d;

        // 2. 数值积分更新期望速度与期望位置
        q_d_dot += q_d_ddot * dt;
        q_d += q_d_dot * dt;

        // 3. 限幅保护:防止修正量过大导致关节超限
        clampPositionAndVelocity();
    }

    // 底层位置环:输出位置指令给伺服驱动器
    double computePositionCommand(double q_actual, double q_actual_dot) {
        // 位置环采用 PD 控制,输出为位置指令(或速度指令)
        double pos_error = q_d - q_actual;
        double vel_error = q_d_dot - q_actual_dot;
        return Kp_pos * pos_error + Kd_pos * vel_error;
    }

    // 主控制循环(每个控制周期调用一次)
    void controlLoop(double q_actual, double q_actual_dot) {
        // 1. 读取关节外部力矩(力传感器)
        double tau_ext = readJointTorque();

        // 2. 导纳控制:根据外力修正期望位置
        updateAdmittance(tau_ext);

        // 3. 位置环输出,驱动关节运动
        double cmd = computePositionCommand(q_actual, q_actual_dot);
        sendToMotor(cmd); // 发送给底层位置环/驱动器
    }

private:
    double filtered_torque = 0.0;

    double getTargetPosition() {
        // 返回当前轨迹规划器给出的原始目标位置
        return trajectory_target;
    }

    void clampPositionAndVelocity() {
        // 对 q_d 与 q_d_dot 做限幅,防止修正量越界
    }

    void sendToMotor(double cmd) {
        // 将位置/速度指令下发至关节驱动器
    }

    double trajectory_target = 0.0;
};

上述代码中,updateAdmittance 函数体现了导纳控制的核心:它以力传感器读到的外部力矩 tau_ext 为输入,通过二阶导纳模型(惯量、阻尼、刚度)计算出期望位置的修正量,使关节在受到外力时“顺着外力走”;随后底层位置环(PD 控制)跟踪修正后的期望位置,最终实现力位混合控制。实际工程中还需注意传感器滤波、参数整定与限幅保护,以保证系统的稳定性与安全性。

4.3 应用实例:表面抛光打磨

表面抛光打磨是 PVT 与 PVF 模式在人形机器人关节中的典型应用场景。打磨过程中,机器人末端需要与工件表面保持持续、均匀的接触压力:压力过大会损伤工件表面,压力过小则无法达到抛光效果。

  • 采用 PVF 模式:机器人关节通过力传感器实时感知打磨头与工件之间的接触力,当表面起伏导致压力波动时,系统立即调整关节位置,使接触力始终维持在设定范围内。这保证了抛光质量的一致性,也避免了因工件表面不平整而产生的冲击损伤。
  • 采用 PVT 模式:在工件表面相对规整、接触力变化平缓的粗抛阶段,可以使用 PVT 模式配合预先整定的阻抗参数,以较低成本完成轨迹跟踪与基础柔顺,减少对力传感器的依赖。

实际工程中,常采用PVT 与 PVF 混合切换的策略:粗抛阶段用 PVT 模式快速走轨迹,精抛阶段切换至 PVF 模式精细控制接触力,从而在成本、效率与质量之间取得平衡。

4.4 其他典型应用

除表面抛光打磨外,PVT 与 PVF 模式还广泛用于以下场景:

  • 装配与插拔:利用 PVF 模式感知插孔反力,引导关节柔顺对准,避免卡死或损坏工件。
  • 人机协作搬运:通过 PVF 模式实现“顺着力走”,让机器人配合操作者的推拉力完成重物搬运。
  • 双足行走落地缓冲:在脚掌触地瞬间,利用 PVT 模式配合低刚度阻抗参数吸收冲击,减少对关节和机体的冲击损伤。
  • 医疗康复与按摩:通过 PVF 模式控制末端接触力,确保对患者施加的压力安全、均匀、可调。

5. 总结与展望

柔顺控制逐步取代 CSP 等位置控制,本质上是人形机器人从“精确执行”走向“安全交互”的必然结果。未来,随着力传感器、关节驱动器和学习算法的进步,柔顺控制将更加智能,让人形机器人在真实世界中走得更稳、动得更自然。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐