JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

实践中的正动力学、逆动力学与接触动力学

逆动力学求出跟随规划所需的力矩;正动力学在仿真器中预测运动;接触动力学则是干净模型与混乱现实世界相遇之处。

一个方程,两种读法

前面几级搭建起了机器人运动方程:它整齐地记录了力矩、惯量、运动与重力如何在每个关节上达成平衡。美妙之处在于,这个方程可以从两个方向去读,而每个方向都是一件不同且极其有用的工具。一种读法给出逆动力学,另一种读法给出正动力学

M(q) * qddot  +  C(q, qdot) * qdot  +  g(q)  =  tau

  M(q)   : mass / inertia matrix  (how heavy each motion feels)
  C(.)   : Coriolis & centrifugal terms (velocity coupling)
  g(q)   : gravity term
  tau    : joint torques the motors must supply

Inverse dynamics:  given q, qdot, qddot  ->  solve for tau
Forward dynamics:  given tau, q, qdot     ->  solve for qddot
同一个方程,要么解出力矩(逆),要么解出加速度(正)。

符号 q、qdot、qddot 分别是关节角度、速度与加速度。质量(惯量)矩阵 M、科里奥利与离心项 C 以及重力项 g,正是我们之前认识的三种力的贡献。下文不过是在讲一个故事:你把哪个符号当作已知,又去解出哪个符号。

逆动力学:从规划到出力

逆动力学回答的是规划器的问题:“我想让手臂沿这条路径运动,带着这些速度和加速度——此刻每个电机各需输出多少力矩?”你输入期望的运动(q、qdot、qddot),方程便交还所需的关节力矩 tau。由于你是把已知数代入右端,这里并不需要求解逆运算——它是一次直接而快速的计算。

这正是前馈控制背后的引擎。与其等机器人偏离轨道再去纠正——那是反馈控制被动的活儿——逆动力学会*提前*算出这段动作所需的力矩并主动施加。纯PID 控制器只能靠对误差作出反应去对抗重力与惯量;有了前馈项,大部分工作已经完成,反馈只需清理剩下的小误差。

把这个想法推到极致,就得到计算力矩控制:每个周期里,控制器都用逆动力学抵消机器人自身的非线性重量与惯量,把一个缠绕在一起的多关节系统,变成行为像简单、温顺的弹簧—阻尼器那样的东西。哪怕是最温和的版本——让手臂稳稳地抵住自身重量——也不过是目标加速度为零的逆动力学,更常被称作重力补偿

正动力学:从出力到运动

正动力学则把方程反过来跑。这里你已知力矩——也许正是控制器即将发出的那些——于是你问:“在这些推力下,机器人究竟会如何加速?”解出 qddot 确实需要对质量矩阵 M 求逆,但这是一步成熟的线性代数运算。一旦得到加速度,你就用极小的时间步把它向前积分,得到速度、再得到位置,机器人未来的运动便在眼前徐徐展开。

机器人仿真器做的正是这件事,每秒成千上万次:取当前状态与施加的力矩,跑一遍正动力学,让时间前进一步,再重复。它是每一个数字孪生的跳动心脏——真实机器人的虚拟副本,你可以随意戳它、撞坏它、反复训练它,而不必弄弯一块金属。

记住这一对的简洁办法:逆动力学问“我需要多大的力?”,住在控制器里;正动力学问“这个力会带来什么?”,住在仿真器里。二者互为逆运算,而一个好的仿真器与一个好的控制器,其实是同一份物理知识朝相反方向指过去的样子。

接触动力学:数学变得棘手之处

迄今为止的一切,都假设机器人在空旷空间中自由运动,力与运动都平滑地变化。可一旦机器人*碰到了什么*——夹爪抓住零件、脚踩上地面——这份平滑便瞬间破碎。这就是接触动力学的疆域,也是优雅方程与顽固现实相遇之处。

有三样东西打破了平滑的图景。其一是冲击:脚撞上地板时,速度几乎瞬间改变,那是一记近乎不连续的猛震,微分方程必须把它吸收掉。其二是摩擦锥:接触只能推、不能拉,且抵抗侧向滑动的能力受摩擦设定的上限所限——于是允许的力住在一个锥体之内,而非整个空间。其三是接触的通断:脚要么接触、要么不接触,一旦切换,方程就在两套截然不同的状态之间瞬间翻转。

这也是为什么与世界接触,最好不要用刚硬的位置指令,而要用柔顺的指令来处理。一台以阻抗控制去触碰表面的机器人,表现得像一根可编程的弹簧,让接触力保持温和而不至于骤然飙升——这是应对接触所抛来的那些不连续性远更安全的方式。

陷阱、仿真到现实的鸿沟,以及前沿

动力学的好坏,全系于其模型,而真实机器人总在合谋破坏模型。每个质量、每个重心、每个摩擦系数都测得不够完美,于是你算出的 M、C、g 总会有点偏差。更糟的是,真实连杆并非完全刚性:齿轮会挠曲、皮带会拉伸、谐波减速器会像小弹簧一样卷绕蓄劲。这种未建模的柔性意味着你下达的力矩与得到的运动,从来不会完全吻合。

摩擦尤其该被点名。教科书里简单的关节摩擦是一条平滑曲线,但真实摩擦会先粘住、再骤然打滑,还随温度与磨损而改变——出了名地难以建模。把这些通通加起来,你就得到了现实鸿沟:一个在仿真中完美无瑕的控制器或策略,到了真机上却频频踉跄。弥合它,正是仿真到现实迁移的全部挑战。

前沿在于,在手推物理与纯试错之间取得折中。习得的动力学模型让机器人从经验中拟合出自己的运动方程——包括没人能干净写下的摩擦与柔性——而世界模型更进一步,学会直接从数据预测动作的后果。最难啃的奖赏当属富接触操作:诸如插插头、扣衬衫纽扣这类任务,其成败完全栖身于经典模型最不擅长的那片混乱接触地带。这正是动力学研究下一步要去的方向。