3. 系统建模基础:运动学模型、动力学模型与状态空间表示

各位同学,欢迎来到第三章。这一章,咱们要啃一块硬骨头——系统建模。

说实话,我刚开始做机器人控制那会儿,觉得建模就是写写公式,没啥大不了的。直到有一次,我负责一个六轴机械臂的抓取项目,在仿真里跑得飞起,一上真机就抖得像帕金森患者。后来才发现,是动力学模型里少算了一个关节的摩擦项。嗯,从那以后,我再也不敢小看建模这一步了。

你想想看,控制算法再漂亮,如果模型是错的,那就是在沙子上盖大楼。所以,咱们今天把基础打牢。

3.1 运动学模型:正运动学与逆运动学

运动学,说白了就是研究“动”的几何关系,不考虑力。它解决两个问题:

  • 正运动学:我知道每个关节转了多少角度,求末端执行器在哪儿。
  • 逆运动学:我知道末端执行器要去哪儿,反推每个关节该转多少。

我个人习惯,先讲正运动学,因为它相对简单,是逆运动学的基础。

3.1.1 正运动学:从关节空间到操作空间

正运动学的核心工具是齐次变换矩阵。每个关节用一个4x4的矩阵表示,把相邻两个连杆的坐标变换关系描述清楚。

对于串联机器人,正运动学公式长这样:

T_0^n = T_0^1 * T_1^2 * ... * T_{n-1}^n

其中,T_0^n 表示从基座到末端执行器的总变换矩阵。每个 T_{i-1}^i 由四个参数决定:连杆长度 a_i、连杆扭角 α_i、关节距离 d_i、关节转角 θ_i。这就是经典的Denavit-Hartenberg (D-H) 参数法

核心要点:正运动学是唯一确定的。给定一组关节角度,末端位姿是唯一的。这一点在调试时非常有用——你可以用正运动学验证你的逆运动学算得对不对。

3.1.2 逆运动学:从操作空间到关节空间

逆运动学就麻烦多了。同一个末端位姿,可能对应多组关节角度解,也可能无解。

我在项目中遇到过最头疼的情况:一个六轴机器人,末端要走到某个点,逆运动学算出了8组解。选哪一组?

我的经验是:

  • 优先选关节角度变化最小的解(省时间、省能量)
  • 避开奇异位形(关节接近极限位置)
  • 考虑避障需求

逆运动学的求解方法主要有两种:

  1. 解析法:通过几何关系直接推导出封闭解。速度快,但只适用于特定构型的机器人(比如后三个关节轴线交于一点的Pieper准则)。
  2. 数值法:用迭代方式逼近解。通用性强,但计算量大,且可能不收敛。

避坑指南:我曾经在项目里用数值法做逆运动学,结果迭代到奇异点附近,雅可比矩阵奇异,算法直接崩了。后来我加了阻尼最小二乘法(DLS),才稳住。记住:数值法一定要处理奇异情况。

3.2 动力学模型:拉格朗日法与牛顿-欧拉法

运动学只关心“动”,动力学关心“为什么动”——力和运动的关系。

为什么要建动力学模型?因为控制需要力。你让电机输出多大扭矩,才能让机器人按期望轨迹运动?这就是动力学要回答的问题。

3.2.1 拉格朗日法:从能量角度看问题

拉格朗日法基于能量守恒,公式简洁优雅:

L = K - P
τ = d/dt(∂L/∂q̇) - ∂L/∂q

其中,L是拉格朗日函数,K是动能,P是势能,q是广义坐标,τ是广义力。

我个人很喜欢拉格朗日法,因为它不需要考虑内部约束力。你只需要写出系统的动能和势能,然后套公式就行。

举个例子,一个二连杆机械臂:

  • 动能:两个连杆的平动动能 + 转动动能
  • 势能:两个连杆的重力势能
  • 代入拉格朗日方程,得到两个关节的力矩方程

小技巧:拉格朗日法推导出来的动力学方程,天然具有结构化的形式:M(q)q̈ + C(q,q̇)q̇ + G(q) = τ。其中M是惯性矩阵,C是科里奥利力和离心力项,G是重力项。这个形式对后续的控制设计非常友好。

