第12章:任务空间控制与优化

在前面的章节中,我们探讨了机器人的运动规划和模型预测控制。然而,实际的机器人任务通常定义在操作空间(末端执行器空间)而非关节空间。本章将深入研究如何在任务空间中直接设计控制器,以及如何通过优化方法协调多个竞争性任务。我们将特别关注全身控制(Whole-Body Control, WBC)框架,它能够同时处理运动控制、力控制和约束满足问题。通过本章的学习,读者将掌握现代机器人系统中广泛应用的任务空间控制理论,并理解如何在实际系统中实现高性能的全身控制器。

12.1 操作空间控制

12.1.1 操作空间动力学

操作空间控制的核心思想是直接在任务相关的坐标系中设计控制律,而不是在关节空间中。考虑一个n自由度的机器人,其关节空间动力学方程为:

$$\mathbf{M}(\mathbf{q})\ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}} + \mathbf{g}(\mathbf{q}) = \boldsymbol{\tau} + \mathbf{J}^T\mathbf{f}_{ext}$$ 其中,$\mathbf{M}(\mathbf{q}) \in \mathbb{R}^{n \times n}$是质量矩阵,$\mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})$包含科氏力和离心力项,$\mathbf{g}(\mathbf{q})$是重力项,$\boldsymbol{\tau}$是关节力矩,$\mathbf{f}_{ext}$是外部接触力。

设任务空间坐标为$\mathbf{x} \in \mathbb{R}^m$(通常$m < n$),其与关节空间的关系为: $$\mathbf{x} = \mathbf{f}(\mathbf{q})$$ 对时间求导得到速度和加速度关系: $$\dot{\mathbf{x}} = \mathbf{J}(\mathbf{q})\dot{\mathbf{q}}$$ $$\ddot{\mathbf{x}} = \mathbf{J}(\mathbf{q})\ddot{\mathbf{q}} + \dot{\mathbf{J}}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}}$$ 其中$\mathbf{J}(\mathbf{q}) = \frac{\partial \mathbf{f}}{\partial \mathbf{q}}$是任务雅可比矩阵。

通过投影关节空间动力学到任务空间,我们得到操作空间动力学方程: $$\mathbf{\Lambda}(\mathbf{x})\ddot{\mathbf{x}} + \mathbf{\mu}(\mathbf{x}, \dot{\mathbf{x}}) + \mathbf{p}(\mathbf{x}) = \mathbf{F} + \mathbf{F}_{ext}$$ 其中:

  • $\mathbf{\Lambda}(\mathbf{x}) = (\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1}$:操作空间惯性矩阵
  • $\mathbf{\mu}(\mathbf{x}, \dot{\mathbf{x}}) = \mathbf{\Lambda}\mathbf{J}\mathbf{M}^{-1}(\mathbf{C}\dot{\mathbf{q}} - \mathbf{M}\dot{\mathbf{J}}\dot{\mathbf{q}})$:操作空间科氏力/离心力
  • $\mathbf{p}(\mathbf{x}) = \mathbf{\Lambda}\mathbf{J}\mathbf{M}^{-1}\mathbf{g}$:操作空间重力
  • $\mathbf{F}$:操作空间控制力

12.1.2 操作空间控制律设计

