Skip to content
清晨的一缕阳光
返回

运动控制算法

运动控制算法

运动控制是人形机器人的”小脑”,决定了行走、奔跑、跳跃等动态能力。MPC(模型预测控制)和 WBC(全身控制)是两大核心算法。本文深入解析人形机器人运动控制的理论基础、算法实现与工程实践。

一、运动控制层次架构

1.1 控制层级

人形机器人控制架构(自上而下)

┌─────────────────────────────────────┐
│ 任务层(Task Level)                 │
│ - 高层指令:"走到门口"               │
│ - 任务分解:导航 + 避障 + 抓取        │
│ - 时间尺度:秒级                     │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 规划层(Planning Level)             │
│ - 步态规划:步长、步频、落脚点       │
│ - 轨迹规划:CoM 轨迹、摆动腿轨迹     │
│ - 时间尺度:10-100Hz                │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 控制层(Control Level)              │
│ - MPC:优化地面反作用力              │
│ - WBC:全身关节扭矩分配              │
│ - 时间尺度:500-1000Hz              │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 执行层(Execution Level)            │
│ - 关节扭矩控制                       │
│ - 电流环、速度环、位置环             │
│ - 时间尺度:1-10kHz                 │
└─────────────────────────────────────┘

1.2 控制问题分类

问题类型描述典型算法
平衡控制保持站立不倒MPC、LQR
行走控制双足步态行走ZMP、MPC
奔跑控制动态奔跑、跳跃WBC、MPC
操作控制手臂抓取操作阻抗控制、力位混合
全身协调多任务同时执行层级 WBC

1.3 关键挑战

人形机器人控制挑战
├── 高维度
│   └── 40+ 自由度,状态空间巨大
├── 强耦合
│   └── 关节间动力学耦合复杂
├── 欠驱动
│   └── 脚与地面接触点有限
├── 非线性
│   └── 摩擦、碰撞、接触切换
├── 不确定性
│   └── 模型误差、外部扰动
└── 实时性
    └── 控制频率 500-1000Hz

二、理论基础

2.1 刚体动力学

机器人动力学方程

M(q)q̈ + C(q,q̇)q̇ + G(q) = τ + JᵀF

其中:
- q: 关节位置(n×1)
- q̇: 关节速度
- q̈: 关节加速度
- M(q): 质量矩阵(n×n)
- C(q,q̇): 科氏力 + 离心力矩阵
- G(q): 重力项
- τ: 关节扭矩(n×1)
- J: 雅可比矩阵
- F: 外力(地面反作用力等)

计算复杂度

2.2 质心动力学

简化模型:线性倒立摆(LIP)

线性倒立摆模型(Linear Inverted Pendulum)

假设:
- 质心高度恒定:z = h
- 质量集中于质心
- 无角动量

动力学方程:
ẍ = (g/h) * x - (1/(m*h)) * u

其中:
- x: 质心水平位置
- ẍ: 质心加速度
- g: 重力加速度
- h: 质心高度
- m: 机器人质量
- u: 控制输入(ZMP 位置)

解析解:
x(t) = x₀ * cosh(ωt) + (ẋ₀/ω) * sinh(ωt)
其中 ω = √(g/h)

应用:
- 步态规划基础
- 捕获点(Capture Point)计算
- 稳定性判断

2.3 ZMP(零力矩点)

定义

稳定性判据

ZMP 稳定性条件

┌─────────────────────────────────────┐
│  支撑多边形(Support Polygon)       │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  │    ● ZMP                   │   │
│  │                             │   │
│  └─────────────────────────────┘   │
│       左脚        右脚              │
└─────────────────────────────────────┘

稳定条件:
- ZMP 在支撑多边形内 → 稳定
- ZMP 在支撑多边形边界 → 临界
- ZMP 在支撑多边形外 → 不稳定(将摔倒)

支撑多边形定义:
- 双脚站立:双脚包围的凸包
- 单脚站立:单脚区域
- 行走:动态变化的多边形

ZMP 计算

