跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
MATLAB / OctaveAI算法

机器人动力学:牛顿欧拉法推导与详解

介绍机器人动力学中的牛顿欧拉法,用于计算关节运动状态所需的驱动力矩。核心包含正向递推(计算连杆速度与加速度)和反向递推(计算关节力与力矩)。相比拉格朗日法,牛顿欧拉法时间复杂度更低(O(n)),适合实时控制。文章详细推导了角速度、线速度及加速度的递推公式,并解释了惯性张量与质心变换的关键步骤。同时对比了不同动力学方法的原理与效率,并说明了静力学分析的简化形式。

编程诗人发布于 2026/4/5更新于 2026/7/2651 浏览
机器人动力学:牛顿欧拉法推导与详解

机器人动力学分析

机器人动力学分析方法包括牛顿欧拉法、拉格朗日法、高斯法、凯恩方法等。

Matlab 提供的逆动力学采用的是牛顿欧拉法(RNE——Recursive Newton-Euler)。该方法需要三个参数:给定最终的角度、速度、角加速度,返回各个关节所需要的力矩。可选参数有重力加速度和负载 fext。

牛顿欧拉法

我们的目标是给定机器人的关节位置 q、速度 qd 和加速度 qdd,计算出为了产生这个运动状态,每个关节需要施加多大的驱动力矩。

\tau

注意区分静力学与动力学。"力域雅可比"解决的是静力学或外力映射问题,目的是将作用在机器人末端执行器上的外力/力矩映射到对应的关节空间力矩。

F_{end}

\tau_{ext}

区别在于:一个是给定运动状态,计算每个关节为了达到这个运动状态需要多大力;另一个则是给定末端的力,计算这个力分配在各个关节上是多大。

牛顿欧拉法的精髓在于正推和逆推:

  • 正向递推(Forward Recursion):从基座到末端,计算每个连杆的速度、加速度。
  • 反向递推(Backward Recursion):从末端到基座,计算每个关节需要提供的力和力矩。

动力学的核心是构建一个**'运动状态 - 力学参数'**的方程。已知各个关节的关节空间的速度、角速度、加速度,通过正推构建线速度、线加速度、角速度、角加速度以及质心和端点的速度关系。最难理解的是对 Zi 轴的求导,需拆成先微分再对时间求导。

构建运动状态和力的关系的等式如下:

牛顿方程:

F_i = m \dot{\mathbf{v}}_{C_i}

用于解决刚体平移的动力学刻画,沟通力与线加速度的关系。

欧拉方程:

N_i = \mathbf{c}_i I \dot\omega_i + \omega_i \times \mathbf{c}_i I \omega_i

用于解决刚体旋转的动力学刻画,沟通力矩与角速度、角加速度的关系。

其中,

_{}^{C}\textrm{I}

是刚体在{C}中的惯性张量。

要得到连杆质心的力和力矩,就必须要求线加速度、角速度、角加速度了。

由于串联机械臂具有强耦合关系,相邻关节之间存在一定递推关系。当前连杆的运动状态依赖于前一个连杆的运动参数。递推法就是计算当前连杆真实运动状态的方法。

正推

首先对连杆 1 进行计算,然后利用递推式,就能得知连杆 2 的运动状态直至关节 n。

旋转运动参数

角速度:

![\omega_i] (此处为图片占位,原文档链接保留)

真实的角速度是公转速度 + 自转速度。wi 指前一个关节的角速度,第二项是绕 Zi+1 的自转速度。

角加速度:

对角速度求时间的微分。重点在于如何对 \hat{Z}{i+1} 求导。为了简化计算,设 Z_i 和 Z{i+1} 互相垂直,d\hat{Z}_{i+1} 表示偏移量,可用叉积表示。

|dZ_{i+1}|=|Z_{i+1}|\cdot |\omega_i|\cdot dt \cdot sin(\frac{\pi}{2})

对于 dt 求导:

\frac{dZ_{i+1}}{dt}=Z_{i+1} \times \omega_i

接着,将所有参数转入{i+1}系中,利用旋转矩阵统一上下标。

平移运动参数

线速度:

线速度不仅会由前一个连杆传递,如果前一个连杆是旋转关节,由于存在连杆长度 R,必然会产生由旋转而产生的线速度 v_rotate = ω × R。

P^*_{i+1} 是指{i}系原点指向{i+1}系原点的向量。

线加速度:

同理,求加速度就是对速度求时间的微分。将 \dot P^*_{i+1} 替换进求导的式子,先将各参数转入{i}参考系,再用旋转矩阵将运动参数转入{i+1}系中。

从质心到关节的变换

实际控制中控制的是关节,因此需要将质心处的参数变换到关节上。

规定关节坐标系原点指向质心的向量为 P^*{C{i+1}},套用线速度的递推公式。

求导可得线加速度关系,并将其转入{i+1}系。

汇总可知,已掌握线速度、线角速度、角速度、角加速度的递推公式,以及力和力矩的递推公式。

反推