基于操作空间动力学,我们可以设计解耦的控制律。一个典型的操作空间控制器具有如下形式: $$\mathbf{F} = \mathbf{\Lambda}(\mathbf{x})\mathbf{a}_d + \mathbf{\mu}(\mathbf{x}, \dot{\mathbf{x}}) + \mathbf{p}(\mathbf{x})$$ 其中$\mathbf{a}_d$是期望的任务空间加速度,可以通过PD控制律计算: $$\mathbf{a}_d = \ddot{\mathbf{x}}_d + \mathbf{K}_p(\mathbf{x}_d - \mathbf{x}) + \mathbf{K}_d(\dot{\mathbf{x}}_d - \dot{\mathbf{x}})$$ 相应的关节力矩为: $$\boldsymbol{\tau} = \mathbf{J}^T\mathbf{F} + \mathbf{N}^T\boldsymbol{\tau}_0$$ 其中$\mathbf{N} = \mathbf{I} - \mathbf{J}^T\mathbf{J}^{#T}$是零空间投影矩阵,$\mathbf{J}^{#} = \mathbf{M}^{-1}\mathbf{J}^T\mathbf{\Lambda}$是动力学一致的伪逆,$\boldsymbol{\tau}_0$是零空间控制力矩。

        任务空间                     关节空间
    ┌─────────────┐              ┌─────────────┐
    │  x_d, ẋ_d   │              │      q      │
    └──────┬──────┘              └──────┬──────┘
           │                             │
           ▼                             ▼
    ┌─────────────┐              ┌─────────────┐
    │  PD控制器   │              │   正运动学   │
    └──────┬──────┘              └──────┬──────┘
           │                             │
           ▼                             ▼
    ┌─────────────┐              ┌─────────────┐
    │     a_d     │              │   x, ẋ      │
    └──────┬──────┘              └──────┬──────┘
           │                             │
           ▼                             │
    ┌─────────────┐                     │
    │  动力学补偿  │◄────────────────────┘
    └──────┬──────┘
           │
           ▼
    ┌─────────────┐
    │      F      │
    └──────┬──────┘
           │
           ▼
    ┌─────────────┐
    │   τ = J^TF  │
    └─────────────┘

12.1.3 力/位置混合控制

在许多实际应用中,我们需要同时控制位置和力。例如,在装配任务中,某些方向需要位置控制以保证精度,而其他方向需要力控制以避免过大的接触力。混合控制框架通过选择矩阵实现这种分离: $$\mathbf{F} = \mathbf{S}\mathbf{F}_{motion} + (\mathbf{I} - \mathbf{S})\mathbf{F}_{force}$$ 其中$\mathbf{S} \in \mathbb{R}^{m \times m}$是对角选择矩阵,对角元素为0或1:

  • $s_{ii} = 1$:第i个方向执行位置控制
  • $s_{ii} = 0$:第i个方向执行力控制

位置控制分量: $$\mathbf{F}_{motion} = \mathbf{\Lambda}(\ddot{\mathbf{x}}_d + \mathbf{K}_p\mathbf{e}_p + \mathbf{K}_d\mathbf{e}_v) + \mathbf{\mu} + \mathbf{p}$$ 力控制分量: $$\mathbf{F}_{force} = \mathbf{F}_d + \mathbf{K}_f(\mathbf{F}_d - \mathbf{F}_{measured})$$

12.1.4 阻抗控制与导纳控制

阻抗控制是一种统一处理位置和力控制的方法,它通过调节机器人的动态行为来实现期望的接触交互。阻抗控制的目标是使末端执行器表现出期望的质量-弹簧-阻尼系统行为: $$\mathbf{M}_d(\ddot{\mathbf{x}} - \ddot{\mathbf{x}}_d) + \mathbf{D}_d(\dot{\mathbf{x}} - \dot{\mathbf{x}}_d) + \mathbf{K}_d(\mathbf{x} - \mathbf{x}_d) = \mathbf{F}_{ext}$$ 其中$\mathbf{M}_d$、$\mathbf{D}_d$、$\mathbf{K}_d$分别是期望的惯性、阻尼和刚度矩阵。

实现阻抗控制的控制律为: $$\mathbf{F} = \mathbf{\Lambda}\mathbf{M}_d^{-1}[\mathbf{M}_d\ddot{\mathbf{x}}_d + \mathbf{D}_d(\dot{\mathbf{x}}_d - \dot{\mathbf{x}}) + \mathbf{K}_d(\mathbf{x}_d - \mathbf{x}) - \mathbf{F}_{ext}] + \mathbf{\mu} + \mathbf{p}$$ 导纳控制则是阻抗控制的对偶形式,它根据测量的力来调整位置: $$\mathbf{M}_d\ddot{\mathbf{e}} + \mathbf{D}_d\dot{\mathbf{e}} + \mathbf{K}_d\mathbf{e} = \mathbf{F}_{ext} - \mathbf{F}_d$$ 其中$\mathbf{e} = \mathbf{x}_m - \mathbf{x}$是修正后的位置误差。

12.2 二次规划基全身控制(QP-Based WBC)

12.2.1 WBC问题表述

全身控制(Whole-Body Control)是一种系统性的控制框架,能够同时处理多个任务、约束和接触。与传统的操作空间控制不同,WBC通过优化方法来协调可能相互冲突的目标。标准的WBC问题可以表述为以下二次规划(QP)问题: $$\begin{aligned} \min_{\ddot{\mathbf{q}}, \boldsymbol{\tau}, \mathbf{f}} \quad & \sum_{i=1}^{N_t} w_i |\mathbf{A}_i\ddot{\mathbf{q}} + \mathbf{b}_i|^2 + w_\tau |\boldsymbol{\tau}|^2 \\ \text{s.t.} \quad & \mathbf{M}\ddot{\mathbf{q}} + \mathbf{h} = \mathbf{S}^T\boldsymbol{\tau} + \sum_{j=1}^{N_c}\mathbf{J}_j^T\mathbf{f}_j \\ & \mathbf{J}_j\ddot{\mathbf{q}} + \dot{\mathbf{J}}_j\dot{\mathbf{q}} = \mathbf{0}, \quad j \in \mathcal{C} \\ & \mathbf{f}_j \in \mathcal{F}_j, \quad j = 1, \ldots, N_c \\ & \mathbf{q}_{min} \leq \mathbf{q} + \Delta t\dot{\mathbf{q}} + \frac{\Delta t^2}{2}\ddot{\mathbf{q}} \leq \mathbf{q}_{max} \\ & \dot{\mathbf{q}}_{min} \leq \dot{\mathbf{q}} + \Delta t\ddot{\mathbf{q}} \leq \dot{\mathbf{q}}_{max} \\ & \boldsymbol{\tau}_{min} \leq \boldsymbol{\tau} \leq \boldsymbol{\tau}_{max} \end{aligned}$$ 其中:

  • $N_t$是任务数量,$N_c$是接触点数量
  • $w_i$是第i个任务的权重
  • $\mathbf{A}_i$和$\mathbf{b}_i$定义第i个任务的期望加速度
  • $\mathbf{S}$是选择矩阵(对于浮动基座系统)
  • $\mathcal{C}$是活跃接触集合
  • $\mathcal{F}_j$是第j个接触点的摩擦锥

12.2.2 任务定义与优先级

在WBC框架中,任务通常定义为期望的加速度约束。常见的任务类型包括:

1. 笛卡尔空间任务: $$\mathbf{A}_i = \mathbf{J}_i, \quad \mathbf{b}_i = -\dot{\mathbf{J}}_i\dot{\mathbf{q}} + \ddot{\mathbf{x}}_i^{des}$$ 其中$\ddot{\mathbf{x}}_i^{des} = \ddot{\mathbf{x}}_i^{ref} + \mathbf{K}_{p,i}(\mathbf{x}_i^{ref} - \mathbf{x}_i) + \mathbf{K}_{d,i}(\dot{\mathbf{x}}_i^{ref} - \dot{\mathbf{x}}_i)$

2. 关节空间任务: $$\mathbf{A}_i = \mathbf{I}, \quad \mathbf{b}_i = \ddot{\mathbf{q}}_i^{des}$$

3. 质心(CoM)任务: $$\mathbf{A}_i = \mathbf{J}_{CoM}, \quad \mathbf{b}_i = -\dot{\mathbf{J}}_{CoM}\dot{\mathbf{q}} + \ddot{\mathbf{c}}^{des}$$

4. 角动量任务: $$\mathbf{A}_i = \mathbf{A}_G, \quad \mathbf{b}_i = -\dot{\mathbf{A}}_G\dot{\mathbf{q}} + \dot{\mathbf{L}}^{des}$$ 任务优先级可以通过两种方式实现:

软优先级:通过调整权重$w_i$来实现相对优先级

高优先级任务: w_high = 1000
中优先级任务: w_mid = 100  
低优先级任务: w_low = 1

硬优先级:使用层次化QP(Hierarchical QP) $$\begin{aligned} \text{Level 1:} \quad & \min_{\mathbf{x}} |\mathbf{A}_1\mathbf{x} - \mathbf{b}_1|^2 \\ & \text{s.t. } \text{dynamics and constraints} \\ \text{Level 2:} \quad & \min_{\mathbf{x}} |\mathbf{A}_2\mathbf{x} - \mathbf{b}_2|^2 \\ & \text{s.t. } \mathbf{A}_1\mathbf{x} = \mathbf{A}_1\mathbf{x}_1^* \\ & \quad \text{dynamics and constraints} \end{aligned}$$

12.2.3 QP求解器选择与实现

对于实时控制,QP求解器的选择至关重要。常用的求解器包括:

1. 稠密QP求解器: - qpOASES:适用于中小规模问题(<1000变量) - OSQP:基于ADMM,适用于稀疏问题 - ProxQP:基于原始-对偶方法,数值稳定性好

2. 求解器性能对比

问题规模: 30个变量, 50个约束
┌────────────┬──────────┬──────────┬──────────┐
  求解器      求解时间  迭代次数  精度     
├────────────┼──────────┼──────────┼──────────┤
 qpOASES      0.8 ms      15      1e-8    
 OSQP         0.5 ms      25      1e-6    
 ProxQP       0.6 ms      10      1e-7    
└────────────┴──────────┴──────────┴──────────┘

3. 问题规模化与稀疏性利用

对于大规模机器人系统,利用问题的稀疏结构可以显著提升性能: $$\mathbf{H} = \begin{bmatrix} \mathbf{H}_{qq} & \mathbf{0} & \mathbf{J}_1^T & \cdots & \mathbf{J}_{N_c}^T \\ \mathbf{0} & \mathbf{R}_\tau & \mathbf{0} & \cdots & \mathbf{0} \\ \mathbf{J}_1 & \mathbf{0} & \mathbf{0} & \cdots & \mathbf{0} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \mathbf{J}_{N_c} & \mathbf{0} & \mathbf{0} & \cdots & \mathbf{0} \end{bmatrix}$$ 其中$\mathbf{H}_{qq} = \sum_{i=1}^{N_t} w_i\mathbf{A}_i^T\mathbf{A}_i$是加速度的海塞矩阵。

12.2.4 WBC实现流程

┌─────────────────────────┐
│    传感器数据获取        │
│  (q, q̇, IMU, F/T)      │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    状态估计             │
│  (浮动基座状态)         │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    任务定义             │
│  (位置、力、平衡等)     │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    构建QP问题           │
│  (目标函数+约束)        │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    求解QP              │
│  (获得q̈*, τ*, f*)     │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    力矩映射            │
│  (τ_cmd = S^Tτ*)      │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│    执行器控制          │
└─────────────────────────┘

12.3 接触一致性与动力学可行性

12.3.1 接触约束建模

在全身控制中,正确建模接触约束是保证控制器性能的关键。接触约束包括运动学约束和力学约束两个方面。

运动学接触约束

对于刚性接触,接触点的加速度必须为零(无滑动、无分离): $$\mathbf{J}_c\ddot{\mathbf{q}} + \dot{\mathbf{J}}_c\dot{\mathbf{q}} = \mathbf{0}$$ 对于软接触或柔顺接触,可以放松这个约束: $$\mathbf{J}_c\ddot{\mathbf{q}} + \dot{\mathbf{J}}_c\dot{\mathbf{q}} = \mathbf{a}_c^{des}$$ 其中$\mathbf{a}_c^{des}$可以包含期望的接触运动(如调整接触位置)。

力学接触约束

接触力必须满足物理约束:

  1. 单向约束(接触力只能推不能拉): $$f_{n,j} \geq 0, \quad \forall j \in \mathcal{C}$$

  2. 摩擦锥约束: $$|\mathbf{f}_{t,j}| \leq \mu_j f_{n,j}$$ 其中$\mathbf{f}_{t,j}$是切向力,$f_{n,j}$是法向力,$\mu_j$是摩擦系数。

  3. 线性化摩擦锥(用于QP求解):

将圆锥约束线性化为棱锥: $$\mathbf{f}_j = \sum_{k=1}^{N_f} \lambda_{jk}\mathbf{v}_{jk}, \quad \lambda_{jk} \geq 0$$ 其中$\mathbf{v}_{jk}$是棱锥的生成向量:

      法向 n
        ↑
        │     
    v₃  │  v₂
      ╲ │ ╱
       ╲│╱
    ────┼────► 切向 t₁
       ╱│╲
      ╱ │ ╲
    v₄  │  v₁
        │
        ▼ 切向 t₂

12.3.2 动力学一致性条件

动力学一致性确保计算的加速度、力和力矩满足机器人的动力学方程。这需要在QP中加入等式约束: $$\mathbf{M}\ddot{\mathbf{q}} + \mathbf{h} = \mathbf{S}^T\boldsymbol{\tau} + \sum_{j \in \mathcal{C}}\mathbf{J}_j^T\mathbf{f}_j$$ 对于欠驱动系统(如人形机器人),动力学方程可以分解为: $$\begin{bmatrix} \mathbf{M}_{ff} & \mathbf{M}_{fa} \\ \mathbf{M}_{af} & \mathbf{M}_{aa} \end{bmatrix} \begin{bmatrix} \ddot{\mathbf{q}}_f \\ \ddot{\mathbf{q}}_a \end{bmatrix} + \begin{bmatrix} \mathbf{h}_f \\ \mathbf{h}_a \end{bmatrix} = \begin{bmatrix} \mathbf{0} \\ \boldsymbol{\tau}_a \end{bmatrix} + \sum_j \begin{bmatrix} \mathbf{J}_{f,j}^T \\ \mathbf{J}_{a,j}^T \end{bmatrix} \mathbf{f}_j$$ 其中下标$f$表示浮动基座(6自由度),$a$表示驱动关节。

12.3.3 质心动力学与ZMP约束

质心(CoM)动力学

质心的运动由牛顿-欧拉方程决定: $$m\ddot{\mathbf{c}} = m\mathbf{g} + \sum_{j \in \mathcal{C}}\mathbf{f}_j$$

$$\dot{\mathbf{L}}_G = \sum_{j \in \mathcal{C}}(\mathbf{p}_j - \mathbf{c}) \times \mathbf{f}_j + \boldsymbol{\tau}_{ext}$$ 其中$\mathbf{L}_G$是关于质心的角动量,$\mathbf{p}_j$是接触点位置。

ZMP(零力矩点)约束

对于平面接触,ZMP必须位于支撑多边形内部以保证动态平衡: $$\mathbf{p}_{ZMP} = \frac{\sum_j \mathbf{p}_j f_{n,j}}{\sum_j f_{n,j}}$$ ZMP约束可以表示为线性不等式: $$\mathbf{A}_{ZMP}\mathbf{p}_{ZMP} \leq \mathbf{b}_{ZMP}$$ 其中$\mathbf{A}_{ZMP}$和$\mathbf{b}_{ZMP}$定义支撑多边形的半空间表示。

12.3.4 接触切换与模式调度

处理接触模式切换是WBC的一个重要挑战。常见的策略包括:

1. 接触检测与分类

根据力传感器和运动学信息判断接触状态:

if (f_measured > f_threshold && |v_contact| < v_threshold):
    contact_state = STABLE_CONTACT
elif (f_measured > f_threshold && |v_contact| > v_threshold):
    contact_state = SLIDING_CONTACT
else:
    contact_state = NO_CONTACT

2. 平滑接触建立

使用时间函数平滑地建立接触约束: $$w_{contact}(t) = \begin{cases} 0 & t < t_0 \\ \frac{1}{2}(1 - \cos(\pi\frac{t-t_0}{T})) & t_0 \leq t \leq t_0 + T \\ 1 & t > t_0 + T \end{cases}$$

3. 接触力分配

当存在多个接触点时,需要优化力分配: $$\begin{aligned} \min_{\mathbf{f}} \quad & \sum_j |\mathbf{f}_j - \mathbf{f}_{j,nom}|^2 \\ \text{s.t.} \quad & \sum_j \mathbf{f}_j = \mathbf{F}_{total} \\ & \sum_j (\mathbf{p}_j - \mathbf{c}) \times \mathbf{f}_j = \boldsymbol{\tau}_{total} \\ & \mathbf{f}_j \in \mathcal{F}_j \end{aligned}$$

12.3.5 鲁棒性增强策略

为提高WBC的鲁棒性,可以采用以下策略:

1. 约束软化

引入松弛变量处理不可行情况: $$\begin{aligned} \min \quad & |\mathbf{e}_{task}|^2 + w_{slack}|\boldsymbol{\epsilon}|^2 \\ \text{s.t.} \quad & \text{constraints} + \boldsymbol{\epsilon} \end{aligned}$$

2. 接触力正则化

添加接触力的正则项以避免数值问题: $$J_{reg} = \alpha_f\sum_j|\mathbf{f}_j|^2 + \alpha_{\Delta f}\sum_j|\mathbf{f}_j - \mathbf{f}_{j,prev}|^2$$

3. 加速度限制

限制加速度变化率以提高平滑性: $$|\ddot{\mathbf{q}} - \ddot{\mathbf{q}}_{prev}| \leq \Delta\ddot{q}_{max}$$

12.4 案例研究:双臂协作机器人Baxter

12.4.1 系统概述与挑战

Baxter是Rethink Robotics开发的双臂协作机器人,具有独特的设计特点和控制挑战:

硬件配置

  • 双7自由度手臂(共14个驱动关节)
  • 串联弹性驱动器(Series Elastic Actuators, SEA)
  • 集成力/力矩传感
  • 末端执行器:平行夹爪或真空吸盘
  • 工作空间:每臂约1.2米范围

控制挑战

  1. 双臂协调:两臂协同操作时的运动同步和力分配
  2. 柔顺性管理:SEA带来的固有柔顺性需要特殊处理
  3. 安全约束:人机协作环境下的安全性要求
  4. 计算效率:实时控制下的计算资源限制

12.4.2 双臂协作的WBC实现

系统建模

将Baxter建模为具有14个驱动自由度的固定基座机器人: $$\mathbf{q} = [\mathbf{q}_L^T, \mathbf{q}_R^T]^T \in \mathbb{R}^{14}$$ 其中$\mathbf{q}_L, \mathbf{q}_R \in \mathbb{R}^7$分别为左右臂的关节角度。

动力学方程考虑SEA的弹性: $$\mathbf{M}(\mathbf{q})\ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}} + \mathbf{g}(\mathbf{q}) = \mathbf{K}_s(\boldsymbol{\theta}_m - \mathbf{q}) + \mathbf{J}^T\mathbf{f}_{ext}$$ 其中$\mathbf{K}_s$是弹簧刚度矩阵,$\boldsymbol{\theta}_m$是电机角度。