3.2.2 牛顿-欧拉法:从力平衡角度看问题

牛顿-欧拉法更直观,它直接对每个连杆做受力分析:

  • 牛顿方程:F = m * a(平动部分)
  • 欧拉方程:τ = I * α + ω × (I * ω)(转动部分)

这个方法需要从基座到末端递推计算速度和加速度(正向递推),再从末端到基座递推计算力和力矩(反向递推)。

我记得有一次做高速抓取项目,拉格朗日法算出来的模型在低速时没问题,一上高速就偏差很大。换成牛顿-欧拉法,把每个关节的摩擦和惯性耦合都显式建模,效果就好多了。

两种方法的对比:

特性 拉格朗日法 牛顿-欧拉法
推导复杂度 随自由度增加呈指数增长 线性增长
计算效率 较低(需要计算大量偏导数) 较高(递推计算)
物理意义 能量角度,全局理解 力/力矩角度,局部理解
适用场景 自由度少(<4),理论研究 自由度多,实时控制

我的建议:做理论研究或自由度少的机器人,用拉格朗日法;做工程实现或自由度多的机器人,用牛顿-欧拉法。如果条件允许,两种方法互相验证,最稳妥。

3.3 状态空间表示:从微分方程到控制模型

运动学和动力学模型,最终都要转化成状态空间表示,才能用于控制设计。

状态空间表示的核心思想:用一组一阶微分方程描述系统动态。

ẋ = f(x, u)
y = g(x, u)

其中,x是状态向量,u是输入向量,y是输出向量。

对于机器人系统,状态通常选为:

  • 关节角度 q
  • 关节角速度 q̇

所以状态向量 x = [q; q̇]。

动力学方程 M(q)q̈ + C(q,q̇)q̇ + G(q) = τ 可以改写为:

ẋ = [q̇; M(q)^{-1}(τ - C(q,q̇)q̇ - G(q))]

这就是一个标准的非线性状态空间方程。

实用技巧:如果系统工作点附近变化不大,可以对状态空间方程做线性化处理,得到线性时不变系统:ẋ = Ax + Bu。这样就能用经典的PID、LQR等控制方法了。

为什么要用状态空间表示?因为:

  1. 统一框架:不管是单关节还是多关节,都能用同一套数学语言描述
  2. 便于分析:可控性、可观性、稳定性分析都有现成工具
  3. 便于设计:现代控制理论(LQR、MPC、滑模控制等)都基于状态空间

避坑指南:我曾经在项目里直接用非线性状态空间模型做MPC,结果计算量太大,控制器周期跟不上。后来改成在工作点附近线性化,用线性MPC,计算量降了两个数量级。所以,别盲目追求“精确模型”,要考虑实时性。

3.4 本章知识体系总览

为了让大家更直观地理解本章的知识结构,我画了一张图:

系统建模基础:知识体系 运动学模型 正运动学 · D-H参数法 · 齐次变换矩阵 · 唯一确定解 逆运动学 · 解析法 vs 数值法 · 多解问题处理 · 奇异位形规避 应用场景 · 轨迹规划 · 工作空间分析 · 碰撞检测 动力学模型 拉格朗日法 · 基于能量守恒 · L = K - P · 结构化形式 牛顿-欧拉法 · 基于力平衡 · 递推计算 · 计算效率高 应用场景 · 力控制 · 前馈补偿 · 仿真验证 状态空间表示 基本形式 · ẋ = f(x,u) · y = g(x,u) · 状态选择:q, q̇ 线性化 · 工作点线性化 · ẋ = Ax + Bu · 可控性/可观性 应用场景 · LQR/MPC设计 · 状态观测器 · 系统辨识 输入 转化 运动学 → 动力学 → 状态空间:从几何到力再到控制的完整链路

这张图把本章的三个核心模块串起来了。运动学是基础,提供几何关系;动力学是核心,提供力与运动的关系;状态空间是桥梁,把动力学模型转化成控制算法能用的形式。

好了,这一章的内容就到这里。建模是个慢功夫,别着急,多动手推导几次,自然就熟了。


专注资料整理