def compute_zmp(cop_force, cop_moment, gravity_axis='z'):
    """
    从力平台数据计算 ZMP
    cop_force: [Fx, Fy, Fz] 地面反作用力
    cop_moment: [Mx, My, Mz] 地面反作用力矩
    """
    Fx, Fy, Fz = cop_force
    Mx, My, Mz = cop_moment
    
    # ZMP 公式
    if abs(Fz) < 1e-6:  # 避免除零
        return None
    
    px = (-My + Fx * 0) / Fz  # 假设力平台高度为 0
    py = (Mx + Fy * 0) / Fz
    
    return np.array([px, py])

三、模型预测控制(MPC)

3.1 MPC 基本原理

核心思想

MPC 控制循环

在每个控制周期:
┌─────────────────────────────────────┐
│ 1. 获取当前状态 x(k)                 │
│    - 质心位置、速度                  │
│    - 关节角度、速度                  │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 2. 预测未来 N 步状态                  │
│    x(k+1), x(k+2), ..., x(k+N)      │
│    基于动力学模型                    │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 3. 求解优化问题                      │
│    min J = Σ(跟踪误差 + 控制量)      │
│    s.t. 动力学约束                   │
│         输入约束                     │
│         状态约束                     │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 4. 执行第一步控制 u(k)               │
│    丢弃后续控制量                    │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 5. 下一周期重复(反馈校正)          │
└─────────────────────────────────────┘

关键参数:
- 预测时域 N:10-50 步
- 控制时域:通常等于预测时域
- 控制频率:100-500Hz

3.2 质心 MPC 公式

状态空间模型

# 离散时间状态空间模型
# x = [px, py, pz, vpx, vpy, vpz]ᵀ  (质心位置 + 速度)
# u = [fx, fy, fz]ᵀ  (地面反作用力)

def discretize_lip_dynamics(dt, height, mass):
    """
    离散化 LIP 动力学
    """
    omega = np.sqrt(9.81 / height)
    
    # 连续时间系统矩阵
    A_c = np.array([
        [0, 0, 0, 1, 0, 0],
        [0, 0, 0, 0, 1, 0],
        [0, 0, 0, 0, 0, 1],
        [omega**2, 0, 0, 0, 0, 0],
        [0, omega**2, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0]
    ])
    
    B_c = np.array([
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [-1/(mass*height), 0, 0],
        [0, -1/(mass*height), 0],
        [0, 0, 1/mass]
    ])
    
    # 离散化
    A = np.eye(6) + A_c * dt
    B = B_c * dt
    
    return A, B

优化问题

import cvxpy as cp

def solve_mpc(x0, A, B, N, Q, R, x_ref, u_min, u_max):
    """
    MPC 优化问题求解
    x0: 初始状态
    A, B: 离散系统矩阵
    N: 预测时域
    Q, R: 权重矩阵
    x_ref: 参考轨迹
    u_min, u_max: 输入约束
    """
    n_x = len(x0)
    n_u = B.shape[1]
    
    # 优化变量
    X = cp.Variable((n_x, N+1))  # 状态轨迹
    U = cp.Variable((n_u, N))    # 控制轨迹
    
    # 目标函数
    cost = 0
    for k in range(N):
        cost += cp.quad_form(X[:, k] - x_ref[:, k], Q)
        cost += cp.quad_form(U[:, k], R)
    cost += cp.quad_form(X[:, N] - x_ref[:, N], Q)  # 终端代价
    
    # 约束
    constraints = [
        X[:, 0] == x0,  # 初始状态
    ]
    
    # 动力学约束
    for k in range(N):
        constraints.append(X[:, k+1] == A @ X[:, k] + B @ U[:, k])
    
    # 输入约束
    for k in range(N):
        constraints.append(U[:, k] >= u_min)
        constraints.append(U[:, k] <= u_max)
    
    # 求解
    problem = cp.Problem(cp.Minimize(cost), constraints)
    problem.solve(solver=cp.OSQP)
    
    return X.value, U.value

3.3 落脚点优化

问题:MPC 需要已知落脚点,但落脚点本身也需要优化

解决方案:迭代优化

迭代 MPC + 落脚点优化流程