双臂协作任务定义

  1. 相对位姿任务

定义两个末端执行器之间的相对位姿: $$\mathbf{x}_{rel} = \mathbf{T}_L^{-1} \mathbf{T}_R$$ 相应的任务雅可比: $$\mathbf{J}_{rel} = [-\mathbf{J}_L, \mathbf{J}_R]$$

  1. 载荷分配任务

对于共同抓持的物体,力分配满足: $$\mathbf{f}_L + \mathbf{f}_R = \mathbf{f}_{obj}$$ $$\boldsymbol{\tau}_L + \boldsymbol{\tau}_R + (\mathbf{p}_L - \mathbf{p}_{obj}) \times \mathbf{f}_L + (\mathbf{p}_R - \mathbf{p}_{obj}) \times \mathbf{f}_R = \boldsymbol{\tau}_{obj}$$

  1. 内力优化

最小化内力以减少能耗: $$\mathbf{f}_{int} = \frac{1}{2}(\mathbf{f}_L - \mathbf{f}_R)$$ 目标函数包含内力惩罚项: $$J_{int} = w_{int}|\mathbf{f}_{int}|^2$$ QP问题构建

双臂协作的QP问题: $$\begin{aligned} \min_{\ddot{\mathbf{q}}, \boldsymbol{\tau}} \quad & w_1|\mathbf{J}_{rel}\ddot{\mathbf{q}} + \dot{\mathbf{J}}_{rel}\dot{\mathbf{q}} - \ddot{\mathbf{x}}_{rel}^{des}|^2 \\ & + w_2|\mathbf{J}_{obj}\ddot{\mathbf{q}} + \dot{\mathbf{J}}_{obj}\dot{\mathbf{q}} - \ddot{\mathbf{x}}_{obj}^{des}|^2 \\ & + w_3|\ddot{\mathbf{q}} - \ddot{\mathbf{q}}_{posture}|^2 \\ & + w_4|\boldsymbol{\tau}|^2 \\ \text{s.t.} \quad & \mathbf{M}\ddot{\mathbf{q}} + \mathbf{h} = \boldsymbol{\tau} + \mathbf{J}^T\mathbf{f}_{ext} \\ & \mathbf{q}_{min} \leq \mathbf{q} + \Delta t\dot{\mathbf{q}} + \frac{\Delta t^2}{2}\ddot{\mathbf{q}} \leq \mathbf{q}_{max} \\ & \dot{\mathbf{q}}_{min} \leq \dot{\mathbf{q}} + \Delta t\ddot{\mathbf{q}} \leq \dot{\mathbf{q}}_{max} \\ & \boldsymbol{\tau}_{min} \leq \boldsymbol{\tau} \leq \boldsymbol{\tau}_{max} \\ & \text{collision avoidance constraints} \end{aligned}$$

