跳转至

子课程二_力控导读

本文档属于 Robotics Tutorial 项目,作者:Pengfei Guo,达妙科技。采用 CC BY 4.0 协议,转载请注明出处。

子课程二:力控与柔顺控制(F01-F10)

学习路径衔接:完成子课程一(P01-P02 + M01-M15)后,你已经掌握了机械臂的运动学、动力学、运动规划和系统集成——但所有控制都停留在**位置控制**层面。机器人只是在自由空间中运动,从不与环境发生力交互。然而现实世界的操作任务——装配、打磨、擦拭、人机协作——必然涉及接触力。子课程二正是从"位置控制的世界"跨入"力的世界":你将学习阻抗控制、导纳控制、操作空间动力学、全身力跟踪(WBC)直至学习型力控,建立完整的力控能力栈。子课程一中 M01(Pinocchio)、M05(QP/NLP)、M11(实时 C++)、M12(ros2_control)的知识将被直接复用并深化。

力控/柔顺控制/阻抗控制/导纳控制方向 C++ 进阶教学大纲(v0.2 · 完整版)

定位:本大纲是《面向 SLAM 工程师的 C++ 中高级进阶完整教学大纲 v8》(46 章 48 周)的**方向 C 增量扩展**,面向完成 v8 主线后希望切入**机器人力控与柔顺操作**(阻抗/导纳控制、操作空间动力学、全身力跟踪、学习型柔顺)的工程师。

与机械臂/无人机大纲的关系:机械臂方向(方向 B)已完成 v0.1(17 章 24 周),覆盖运动学/动力学/轨迹规划/MoveIt2;无人机方向(方向 A)已完成 v0.1(13 章 22 周)。本大纲为**方向 C**,与方向 B 共享 Pinocchio/Eigen/ROS2 基础但**技术栈核心不同**——方向 B 的终点(位置控制/MoveIt2)是本方向的**起点**,本方向从"位置控制的世界"跨入"力的世界"。与方向 A 的交集在于 MPC/QP 求解器(OCS2/acados/qpOASES)和 RL 训练框架(Isaac Lab)。

章节编号:Part 1-3(F01-F10 力控专题,共 10 章) + 附录 A-E = 10 章,约 28 周

数据基础:基于 54 篇力控核心论文(1977-2026)的学术脉络梳理、30+ 个 C++/Python 开源力控项目的源码级审查、15 个数学模块的公式推导、三轮深度研究(千行素材总集、源码细节补充、工程标准调研)。

前置假设:学员已完成 v8 的 46 章——掌握现代 C++17、Eigen 高级(Map/Block/表达式模板)、并发(thread/mutex/atomic)、ROS2 基础、SLAM 图优化(Ceres/GTSAM/g2o)。**强烈建议**同时完成或正在学习方向 B 的 P01-P02 与 M01-M05(URDF/Pinocchio/运动学/动力学/QP-NLP),因为力控**建立在**刚体动力学和 Jacobian 运算之上。

风格对齐:核心章节尽量采用 科研发展脉络 / 教学目标 / 前置依赖 / 核心知识点 / 前沿工作与开放问题 / 项目精读清单 / 实战练习(A型+B型+思考题) / 预计学习时间 的**八段式**结构;后续若拆分单章文件,再统一补齐元信息。力控是一个**四十年理论积淀 + 近五年学习革命**的领域,理解"经典从何而来、学习往何处去"比任何单一算法更重要。

预留接口:每章标注 ✅ 全方向共享 / ⚪ 部分共享 / ❌ 纯力控 以便后续复用。

核心实验室缩写:DLR Robotics(德宇航,Albu-Schäffer/Ott/Haddadin)、MIT MCL(Biomimetics,Kim/Katz)、Stanford ASL(Khatib)、EPFL LASA(Billard)、TUM MIRMI(Haddadin/Schoellig)、KUL ComRob(De Schutter)、IIT HRI²(Tsagarakis)、LAAS/JRL-CNRS(mc_rtc 团队)、ETH RSL(Hutter)、Berkeley RAIL(Levine/Goldberg)、CMU LeCAR(Guanya Shi)、NYU CIMS(Righetti)、UPenn GRASP(Kumar)。


整体路线图

主线 v8 完成(Ch1-46) + 子课程一 P01-P02、M01-M05 推荐完成
         │  学生此时具备:
         │   - C++17 现代特性(含 CRTP、SFINAE、Concepts)
         │   - Eigen 高级(Map/Block/表达式模板)
         │   - Pinocchio 刚体动力学(RNEA/ABA/Jacobian)
         │   - ROS2 基础 + ros2_control 概念
         │   - SLAM 图优化(因子图/Hessian 结构)
┌──────────────────────────────────────────────────────────┐
│ Part 1:力控基础(子课程二第 1-8 周,8 周)                  │
│   F01 导论——阻抗/导纳二分法与力控哲学                     │
│   F02 数学基础——操作空间动力学、无源性、接触模型            │
│   F03 经典力控算法——Whitney→Hogan→Khatib→Chiaverini       │
│   F04 笛卡尔阻抗控制——libfranka / franka_ros2 / CRISP     │
│   F05 导纳控制与 ROS2 工程——ros2_controllers / FZI FDCC    │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ Part 2:高级力控(子课程二第 9-18 周,10 周)                 │
│   F06 变阻抗、无源性保证与碰撞安全                         │
│      ——能量罐/KB 条件/动量观测器/ISO 15066                 │
│   F07 浮动基座 WBC 理论——Pinocchio / TSID / mc_rtc         │
│   F08 腿足 MPC+WBC 联合力控——OCS2/WBIC/legged_control     │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ Part 3:学习型力控与综合实战(子课程二第 19-28 周,10 周)    │
│   F09 学习型力控——RL+阻抗/Diffusion Policy/SERL/FALCON     │
│   F10 综合实战——Mini-ForceControl 从零搭建                 │
└──────────────────────────────────────────────────────────┘