┌─────────────────────────────────────┐
│ 初始化:基于启发式选择落脚点          │
│ - 默认步长、步频                     │
│ - 避开障碍物                         │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 步骤 1:固定落脚点,求解 MPC          │
│ - 优化地面反作用力                   │
│ - 得到质心轨迹                       │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 步骤 2:固定力,优化落脚点           │
│ - 调整落脚点改善稳定性              │
│ - 考虑地形、障碍物                  │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 步骤 3:检查收敛                     │
│ - 如果收敛 → 输出结果               │
│ - 否则 → 返回步骤 1                  │
└─────────────────────────────────────┘

迭代次数:2-5 次
计算时间:<10ms

3.4 实际实现考虑

简化模型 vs 完整模型

模型优点缺点适用场景
LIP 模型线性、计算快忽略高度变化、角动量平地行走
SRB 模型包含角动量仍简化动态运动
完整模型精确非线性、计算慢离线规划

计算加速

# 使用 OSQP 求解器加速
import osqp

# 预计算稀疏矩阵
P = block_diag([Q]*(N+1) + [R]*N)
A_constraint = ...  # 动力学约束矩阵
l = ...  # 约束下界
u = ...  # 约束上界

# 设置求解器
prob = osqp.OSQP()
prob.setup(P=P, q=q, A=A_constraint, l=l, u=u, 
           verbose=False, warm_start=True)

# 在线求解
def solve_online(x0):
    # 更新初始状态约束
    prob.update(lx_0=x0, ux_0=x0)
    
    # 求解
    result = prob.solve()
    
    return result.x

性能

四、全身控制(WBC)

4.1 WBC 基本原理

核心思想

全身控制架构

输入:
├── 任务描述(多个任务,有优先级)
│   ├── 高优先级:平衡、足端轨迹
│   ├── 中优先级:躯干姿态
│   └── 低优先级:手臂操作
├── 当前状态(关节角度、速度)
└── 接触状态(哪些脚着地)

处理:
├── 1. 任务建模(雅可比、期望加速度)
├── 2. 构建 QP 优化问题
├── 3. 求解最优关节扭矩

输出:
└── 关节扭矩命令(40+ 个关节)

控制频率:500-1000Hz

4.2 任务建模

任务空间动力学

def task_space_dynamics(q, qd, robot_model):
    """
    计算任务空间动力学
    q: 关节位置
    qd: 关节速度
    robot_model: 机器人模型(URDF)
    """
    # 正向动力学
    M = robot_model.mass_matrix(q)
    C = robot_model.coriolis(q, qd)
    G = robot_model.gravity(q)
    
    # 任务雅可比
    J_task = robot_model.jacobian(task_frame, q)
    J_dot = robot_model.jacobian_dot(task_frame, q, qd)
    
    # 任务空间惯性矩阵
    Lambda = np.linalg.inv(J_task @ np.linalg.inv(M) @ J_task.T)
    
    # 任务空间科氏力 + 重力
    mu = Lambda @ J_task @ np.linalg.inv(M) @ (C @ qd + G)
    mu += Lambda @ J_dot @ qd
    
    return Lambda, mu, J_task

任务优先级

任务优先级层次

优先级 1(最高):
├── 平衡控制(质心加速度)
└── 支撑腿足端力控制

优先级 2:
├── 摆动腿足端轨迹跟踪
└── 躯干姿态控制

优先级 3(最低):
├── 手臂操作任务
└── 头部跟踪

4.3 分层 QP 优化

优化问题公式