12.4.3 碰撞避免策略

自碰撞检测

使用胶囊体(capsule)近似机器人连杆:

     左臂                    右臂
   ┌──────┐                ┌──────┐
     L1                    R1  
   └───┬──┘                └──┬───┘
                              
   ┌───▼──┐                ┌──▼───┐
     L2                    R2  
   └───┬──┘                └──┬───┘
             最小距离          
   ┌───▼──┐  <---------->  ┌──▼───┐
     L3     d_min > d_safe   R3  
   └──────┘                └──────┘

距离约束表示为: $$d_{ij} = |\mathbf{p}_i - \mathbf{p}_j| - r_i - r_j \geq d_{safe}$$ 其中$\mathbf{p}_i, \mathbf{p}_j$是胶囊体中心,$r_i, r_j$是半径。

线性化为速度约束: $$\mathbf{n}_{ij}^T(\mathbf{v}_i - \mathbf{v}_j) \geq -k_{avoid}(d_{ij} - d_{safe})$$ 其中$\mathbf{n}_{ij}$是从$i$指向$j$的单位向量。

环境碰撞避免

使用虚拟力场方法: $$\mathbf{F}_{rep} = \begin{cases} k_{rep}\left(\frac{1}{d} - \frac{1}{d_{inf}}\right)\frac{1}{d^2}\mathbf{n} & d < d_{inf} \\ \mathbf{0} & d \geq d_{inf} \end{cases}$$ 将排斥力转换为加速度约束: $$\mathbf{J}_{obs}\ddot{\mathbf{q}} \geq -\mathbf{\Lambda}^{-1}\mathbf{F}_{rep} - \dot{\mathbf{J}}_{obs}\dot{\mathbf{q}}$$

