第四章:动力学基础——牛顿-欧拉法与拉格朗日法

各位工程师朋友,欢迎来到动力学这一章。说实话,很多做步态控制的同行,一听到「动力学」三个字就头疼。我当年刚入行时也一样,觉得运动学能走就行,干嘛要算力?直到有一次,我设计的机器人走两步就摔了——电机扭矩不够,关节直接打滑。嗯,从那以后,我再也不敢轻视动力学了。

这一章,我们重点聊四个东西:牛顿-欧拉法、拉格朗日法、关节力矩计算,以及地面反作用力模型。说白了,就是搞清楚「机器人为什么会动」以及「动的时候受哪些力」。

4.1 牛顿-欧拉法:从力到运动的直接路径

我个人习惯用牛顿-欧拉法做实时控制。为什么?因为它直观。你想想看,每个连杆受到的外力、力矩,直接跟加速度挂钩。公式简单:

F = m * a
τ = I * α + ω × (I * ω)

前者是牛顿第二定律,后者是欧拉方程。对于人形机器人,我们通常从脚底开始,逐级向上递推。先算地面反作用力,再算踝关节、膝关节、髋关节……一直推到躯干。

核心思路:牛顿-欧拉法分为两步——正向递推(计算速度和加速度)和反向递推(计算力和力矩)。正向从基座到末端,反向从末端到基座。

我在项目中遇到过一个问题:用牛顿-欧拉法算出来的力矩,跟实际电机反馈对不上。后来发现,是我忽略了关节摩擦和电机惯量。所以提醒各位,理论模型一定要加补偿项,否则仿真跑得欢,实机就翻车。

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

拉格朗日法,说白了就是「能量守恒」的升级版。你不需要关心每个关节的受力细节,只需要知道系统的动能和势能。公式长这样:

L = T - V
τ = d/dt (∂L/∂q̇) - ∂L/∂q

其中 T 是动能,V 是势能,q 是关节角度。这个方法的好处是——自动消除内部约束力。你想想看,如果机器人有闭链结构(比如双手撑地),用牛顿-欧拉法会多出一堆约束方程,而拉格朗日法直接绕过去了。

我的建议:做离线仿真或轨迹优化时,用拉格朗日法。做实时控制时,用牛顿-欧拉法。前者推导简洁,后者计算效率高。

我曾经用拉格朗日法推导一个12自由度的双足机器人模型,整整写了两页纸的公式。后来发现,其实可以用符号计算工具(比如SymPy)自动生成。嗯,这里要提醒大家:别手算,容易错。

4.3 关节力矩计算:从理论到工程

关节力矩,是动力学计算的最终输出。你算出来的力矩,要直接发给电机驱动器。所以精度很重要。

常见的力矩来源有三个:

  • 惯性力项:跟加速度有关,动态运动时占大头
  • 科里奥利力和离心力:跟速度有关,高速运动时不能忽略
  • 重力项:跟姿态有关,静态站立时主要负载

我一般把动力学方程写成标准形式:

τ = M(q) * q̈ + C(q, q̇) * q̇ + G(q)

M 是惯性矩阵,C 是科里奥利矩阵,G 是重力向量。实际控制时,我们通常用计算力矩法:先根据期望轨迹算出前馈力矩,再用PD反馈补偿误差。

注意:千万不要直接拿理论力矩去驱动电机。电机有饱和、有延迟、有摩擦。我建议至少加一个低通滤波器,把力矩指令的高频分量滤掉,否则电机会抖。

4.4 地面反作用力模型:机器人与世界的交互

人形机器人跟地面打交道,全靠脚底。地面反作用力(GRF)决定了你能不能站稳、能不能走起来。

最简单的模型是点接触模型:假设脚底只有一个接触点,力可以分解为法向力和切向力。法向力用弹簧阻尼模型:

F_n = k * (z_pen) + b * (ż_pen)

其中 z_pen 是穿透深度,k 是刚度,b 是阻尼。切向力用库仑摩擦模型:

F_t = μ * F_n

但实际项目中,点接触模型不够用。为什么?因为人脚有脚掌,有足弓,着地时是面接触。我建议用压力分布模型,把脚底分成多个区域,每个区域独立计算接触力。

避坑指南:我曾经在草地上测试机器人,地面刚度参数没调好,结果机器人一脚踩下去直接陷进去。后来我加了自适应刚度估计,根据脚底压力传感器的反馈实时调整 k 和 b。效果好了很多。

另外,地面反作用力还有一个重要用途——零力矩点(ZMP)。ZMP 是脚底压力中心的位置,只要 ZMP 落在支撑多边形内,机器人就不会倒。这是步态规划的核心判据。

知识体系总览

下面这张图,是我自己整理的动力学知识框架。你可以把它当作学习路线图:

人形机器人动力学知识体系 动力学基础 牛顿-欧拉法 拉格朗日法 关节力矩计算 地面反作用力模型 步态规划与控制 牛顿-欧拉法用于实时控制,拉格朗日法用于离线分析 两者最终都服务于关节力矩计算和地面反作用力建模

小结

动力学这东西,说难也难,说简单也简单。你只要记住:牛顿-欧拉法算力,拉格朗日法算能量,关节力矩是结果,地面反力是边界。我在实际项目中,通常把两者结合起来用——用拉格朗日法做离线轨迹优化,用牛顿-欧拉法做在线力矩补偿。

最后送大家一句话:动力学不是用来吓人的,是用来让机器人走得更稳的。多调参数,多跑仿真,慢慢就有感觉了。

实用工具推荐:Robotics Toolbox for Python(Peter Corke 出品)、Pinocchio(高效动力学库)、MuJoCo(物理仿真)。这三个我都在用,各有千秋。

可可精品资料库