def hierarchical_wbc(robot_state, tasks):
    """
    分层全身控制
    tasks: 按优先级排序的任务列表
    """
    q = robot_state.q
    qd = robot_state.qd
    
    # 获取动力学参数
    M = robot.mass_matrix(q)
    C = robot.coriolis(q, qd)
    G = robot.gravity(q)
    
    # 存储已优化任务的约束
    equality_constraints = []
    inequality_constraints = []
    
    # 按优先级逐层优化
    tau_opt = None
    
    for task in tasks:
        # 任务雅可比
        J = task.jacobian(q)
        J_dot = task.jacobian_dot(q, qd)
        
        # 期望任务加速度
        x_ddot_des = task.compute_desired_acceleration(robot_state)
        
        # 构建 QP
        # min ||tau||^2
        # s.t. J * qddot + J_dot * qd = x_ddot_des  (任务约束)
        #      M * qddot + C * qd + G = tau + J_c^T * F_c  (动力学)
        #      其他约束(摩擦力、扭矩限制等)
        
        qp_problem = build_qp(
            objective='min_torque',
            equality=equality_constraints + [task.constraint],
            inequality=inequality_constraints
        )
        
        # 求解
        tau_opt = qp_problem.solve()
        
        # 将当前任务加入约束(传递给下一层)
        equality_constraints.append(task.to_constraint(tau_opt))
    
    return tau_opt

QP 标准形式

minimize    ½ xᵀPx + qᵀx
subject to  l ≤ Ax ≤ u

其中:
- x = [q̈, τ, F]ᵀ 优化变量(加速度、扭矩、接触力)
- P = diag(0, I, 0) 最小化扭矩
- A = [动力学方程; 任务约束; 其他约束]
- l, u = 约束边界

4.4 接触力优化

摩擦力锥约束

def friction_cone_constraints(contact_forces, mu):
    """
    摩擦力锥约束
    contact_forces: [Fx, Fy, Fz] 接触力
    mu: 摩擦系数
    """
    constraints = []
    
    for F in contact_forces:
        Fx, Fy, Fz = F
        
        # 线性化摩擦锥(4 面体近似)
        constraints.append(Fx <= mu * Fz)
        constraints.append(Fx >= -mu * Fz)
        constraints.append(Fy <= mu * Fz)
        constraints.append(Fy >= -mu * Fz)
        
        # 法向力非负(只能推,不能拉)
        constraints.append(Fz >= 0)
    
    return constraints

ZMP 约束

def zmp_constraint(contact_forces, contact_positions, foot_size):
    """
    ZMP 必须在脚底支撑区域内
    """
    # 计算 ZMP
    zmp = compute_zmp(contact_forces, contact_positions)
    
    # 脚底区域(矩形近似)
    foot_length, foot_width = foot_size
    
    constraints = [
        zmp.x >= -foot_length/2,
        zmp.x <= foot_length/2,
        zmp.y >= -foot_width/2,
        zmp.y <= foot_width/2
    ]
    
    return constraints

五、步态规划

5.1 步态相位

典型双足步态相位

┌─────────────────────────────────────────────────────┐
│ 双支撑期          单支撑期          双支撑期         │
│ (Double Support)  (Single Support) (Double Support) │
│                                                         │
│ 左脚    右脚        左脚    右脚      左脚    右脚     │
│ ████    ████        ████            ████    ████     │
│                     ░░░░                             │
│ ←────→  ←────→      ←────→          ←────→  ←────→   │
│   DS       SS         DS                              │
│                                                         │
│ 时间:  10%          40%              10%             │
│                                                         │
└─────────────────────────────────────────────────────┘

一个完整步态周期:
- 双支撑期:20%(左右各 10%)
- 单支撑期:80%(左右各 40%)

5.2 步态参数

参数符号典型值影响
步长L0.5-0.8m速度、稳定性
步频f0.8-1.2Hz速度、能耗
步宽W0.1-0.2m侧向稳定性
足尖外展角θ5-15°自然度
膝弯曲角α5-10°缓冲、能耗

5.3 足端轨迹规划

摆动腿轨迹

def swing_foot_trajectory(t, T, p_start, p_end, h_max):
    """
    摆动腿足端轨迹规划
    t: 当前时间
    T: 摆动阶段总时间
    p_start: 起始位置
    p_end: 目标位置
    h_max: 最大抬脚高度
    """
    # 归一化时间
    s = t / T
    
    # 水平方向:五次多项式(保证平滑)
    # p(t) = a0 + a1*t + a2*t² + a3*t³ + a4*t⁴ + a5*t⁵
    # 边界条件:p(0)=p_start, p(T)=p_end, v(0)=v(T)=0, a(0)=a(T)=0
    
    # 简化:使用最小加加速度轨迹
    p_horizontal = p_start + (p_end - p_start) * (
        10*s**3 - 15*s**4 + 6*s**5
    )
    
    # 垂直方向:抬脚 - 落脚
    if s < 0.5:
        # 抬脚阶段
        p_vertical = h_max * np.sin(np.pi * s)
    else:
        # 落脚阶段
        p_vertical = h_max * np.sin(np.pi * (1 - s))
    
    return np.array([p_horizontal[0], p_horizontal[1], p_vertical])