12.4.4 SEA补偿与力控制

SEA动力学补偿

串联弹性驱动器引入额外的动力学: $$\mathbf{I}_m\ddot{\boldsymbol{\theta}}_m + \mathbf{B}_m\dot{\boldsymbol{\theta}}_m = \boldsymbol{\tau}_m - \mathbf{K}_s(\boldsymbol{\theta}_m - \mathbf{q})$$ 其中$\mathbf{I}_m$是电机惯量,$\mathbf{B}_m$是电机阻尼。

力矩估计

基于弹簧变形估计关节力矩: $$\hat{\boldsymbol{\tau}} = \mathbf{K}_s(\boldsymbol{\theta}_m - \mathbf{q})$$ 使用卡尔曼滤波器融合编码器和力矩测量: $$\begin{aligned} \mathbf{x}_k &= \mathbf{A}\mathbf{x}_{k-1} + \mathbf{B}\mathbf{u}_{k-1} + \mathbf{w}_{k-1} \\ \mathbf{z}_k &= \mathbf{H}\mathbf{x}_k + \mathbf{v}_k \end{aligned}$$ 其中状态$\mathbf{x} = [\mathbf{q}^T, \dot{\mathbf{q}}^T, \boldsymbol{\tau}^T]^T$。

阻抗控制实现

考虑SEA柔顺性的阻抗控制器: $$\boldsymbol{\tau}_m = \mathbf{K}_s(\boldsymbol{\theta}_m^{des} - \mathbf{q}) + \mathbf{D}_s(\dot{\boldsymbol{\theta}}_m^{des} - \dot{\mathbf{q}})$$ 其中: $$\boldsymbol{\theta}_m^{des} = \mathbf{q} + \mathbf{K}_s^{-1}[\mathbf{J}^T(\mathbf{K}_p\mathbf{e}_p + \mathbf{K}_d\mathbf{e}_v) + \mathbf{g}(\mathbf{q})]$$

12.4.5 实验结果与性能分析

任务场景:双臂搬运

实验设置:

  • 物体质量:2.5 kg
  • 搬运距离:0.8 m
  • 控制频率:100 Hz
  • QP求解时间:< 5 ms

性能指标

  1. 轨迹跟踪误差
位置误差 (RMS): 8.3 mm
姿态误差 (RMS): 2.1°
相对位姿误差: 3.5 mm
  1. 力控制性能
内力范围: 5-15 N
载荷分配误差: < 10%
接触力稳定时间: 0.8 s
  1. 计算性能
┌─────────────────┬──────────┐
│ 计算模块         │ 时间(ms) │
├─────────────────┼──────────┤
│ 动力学计算       │   1.2    │
│ 雅可比计算       │   0.8    │
│ QP构建          │   1.5    │
│ QP求解          │   3.2    │
│ 后处理          │   0.3    │
├─────────────────┼──────────┤
│ 总计            │   7.0    │
└─────────────────┴──────────┘

鲁棒性测试

  1. 外部扰动响应: - 施加20N脉冲力 - 恢复时间:1.2s - 最大位置偏差:45mm

  2. 负载变化适应: - 负载突变:+1kg - 力分配调整时间:0.5s - 稳态误差:<5%

12.4.6 实现要点与优化

代码架构

WBC控制器
├── 状态估计器
│   ├── 关节状态滤波
│   ├── 力矩估计
│   └── 外力估计
├── 任务管理器
│   ├── 任务优先级调度
│   ├── 任务激活/去激活
│   └── 任务参数更新
├── QP求解器
│   ├── 问题构建
│   ├── 稀疏矩阵处理
│   └── 热启动策略
└── 安全监控
    ├── 碰撞检测
    ├── 力矩限制
    └── 紧急停止

优化技巧

  1. QP热启动: 使用前一时刻的解作为初始猜测: $$\mathbf{x}_0^{(k)} = \mathbf{x}^{(k-1)} + \Delta t\dot{\mathbf{x}}^{(k-1)}$$

  2. 稀疏矩阵利用: 利用块对角结构加速计算: $$\mathbf{M} = \begin{bmatrix} \mathbf{M}_L & \mathbf{0} \\ \mathbf{0} & \mathbf{M}_R \end{bmatrix} + \mathbf{M}_{coupling}$$

  3. 任务缓存: 预计算不变的任务矩阵:

if (!task_changed):
    use_cached_jacobian()
else:
    recompute_jacobian()
    update_cache()

12.5 本章小结

本章深入探讨了任务空间控制与优化的核心理论和实践方法。我们从操作空间控制的基本原理出发,逐步构建了完整的全身控制框架,并通过Baxter双臂机器人的案例展示了这些理论在实际系统中的应用。

关键概念回顾