反推就是通过力、力矩和运动参数构成的方程,输入运动参数,获得各关节的力矩。

采用改进 DH 参数建模,第 i 连杆在第 i 关节的后面。每一个关节都独立产生控制力矩,对第 i 连杆受力分析:杆 i 会受到杆(i-1)的作用力 f_i,也会受到杆(i-1)的反作用力 f_{i-1}。

列出牛二:

F_i = m_i \cdot \dot{v}_{c_i} = f_i - f_{i+1}

f_i = F_i + f_{i+1}

其中 F 是该连杆质心处的合力。

统一到{i}坐标系中后,对连杆{i}受力分析。假设连杆{i}存在前后两段连杆{i-1}{i+1},目的是分析连杆{i}质心处的受力情况。

关节{i-1}逆时针旋转,会给杆{i}一个向左上的力 f_i。关节{i}也逆时针旋转,会给杆{i}一个向右上的力 f_{i+1},自身会受到杆{i+1}的反作用力 -f_{i+1}。

根据右手法则,四指由 f 指向 r,得到力矩 N 的方向。我们的目标是要计算质心处和合力矩。目前已经得到两端相邻连杆对杆{i}的作用力矩了,还要将其转换到质心处。

假设质心 Ci 向杆{i}坐标系原点的向量是 -^{i}P_{C_i},那么质心 Ci 向杆{i+1}坐标系原点的向量就是 ^{i}P_{i+1}-^{i}P_{C_i}。对于作用于两端的力矩就可以通过这个公式合成到质心处:得到 ^{i}N_i 就是质心处的合力矩。

那么关节 i 应该施加的力可以通过移项得到 ^{i}n_i,观察公式,显然是和 ^{i+1}n_{i+1} 相关的,因此,要计算前一个关节的力矩,就必须得知后一个关节的力矩。这就是为什么计算力矩的过程叫做'逆推'!

^{i}n_i 并不是最终的关节力矩,而是中间计算过程中的一个变量——惯性力矩。惯性力矩考虑了当前杆件和相邻杆件的惯性力矩、外力和重力的影响。但是,我们的关节只能产生绕 z 轴旋转的力,至于重力或负载给的压力,它根本无法影响。因此我们还需要提取与绕 Z 轴相关的力矩,这很简单,直接用 Z 轴的方向向量点积即可提取出这个方向上作用的力:

[0,0,1]^T

至此为止,你就完全掌握了正逆推的过程!!!

静力学分析

特别地,当机械臂的速度加速度均为零时,也就是静止时,上面的式子可以得到简化。下式就刻画了静止时各关节力和力矩的计算方式,它可以分析静态下机械臂的负载能力。

...

这就是 Matlab 机器人工具箱的 rne 的实现逻辑。

为什么选择牛顿欧拉法?

时间复杂度最低——仅 O(n)。相对而言,拉格朗日法接近 O(n^3)。

方法原理计算效率
牛顿 - 欧拉法牛顿第二定律 + 欧拉方程⭐⭐⭐⭐⭐ O(n)
拉格朗日法能量法⭐⭐ O(n³)
高斯法最小约束原理⭐⭐
凯恩法广义达朗贝尔原理⭐⭐⭐

当然 RNE 也有缺点:

  • 推导过程繁琐,依赖递归顺序。
  • 不易直接得到显式动力学模型。

目录

  1. 机器人动力学分析
  2. 牛顿欧拉法
  3. 正推
  4. 旋转运动参数
  5. 平移运动参数
  6. 从质心到关节的变换
  7. 反推
  8. 静力学分析
  9. 为什么选择牛顿欧拉法?
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • NSSCTF Web 安全竞赛解题思路汇总
  • OpenMAIC:清华开源 AI 教学平台,支持文档生成课程
  • Jenkins+docker容器部署前端Vue项目详细教程
  • video-analyzer:基于 AI 的视频内容分析与摘要工具
  • C++ 基础入门:输出语句 cout 用法详解
  • 阿里开源 Page-Agent:一行 JS 代码实现大模型前端 DOM 控制
  • 设计支持万人并发抢购的秒杀系统架构方案
  • 具身智能:机器人训练核心流程与关键技术
  • LeetCode 86: 分隔链表
  • Linux 下 OpenClaw 快速安装、初始化及 Web UI 配置指南
  • AI 时代技术民主化:文科生为何成最大受益者
  • Gitee 与 Git 入门指南:从零开始掌握版本控制
  • C++ List 容器实现原理与代码详解(下)
  • Arduino BLDC 机器人 IMU 角度读取与 PID 互补滤波控制
  • 腾讯云轻量服务器部署 OpenClaw 并接入飞书指南
  • 开源大模型深度评测:四大免费模型场景化对比与选型指南
  • Alpine Linux + JDK 兼容性指南:jstack 在容器中为何不可用及解法
  • GitHub Copilot 登录失败常见原因与排查指南
  • VSCode 远程连接时 Copilot Chat 图标不显示的解决方案
  • 二分算法实战:A-B 数对与烦恼的高考志愿

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online