全部投入:Part 1-3 共 ~28 周,全职等效约 7 个月;业余 15-20 小时/周约 12-18 个月。

周数主表:F01-F05 = 8 周(F01 1 + F02 2 + F03 2 + F04 2 + F05 1);F06-F08 = 10 周(F06 3 + F07 4 + F08 3);F09-F10 = 10 周(F09 5 + F10 5)。综合大纲、导读和单章建议用时均按此口径汇总。

与其他方向大纲的对照

维度 力控方向(本大纲) 机械臂方向(v0.1) 无人机方向(v0.1)
章数 10 章(F01-F10) 17 章(P01-P02 + M01-M15) 13 章左右,具体编号以无人机方向目录为准
周数 ~28 周 ~24 周 ~22 周
核心数学 阻抗方程、操作空间Λ、零空间N、QP-WBC 空间向量代数、RNEA/ABA、QP/NLP 微分平坦、Min-Snap/MINCO
C++ 风格 ros2_control pluginlib + libfranka 回调 pluginlib 运行时多态 header-only 编译期固定维度
控制范式 τ = J^T F(阻抗) / Δx = f(F)(导纳) / QP(WBC) JointTrajectoryController SE(3) 几何控制 / NMPC
实时约束 1 kHz 阻抗(≤300 μs) / 500 Hz WBC(≤2 ms) 1 kHz 伺服(PREEMPT_RT) 200-500 Hz 控制
与 RL 交叉 极高——阻抗参数即 RL 动作空间;底层柔顺是学习策略的安全层 中(RL→ros2_control 部署管线刚起步) 极高(Swift/Nature 2023)
代表项目 libfranka、CRISP、mc_rtc、WBIC Pinocchio、MoveIt2、BT.CPP GCOPTER、Fast-Planner

三大认知跨越(从位置控制到力的世界)

跨越一:从"几何精度"到"能量交换"。 位置控制工程师习惯的问题是"让末端到达 0.01mm 精度";力控的问题是"与环境安全地交换能量而不失稳"。数学从**运动学映射(J, J⁻¹)转向**动力学映射(M, C, g)**和**端口无源性(ḣ ≤ y^T u),思维从**轨迹跟踪**转向**阻抗塑形**。好消息是:Ceres 的 Hessian 结构与操作空间的 Λ = (JM⁻¹J^T)⁻¹ 在数值线代上同构——你的稀疏矩阵直觉可以直接迁移。

跨越二:从"开环执行"到"闭环交互"。 MoveIt2 的 JointTrajectoryController 在执行轨迹时对外部力几乎视而不见;力控要求**每个控制周期都读力、算力、发力矩**,1 kHz 闭环中不允许任何堆分配或阻塞。这要求所有热路径代码使用 Eigen::Matrix<double, 6, 7> 而非 MatrixXd,所有 ROS2 回调使用 RealtimeBuffer 而非标准 subscriber。

跨越三:从"单体控制"到"接触物理"。 位置控制的世界里没有"接触";力控的世界里**接触是核心**——接触瞬态(冲击力)、摩擦锥(Coulomb)、接触模式切换(分离/滑动/滚动)构成全部难题。理解"为什么 K_d 不能在接触瞬间设太高"就是理解"接触冲击能量 = ½Λv²"。


SLAM → 力控的技能迁移速查

SLAM 技能 在力控中的对应 迁移难度
Eigen 矩阵运算 操作空间 Λ/μ/p 计算、Jacobian 组装 零迁移
Sophus SE(3) / manif 姿态阻抗误差 e_R = ½vee(R_d^T R - R^T R_d) 低——概念完全一致
Ceres 非线性最小二乘 OSQP/qpOASES 二次规划——数学结构不同但求解器用法类似
GTSAM 因子图 Hessian WBC 的 QP KKT 块结构——数学同构
ROS2 节点/消息 ros2_control 的 ControllerInterface/HardwareInterface
Pinocchio 动力学(若已学) 操作空间 Λ = (JM⁻¹J^T)⁻¹——直接复用 零迁移
FAST-LIO2 / VIO 力控不直接用 SLAM,但感知模块对 loco-manipulation 有用 高——可跳过
PCL 点云处理 力控不需要点云(用 F/T 传感器) 不适用
1 kHz 实时控制概念 直接复用——力控同样 1 kHz 零迁移
RL 训练(Isaac Lab) 直接复用——PPO/SAC + 并行仿真器,仅换动作空间为阻抗参数
C++ 模板/CRTP libfranka 回调、CRISP 控制律模板化——复用度高

Part 1:力控基础(子课程二第 1-8 周)

本部分定位:力控四十年可归结为三条主线——Hogan 阻抗势能塑形Khatib 操作空间投影Raibert-Chiaverini 力位分配。F01-F03 建立哲学框架、数学工具箱和经典算法;F04-F05 把阻抗/导纳落到固定基座机械臂的工程实现。五章共同构成后续高级力控和学习型力控的地基。