操作空间控制

  • 操作空间动力学方程:$\mathbf{\Lambda}(\mathbf{x})\ddot{\mathbf{x}} + \mathbf{\mu}(\mathbf{x}, \dot{\mathbf{x}}) + \mathbf{p}(\mathbf{x}) = \mathbf{F} + \mathbf{F}_{ext}$
  • 动力学一致的伪逆:$\mathbf{J}^{#} = \mathbf{M}^{-1}\mathbf{J}^T\mathbf{\Lambda}$
  • 零空间投影:$\mathbf{N} = \mathbf{I} - \mathbf{J}^T\mathbf{J}^{#T}$
  • 阻抗控制律:$\mathbf{M}_d(\ddot{\mathbf{x}} - \ddot{\mathbf{x}}_d) + \mathbf{D}_d(\dot{\mathbf{x}} - \dot{\mathbf{x}}_d) + \mathbf{K}_d(\mathbf{x} - \mathbf{x}_d) = \mathbf{F}_{ext}$

二次规划基全身控制(QP-WBC)

  • 多任务优化框架:同时处理多个可能冲突的任务目标
  • 动力学一致性约束:$\mathbf{M}\ddot{\mathbf{q}} + \mathbf{h} = \mathbf{S}^T\boldsymbol{\tau} + \sum_j\mathbf{J}_j^T\mathbf{f}_j$
  • 接触约束:运动学约束$\mathbf{J}_c\ddot{\mathbf{q}} + \dot{\mathbf{J}}_c\dot{\mathbf{q}} = \mathbf{0}$和摩擦锥约束$\mathbf{f}_j \in \mathcal{F}_j$
  • 软/硬优先级管理:通过权重或层次化QP实现任务优先级

接触一致性与动力学可行性

  • 接触模式管理:检测、分类和切换接触状态
  • ZMP约束:$\mathbf{p}_{ZMP} = \frac{\sum_j \mathbf{p}_j f_{n,j}}{\sum_j f_{n,j}}$必须在支撑多边形内
  • 接触力分配优化:在多接触情况下优化力分配
  • 鲁棒性增强:约束软化、力正则化、加速度限制

核心公式总结

  1. 任务空间到关节空间映射: $$\boldsymbol{\tau} = \mathbf{J}^T\mathbf{F} + \mathbf{N}^T\boldsymbol{\tau}_0$$

  2. 标准QP-WBC问题: $$\min_{\ddot{\mathbf{q}}, \boldsymbol{\tau}, \mathbf{f}} \sum_{i=1}^{N_t} w_i |\mathbf{A}_i\ddot{\mathbf{q}} + \mathbf{b}_i|^2 + w_\tau |\boldsymbol{\tau}|^2$$

  3. 质心动力学: $$m\ddot{\mathbf{c}} = m\mathbf{g} + \sum_{j \in \mathcal{C}}\mathbf{f}_j$$

  4. 线性化摩擦锥: $$\mathbf{f}_j = \sum_{k=1}^{N_f} \lambda_{jk}\mathbf{v}_{jk}, \quad \lambda_{jk} \geq 0$$

实践要点

  1. 实时性考虑: - 选择合适的QP求解器(qpOASES、OSQP、ProxQP) - 利用问题稀疏性和结构 - 使用热启动策略 - 预计算和缓存不变量

  2. 稳定性保证: - 确保动力学一致性 - 满足接触约束 - 处理数值问题(正则化、约束软化) - 平滑接触切换

  3. 性能优化: - 任务优先级合理设置 - 权重参数调优 - 计算负载均衡 - 并行化关键计算

与其他章节的联系

  • 第11章(全身控制基础):本章是第11章理论的深化和实践应用
  • 第9-10章(MPC):QP-WBC可视为单步MPC,共享优化框架
  • 第4-6章(接触规划):接触约束建模直接应用了接触力学理论
  • 第13章(实时实现):本章的算法需要第13章的加速技术才能达到实时性能

12.6 练习题

基础题

练习12.1 导出操作空间惯性矩阵

证明操作空间惯性矩阵$\mathbf{\Lambda} = (\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1}$确实表示任务空间的有效惯性。

提示:从关节空间动力学方程出发,使用$\ddot{\mathbf{q}} = \mathbf{J}^{#}(\ddot{\mathbf{x}} - \dot{\mathbf{J}}\dot{\mathbf{q}}) + \mathbf{N}\ddot{\mathbf{q}}_0$。

答案

从关节空间动力学方程开始: $$\mathbf{M}\ddot{\mathbf{q}} + \mathbf{h} = \boldsymbol{\tau}$$ 使用关系式$\ddot{\mathbf{x}} = \mathbf{J}\ddot{\mathbf{q}} + \dot{\mathbf{J}}\dot{\mathbf{q}}$,解出: $$\ddot{\mathbf{q}} = \mathbf{J}^{#}(\ddot{\mathbf{x}} - \dot{\mathbf{J}}\dot{\mathbf{q}}) + (\mathbf{I} - \mathbf{J}^{#}\mathbf{J})\ddot{\mathbf{q}}_0$$ 其中$\mathbf{J}^{#}$是某种伪逆。代入动力学方程并左乘$\mathbf{J}\mathbf{M}^{-1}$: $$\mathbf{J}\ddot{\mathbf{q}} + \mathbf{J}\mathbf{M}^{-1}\mathbf{h} = \mathbf{J}\mathbf{M}^{-1}\boldsymbol{\tau}$$ 由于$\mathbf{J}\ddot{\mathbf{q}} = \ddot{\mathbf{x}} - \dot{\mathbf{J}}\dot{\mathbf{q}}$,且$\boldsymbol{\tau} = \mathbf{J}^T\mathbf{F} + \text{null space terms}$: $$(\ddot{\mathbf{x}} - \dot{\mathbf{J}}\dot{\mathbf{q}}) + \mathbf{J}\mathbf{M}^{-1}\mathbf{h} = \mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T\mathbf{F}$$ 重新整理得到: $$(\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1}\ddot{\mathbf{x}} + \text{velocity/gravity terms} = \mathbf{F}$$ 因此$\mathbf{\Lambda} = (\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1}$确实是操作空间的有效惯性矩阵。

练习12.2 动力学一致伪逆的性质

证明动力学一致的伪逆$\mathbf{J}^{#} = \mathbf{M}^{-1}\mathbf{J}^T\mathbf{\Lambda}$满足以下性质:

  1. $\mathbf{J}\mathbf{J}^{#} = \mathbf{I}_m$(左逆性质)
  2. $\mathbf{N} = \mathbf{I} - \mathbf{J}^{#}\mathbf{J}$是幂等的($\mathbf{N}^2 = \mathbf{N}$)
  3. $\mathbf{J}\mathbf{N} = \mathbf{0}$

提示:利用$\mathbf{\Lambda} = (\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1}$的定义。

答案
  1. 左逆性质: $$\mathbf{J}\mathbf{J}^{#} = \mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T\mathbf{\Lambda} = \mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T(\mathbf{J}\mathbf{M}^{-1}\mathbf{J}^T)^{-1} = \mathbf{I}_m$$

  2. 幂等性: $$\mathbf{N}^2 = (\mathbf{I} - \mathbf{J}^{#}\mathbf{J})(\mathbf{I} - \mathbf{J}^{#}\mathbf{J})$$ $$= \mathbf{I} - \mathbf{J}^{#}\mathbf{J} - \mathbf{J}^{#}\mathbf{J} + \mathbf{J}^{#}\mathbf{J}\mathbf{J}^{#}\mathbf{J}$$ $$= \mathbf{I} - 2\mathbf{J}^{#}\mathbf{J} + \mathbf{J}^{#}(\mathbf{J}\mathbf{J}^{#})\mathbf{J}$$ $$= \mathbf{I} - 2\mathbf{J}^{#}\mathbf{J} + \mathbf{J}^{#}\mathbf{J} = \mathbf{N}$$

  3. 零空间性质: $$\mathbf{J}\mathbf{N} = \mathbf{J}(\mathbf{I} - \mathbf{J}^{#}\mathbf{J}) = \mathbf{J} - \mathbf{J}\mathbf{J}^{#}\mathbf{J} = \mathbf{J} - \mathbf{J} = \mathbf{0}$$

练习12.3 摩擦锥线性化误差分析

考虑将圆锥摩擦约束$|\mathbf{f}_t| \leq \mu f_n$线性化为4面棱锥。计算线性化引入的最大相对误差。

提示:考虑圆锥和棱锥在切平面上的投影差异。

答案

圆锥约束:$f_t^2 = f_{t1}^2 + f_{t2}^2 \leq (\mu f_n)^2$

4面棱锥约束:$|f_{t1}| \leq \mu f_n / \sqrt{2}$且$|f_{t2}| \leq \mu f_n / \sqrt{2}$

最大误差出现在45°方向:

  • 圆锥允许:$f_t = \mu f_n$
  • 棱锥允许:$f_t = \mu f_n / \sqrt{2}$(在对角线方向)

相对误差: $$\varepsilon = \frac{\mu f_n - \mu f_n/\sqrt{2}}{\mu f_n} = 1 - \frac{1}{\sqrt{2}} \approx 29.3\%$$ 使用8面棱锥可将误差降至约7.6%。

练习12.4 ZMP稳定性条件

推导平面接触情况下ZMP必须位于支撑多边形内的条件,并说明为什么这保证了动态平衡。

提示:考虑绕支撑边缘的力矩平衡。

答案

ZMP是地面反作用力的等效作用点,其定义为使得该点处净力矩(除垂直轴外)为零的点。

对于平面接触,考虑绕支撑多边形边缘的力矩: $$\tau_{edge} = (\mathbf{p}_{ZMP} - \mathbf{p}_{edge}) \times \mathbf{F}_{GRF}$$ 如果ZMP在支撑多边形内:

  • 所有边缘的力矩都指向多边形内部
  • 机器人不会绕任何边缘倾倒
  • 接触力分布可行(所有$f_{n,i} \geq 0$)

如果ZMP在支撑多边形外:

  • 存在边缘的力矩指向外部
  • 机器人将绕该边缘倾倒
  • 需要负的法向力(物理不可行)

因此,ZMP在支撑多边形内是动态平衡的必要充分条件。

挑战题

练习12.5 层次化QP的数值稳定性

设计一个数值稳定的层次化QP求解算法,处理任务之间可能的数值冲突。考虑以下情况:

  1. 高优先级任务接近奇异
  2. 任务之间存在微小但非零的冲突
  3. 数值精度限制导致的约束违反

提示:考虑使用正则化和松弛变量。

答案

层次化QP with数值稳定性增强:

Level k问题: $$\begin{aligned} \min_{\mathbf{x}, \boldsymbol{\epsilon}_k} \quad & |\mathbf{A}_k\mathbf{x} - \mathbf{b}_k|^2 + \alpha_k|\mathbf{x} - \mathbf{x}_{ref}|^2 + \beta_k|\boldsymbol{\epsilon}_k|^2 \\ \text{s.t.} \quad & \mathbf{A}_i\mathbf{x} = \mathbf{A}_i\mathbf{x}_i^* + \boldsymbol{\epsilon}_{i,k}, \quad i < k \\ & |\boldsymbol{\epsilon}_{i,k}| \leq \varepsilon_{tol} \\ & \text{dynamics and inequality constraints} \end{aligned}$$ 关键技术:

  1. Tikhonov正则化($\alpha_k$项):处理接近奇异的任务
  2. 松弛变量($\boldsymbol{\epsilon}_{i,k}$):允许微小违反以处理数值冲突
  3. 有界松弛:限制违反量保证合理性
  4. 参考解($\mathbf{x}_{ref}$):提供备选方向

实现细节:

  • 使用SVD检测任务奇异性
  • 自适应调整$\alpha_k$和$\beta_k$
  • 监控约束违反并动态调整$\varepsilon_{tol}$

练习12.6 多接触场景的力分配优化

设计一个算法,在四足机器人的四个脚掌接触情况下,优化分配接触力以:

  1. 最小化关节力矩
  2. 最大化稳定性裕度
  3. 避免接触滑动 考虑计算效率,使其能在1ms内完成。

提示:将问题分解为解析部分和优化部分。

答案

两阶段力分配算法

阶段1:解析计算基础解

利用虚功原理,给定期望的质心力和力矩: $$\begin{bmatrix} \mathbf{F}_{CoM} \\ \boldsymbol{\tau}_{CoM} \end{bmatrix} = \sum_{i=1}^{4} \begin{bmatrix} \mathbf{I}_3 \\ \mathbf{r}_i \times \end{bmatrix} \mathbf{f}_i$$ 使用伪逆获得最小范数解: $$\mathbf{f}_{base} = \mathbf{G}^{\dagger} \begin{bmatrix} \mathbf{F}_{CoM} \\ \boldsymbol{\tau}_{CoM} \end{bmatrix}$$ 阶段2:快速二次优化

在基础解附近优化: $$\begin{aligned} \min_{\Delta\mathbf{f}} \quad & \mathbf{f}^T\mathbf{W}_\tau\mathbf{f} + \alpha\sum_i d_i^2(\mathbf{p}_{ZMP,i}) \\ \text{s.t.} \quad & \mathbf{f}_i = \mathbf{f}_{base,i} + \Delta\mathbf{f}_i \\ & \mathbf{G}\Delta\mathbf{f} = \mathbf{0} \quad \text{(保持总力/力矩)} \\ & \mathbf{f}_i \in \mathcal{F}_i^{inner} \quad \text{(收缩的摩擦锥)} \end{aligned}$$ 其中:

  • $\mathbf{W}_\tau = \mathbf{J}^T\mathbf{R}\mathbf{J}$近似力矩权重
  • $d_i(\mathbf{p}_{ZMP,i})$是局部ZMP到支撑边界的距离
  • $\mathcal{F}_i^{inner} = 0.8\mathcal{F}_i$提供安全裕度

计算优化

  • 预计算$\mathbf{G}^{\dagger}$和零空间基
  • 使用解析梯度
  • 限制迭代次数(最多10次)
  • 缓存不变矩阵

典型执行时间:0.3-0.8ms

练习12.7 接触切换的平滑过渡

设计一个控制策略,使机器人从双脚支撑平滑过渡到单脚支撑,同时保持:

  1. 连续的关节加速度
  2. 有界的接触力变化率
  3. ZMP始终在安全区域内

提示:使用时变权重和预测控制。

答案

平滑接触切换策略

时间参数化(切换周期$T_{switch}$): $$s(t) = \begin{cases} 0 & t < 0 \\ \frac{1}{2}(1 - \cos(\pi t/T_{switch})) & 0 \leq t \leq T_{switch} \\ 1 & t > T_{switch} \end{cases}$$ 权重调度

  • 抬起脚的接触约束权重:$w_{lift}(t) = (1-s(t))w_0$
  • 支撑脚的稳定性权重:$w_{sup}(t) = (1+s(t))w_0$
  • ZMP约束收缩:$\mathcal{S}(t) = (1-0.3s(t))\mathcal{S}_0$

QP公式修改: $$\begin{aligned} \min \quad & \sum_i w_i(t)|\mathbf{e}_i|^2 + w_\Delta|\ddot{\mathbf{q}} - \ddot{\mathbf{q}}_{prev}|^2 \\ & + w_f\sum_j|\mathbf{f}_j - \mathbf{f}_{j,prev}|^2 \\ \text{s.t.} \quad & \text{dynamics} \\ & f_{n,lift}(t) \geq (1-s(t))f_{min} \\ & \mathbf{p}_{ZMP} \in \mathcal{S}(t) \\ & |\dot{\mathbf{f}}| \leq \dot{f}_{max} \end{aligned}$$ 预测补偿

使用短时预测(0.1-0.2s)调整当前控制: $$\mathbf{u}(t) = \mathbf{u}_{QP}(t) + \mathbf{K}_{pred}(\mathbf{x}_{pred} - \mathbf{x}_{des})$$ 实施要点

  • 提前规划ZMP轨迹向支撑脚移动
  • 逐渐减小抬起脚的期望法向力
  • 监控实际接触力,动态调整切换速度
  • 使用力传感器反馈检测实际分离时刻

练习12.8 WBC框架的形式化验证

证明在给定的假设条件下,QP-based WBC框架能够保证:

  1. Lyapunov稳定性
  2. 约束满足的递归可行性
  3. 渐近跟踪性能

提示:构造合适的Lyapunov函数并利用QP的最优性条件。

答案

定理:在以下假设下,QP-WBC保证闭环稳定性:

  1. QP在每个时刻都可行
  2. 期望轨迹是可行的
  3. 模型误差有界

证明概要

Lyapunov函数构造: $$V(\mathbf{e}) = \mathbf{e}^T\mathbf{P}\mathbf{e} + \int_0^t \mathbf{f}^T(\tau)\mathbf{R}\mathbf{f}(\tau)d\tau$$ 其中$\mathbf{e} = [\mathbf{e}_p^T, \mathbf{e}_v^T]^T$是跟踪误差。

稳定性分析

QP的最优性保证: $$\dot{V} = -\mathbf{e}^T\mathbf{Q}\mathbf{e} - \sum_i w_i|\mathbf{e}_{task,i}|^2 \leq 0$$ 由LaSalle不变性原理,系统收敛到最大不变集: $$\mathcal{M} = \{\mathbf{e} : \dot{V} = 0\} = \{\mathbf{e} : \mathbf{e} = \mathbf{0}\}$$ 递归可行性

定义可行集: $$\mathcal{X}_k = \{\mathbf{x} : \exists \mathbf{u}, \text{s.t. constraints satisfied}\}$$ QP约束设计保证: $$\mathbf{x}_k \in \mathcal{X}_k \Rightarrow \mathbf{x}_{k+1} \in \mathcal{X}_{k+1}$$ 通过终端约束和输入约束的careful设计实现。

跟踪性能

定义性能指标: $$J_N = \sum_{k=0}^{N-1} |\mathbf{e}_k|_{\mathbf{Q}}^2 + |\mathbf{u}_k|_{\mathbf{R}}^2$$ QP的优化保证: $$J_N^* \leq J_N^{feasible} \leq \gamma J_N^{nominal}$$

其中$\gamma$依赖于模型误差界。

结论:QP-WBC在满足假设条件下提供稳定性、可行性和有界跟踪误差保证。

12.7 常见陷阱与错误

数值问题

陷阱1:雅可比矩阵奇异

  • 症状:QP求解失败或产生极大的加速度
  • 原因:机器人接近奇异配置
  • 解决
  • 使用阻尼最小二乘:$\mathbf{J}^{\dagger} = \mathbf{J}^T(\mathbf{J}\mathbf{J}^T + \lambda\mathbf{I})^{-1}$
  • 添加正则化项到QP目标函数
  • 检测并避免奇异配置

陷阱2:数值缩放问题

  • 症状:某些约束总是违反,某些任务被忽略
  • 原因:变量和约束的数量级差异过大
  • 解决
  • 归一化所有物理量(长度、力、力矩)
  • 调整权重使各项贡献相当
  • 使用预处理器改善矩阵条件数

建模错误

陷阱3:忽略非线性动力学项

  • 症状:高速运动时跟踪性能下降
  • 原因:科氏力和离心力被忽略或计算错误
  • 解决
  • 完整计算$\mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}}$
  • 使用递归Newton-Euler算法
  • 验证动力学模型的能量一致性

陷阱4:接触模型不准确

  • 症状:接触时抖动或不稳定
  • 原因:刚性接触假设不成立
  • 解决
  • 引入接触柔顺性模型
  • 使用力传感器反馈
  • 实施接触力滤波

实现问题

陷阱5:实时性能不足

  • 症状:控制周期超时,性能降级
  • 原因:计算负载过重
  • 解决
  • 简化任务数量和约束
  • 使用更快的QP求解器
  • 实施分级控制架构
  • 并行化独立计算

陷阱6:约束冲突

  • 症状:QP无解
  • 原因:约束集不一致
  • 解决
  • 实施约束优先级
  • 使用松弛变量
  • 运行时约束一致性检查
  • 提供备用控制策略

调试技巧

  1. 可视化工具: - 实时显示任务空间轨迹 - 监控约束满足情况 - 绘制QP收敛历史

  2. 日志和诊断

LOG: Task errors: [0.012, 0.003, 0.045]
LOG: Constraint violations: none
LOG: QP iterations: 12
LOG: Solve time: 3.2ms
WARNING: Near singularity detected (condition number: 1e5)
  1. 单元测试: - 测试每个任务的雅可比计算 - 验证动力学模型 - 检查QP问题构建

  2. 渐进集成: - 从简单任务开始 - 逐步添加约束 - 最后引入接触

  3. 性能分析: - Profile计算热点 - 监控内存分配 - 跟踪缓存命中率