5.4 捕获点(Capture Point)

定义

计算公式

def capture_point(x, v, omega):
    """
    计算捕获点
    x: 质心位置
    v: 质心速度
    omega: √(g/h)
    """
    xi = x + v / omega
    return xi

def n_step_capturability(x, v, omega, step_limit):
    """
    N 步可捕获性分析
    step_limit: 最大允许步长
    """
    xi = capture_point(x, v, omega)
    distance = np.linalg.norm(xi - x)
    
    # 单步可捕获
    if distance <= step_limit:
        return True, 1
    
    # 多步可捕获(简化估计)
    n_steps = np.ceil(distance / step_limit)
    
    if n_steps <= 5:  # 假设最多 5 步
        return True, n_steps
    else:
        return False, n_steps

应用

六、平衡控制

6.1 站立平衡

控制策略

站立平衡控制策略

┌─────────────────────────────────────┐
│ 踝策略(Ankle Strategy)            │
│ - 小扰动                            │
│ - 通过踝关节力矩调整                │
│ - 类似人类站立微调                  │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 髋策略(Hip Strategy)              │
│ - 中等扰动                          │
│ - 通过髋关节快速运动                │
│ - 产生角动量抵消扰动                │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 跨步策略(Stepping Strategy)       │
│ - 大扰动                            │
│ - 迈步重新建立支撑                  │
│ - 基于捕获点选择落脚点              │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 抓取策略(Grasping Strategy)       │
│ - 极大扰动                          │
│ - 抓取周围物体防止摔倒              │
│ - 最后手段                          │
└─────────────────────────────────────┘

6.2 角动量控制

原理

角动量控制

总角动量:L = Σ (r_i × m_i * v_i)

控制目标:L → 0(或期望值)

实现方式:
├── 手臂摆动:产生反向角动量
├── 躯干旋转:调整姿态
└── 腿部运动:辅助平衡

应用:
- 推倒恢复
- 动态运动(奔跑、跳跃)
- 不平地面行走

实现

def angular_momentum_control(robot_state, L_desired):
    """
    基于角动量的平衡控制
    """
    q = robot_state.q
    qd = robot_state.qd
    
    # 计算当前角动量
    L_current = robot.angular_momentum(q, qd)
    
    # 角动量误差
    L_error = L_desired - L_current
    
    # 通过 WBC 生成关节扭矩
    # 任务:最小化角动量误差
    task = AngularMomentumTask(L_error)
    
    tau = wbc_controller.solve(robot_state, [task])
    
    return tau

6.3 推倒恢复

恢复策略

推倒恢复流程

┌─────────────────────────────────────┐
│ 1. 检测扰动                          │
│    - IMU 检测异常加速度              │
│    - 力传感器检测 ZMP 偏移            │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 2. 评估可恢复性                      │
│    - 计算捕获点                      │
│    - 判断是否在可达范围内            │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 3. 选择恢复策略                      │
│    - 可单步恢复 → 跨步策略           │
│    - 需多步 → 连续跨步               │
│    - 不可恢复 → 保护性倒地           │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 4. 执行恢复动作                      │
│    - MPC 规划质心轨迹                │
│    - WBC 生成关节扭矩                │
│    - 手臂辅助平衡                    │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 5. 恢复站立                          │
│    - 回到标称站立姿态                │
│    - 重新规划任务                    │
└─────────────────────────────────────┘

七、实际工程实现

7.1 软件架构

运动控制软件架构

