robot_control_tutorial

第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}\]

其中:

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:

位置控制分量: \(\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}\]

其中:

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求解器

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$是摩擦系数。

  1. 线性化摩擦锥(用于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开发的双臂协作机器人,具有独特的设计特点和控制挑战:

硬件配置

控制挑战

  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]\)

  2. 载荷分配任务

    对于共同抓持的物体,力分配满足: \(\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}\)

  3. 内力优化

    最小化内力以减少能耗: \(\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 实验结果与性能分析

任务场景:双臂搬运

实验设置:

性能指标

  1. 轨迹跟踪误差
    位置误差 (RMS): 8.3 mm
    姿态误差 (RMS): 2.1°
    相对位姿误差: 3.5 mm
    
  2. 力控制性能
    内力范围: 5-15 N
    载荷分配误差: < 10%
    接触力稳定时间: 0.8 s
    
  3. 计算性能
    ┌─────────────────┬──────────┐
    │ 计算模块         │ 时间(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双臂机器人的案例展示了这些理论在实际系统中的应用。

关键概念回顾

操作空间控制

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

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

核心公式总结

  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. 性能优化
    • 任务优先级合理设置
    • 权重参数调优
    • 计算负载均衡
    • 并行化关键计算

与其他章节的联系

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:雅可比矩阵奇异

陷阱2:数值缩放问题

建模错误

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

陷阱4:接触模型不准确

实现问题

陷阱5:实时性能不足

陷阱6:约束冲突

调试技巧

  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)
    
  3. 单元测试
    • 测试每个任务的雅可比计算
    • 验证动力学模型
    • 检查QP问题构建
  4. 渐进集成
    • 从简单任务开始
    • 逐步添加约束
    • 最后引入接触
  5. 性能分析
    • Profile计算热点
    • 监控内存分配
    • 跟踪缓存命中率