┌─────────────────────────────────────┐
│ 应用层                               │
│ - 任务管理                          │
│ - 行为树                            │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 规划层                               │
│ - 步态规划器(100Hz)                │
│ - 轨迹规划器                        │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 控制层                               │
│ - MPC 控制器(200Hz)                │
│ - WBC 控制器(500Hz)                │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 执行层                               │
│ - 关节控制器(1kHz)                 │
│ - 电流环(10kHz)                   │
└──────────────┬──────────────────────┘

┌─────────────────────────────────────┐
│ 硬件层                               │
│ - 电机、编码器、IMU、力传感器        │
└─────────────────────────────────────┘

7.2 实时性保证

关键措施

实时性保证措施

├── 硬件
│   ├── 实时操作系统(RT-Linux、Xenomai)
│   ├── 高优先级线程
│   └── CPU 隔离(隔离控制线程)
├── 软件
│   ├── 无动态内存分配
│   ├── 固定大小数据结构
│   ├── 预计算矩阵分解
│   └── 超时保护
└── 监控
    ├── 周期时间监控
    ├── 计算负载监控
    └── 异常处理

性能指标

控制器目标频率实际平均最坏情况
MPC200Hz4ms8ms
WBC500Hz1.5ms3ms
关节控制1kHz0.5ms1ms

7.3 调试工具

运动控制调试工具

├── 可视化工具
│   ├── RViz(ROS)
│   ├── MeshCat
│   └── 自定义 3D 可视化
├── 数据记录
│   ├── ROS bag
│   ├── 二进制日志
│   └── 实时绘图
├── 分析工具
│   ├── ZMP 轨迹分析
│   ├── 角动量分析
│   └── 能耗分析
└── 仿真工具
    ├── MuJoCo
    ├── Drake
    └── PyBullet

八、仿真到现实(Sim2Real)

8.1 仿真平台

平台特点适用场景
MuJoCo物理精确、快速研究、控制开发
Drake严谨、形式化验证控制理论验证
Isaac SimGPU 加速、逼真大规模训练
PyBullet开源、易用教育、快速原型

8.2 Domain Randomization

# 仿真参数随机化
def randomize_simulation():
    return {
        # 动力学参数
        'mass_scale': np.random.uniform(0.9, 1.1),
        'inertia_scale': np.random.uniform(0.9, 1.1),
        'friction_coefficient': np.random.uniform(0.5, 1.5),
        
        # 传感器噪声
        'imu_noise': np.random.uniform(0.0, 0.01),
        'encoder_noise': np.random.uniform(0.0, 0.001),
        
        # 执行器延迟
        'actuator_delay': np.random.uniform(0.0, 0.01),
        
        # 地面不平
        'ground_height': generate_random_terrain(),
        
        # 外部扰动
        'push_force': np.random.uniform(0, 50),
    }

8.3 现实差距分析

差距来源影响缓解方法
模型误差动力学不准确系统辨识、自适应控制
传感器噪声状态估计偏差滤波、传感器融合
执行器延迟控制滞后延迟补偿、预测控制
接触模型地面交互不准摩擦辨识、顺应控制
结构柔性未建模振动柔性控制、阻尼注入

九、总结

9.1 核心要点

  1. MPC 是主流:处理约束、优化性能
  2. WBC 是必须:全身协调、多任务
  3. 步态规划是基础:稳定行走的前提
  4. 实时性是挑战:500-1000Hz 控制频率
  5. Sim2Real 是路径:仿真训练 + 现实部署

9.2 技术发展

运动控制技术演进

2010s:
├── ZMP 为主(Honda ASIMO)
└── 预编程轨迹

2020s:
├── MPC + WBC(Boston Dynamics、Tesla)
├── 端到端学习(新兴)
└── 仿真训练

2030s(预测):
├── 学习 + 控制融合
├── 世界模型预测
└── 类人运动能力

9.3 学习资源

推荐资料

运动控制是人形机器人的”小脑”,决定了机器人的动态能力。随着 MPC、WBC 等算法成熟,以及 AI 技术的融合,人形机器人将展现出越来越接近人类的运动能力。


参考资料


分享这篇文章到:

上一篇文章
Redis 数据类型选择指南
下一篇文章
RAG 向量检索工程实践