机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述

机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述

机器人动力学分析复习速通

机器人分析分为

牛顿欧拉法、拉格朗日法、高斯法、凯恩方法

matlab提供的逆动力学采用的是牛顿欧拉法:RNE——Recursive Newton-Euler

需要三个参数,第一个是给定最终的角度,第二个是速度,第三个是角加速度,返回各个关节所需要的力矩。
可选参数有重力加速度和负载fext

牛顿欧拉法

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

\tau

一上来看到有人问——我们不是用力域雅可比解决了每个关节应该分配多大力矩的问题了吗?

这是我初学的时候也弄混的问题。

“力域雅可比”解决的是一个不同的问题,属于静力学外力映射范畴,他的目的是将作用在机器人末端执行器上的外力/力矩

F_{end}

映射到对应的关节空间力矩

\tau_{ext}

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


牛顿欧拉法的精髓在于正推和逆推,我们来看这个过程:

  • 正向递推(Forward Recursion):从基座到末端,计算每个连杆的速度、加速度
  • 反向递推(Backward Recursion):从末端到基座,计算每个关节需要提供的力和力矩
我们先大概浏览一遍整个过程,这里看不懂也没关系,大概有个流程印象即可!

我们快速总结一下:

动力学的目的就是计算在某个运动状态下,各个关节应该施加多大的力,因此核心是构建一个“运动状态-力学参数”的方程,牛顿和欧拉两位大佬就提供了。
我们的核心就变成了如何得到各个关节的“真实速度”。
我们已知各个关节的关节空间的速度、角速度、加速度,如何将前一个坐标系的运动参数传递给下一个坐标系计算呢?
这就用到了正推,构建线速度、线加速度、角速度、角加速度以及质心和端点的速度关系。
这里面最难理解的就是对Zi轴的求导,我们把求导拆成先微分再对时间求导,并用红蓝绿坐标系表示了这个过程。
最终得到了运动参数的递推公式。


我们又知道,力的传播是从末端向基座的,因此力的计算就是逆推的过程。
我们先对连杆的相互作用点进行了受力分析,并构建了端点到质心的变换公式,得以计算质心处的合力矩情况。
此时的合力矩指的是xyz三方向的合力矩,但是关节电机只能控制绕z轴旋转的力矩,因此我们将合力矩中的Z方向力矩提取出来,直接用Z的方向向量点积即可。
由此,我们就能通过得知各个关节的关节速度、加速度,从而推导出各个关节需要多大的力矩了!

那么构建运动状态和力的关系的等式就显而易见了:

牛顿方程:

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

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

欧拉方程具体是如何推导的请参考:【机器人学 3.5 牛顿欧拉递推动力学算法前置知识3】 https://www.bilibili.com/video/BV1Re41127pq/?share_source=copy_web&vd_source=2c56c6a2645587b49d62e5b12b253dca

不看不影响,暂且把它当作和牛顿方程一样的给定式。

其中,

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

是刚体在{C}中的惯性张量。惯性张量矩阵求法可以参考【】

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


由于串联机械臂具有强耦合关系,因此相邻关节之间存在一定递推关系。假设你在旋转肩膀的同时转动胳膊,定义肩膀的角速度ω1,胳膊的角速度ω2,此时,你胳膊的实际角速度并非ω2,而是一个与肩膀角速度相关的函数,意味着当前连杆的运动状态依赖于前一个连杆的运动参数。递推法就是计算当前连杆真实运动状态的方法。

正推

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

我们只关心相邻连杆的运动状态关系:

旋转运动参数

角速度

对于角速度:


这个式子很好理解,地球自转的同时也绕着太阳公转,因此真实的角速度是公转速度+自转速度。在这里,wi指前一个关节的角速度,即绕太阳的公转速度,第二项是地球绕地轴Zi+1的自转速度。

角加速度

对于角加速度:


角加速度无非是对角速度求时间的微分。
第一项求导很正常。
第二项求导要注意,是乘积求导法则。对于速度

\dot\theta

求导没问题,重点在于如何对

\hat{Z}_{i+1}

求导


为了简化计算,我们不妨设

Z_{i}

Z_{i+1}

互相垂直,那么根据下图,此时的

d\hat{Z}_{i+1}

表示

\hat{Z}_{i+1}

离原来偏移了多少,就可以用

\hat{Z}_{i+1}

\hat{Z}_{i}

叉积表示了!

\hat{Z}_{i+1}

前 X 

\hat Z_{i}

的结果就是最大的红色箭头。假设经过dt后

\hat{Z}_{i+1}

从(前)变到(后),此时

d\hat{Z}_{i+1}

正好与叉积结果平行!

叉积就是乘以sin,于是有:

|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系的运动状态计算i+1系的运动参数,因此要把所有参数转入{i+1}系中:
同时利用旋转矩阵({i}系与{i+1}系的旋转矩阵)将所有参数的上下标统一:

平移运动参数

线速度

线速度不仅会由前一个连杆传递(即便前一个连杆不存在平移,也可能继承了前前个平移关节的线速度);
如果前一个连杆是旋转关节,由于存在连杆长度R,必然会产生由旋转而产生的线速度

v_{rotate}=\omega \times R

 也就是 角速度X半径

这个

P^*_{i+1}

是指{i}系原点指向{i+1}系原点的向量,也就是连杆长度。

线加速度

同理,求加速度就是对速度求时间的微分。
第一项求导很正常。
第二项求导要注意,是乘积求导法则。

\dot P^*_{i+1}=w_i \times P^*_{i+1}

是显然的线速度就是 角速度X半径

\dot P^*_{i+1}

替换进求导的式子,得到上式。

接着,先将各参数转入{i}参考系,再用{i}系与{i+1}系的旋转矩阵

_{}^{i+1}\textrm{R}_{i}

将运动参数转入{i+1}系中。

从质心到关节的变换

上面我们刻画了质心的运动参数递推关系,但是在实际控制中,我们肯定控制的是关节,因此还需要将质心处的参数变换到关节上:

线速度

规定关节坐标系原点指向质心的向量为

P^*_{C_{i+1}}

,那么这显然是一个类似“平移”的操作,因此套用线速度的递推公式:

线加速度

同理求导,下式关系显然满足(旋转引起的线速度=角速度X半径)。

因此求导可得:

同理,将其转入{i+1}系:


这就是书上这几个不给推导/引用链比你还长的式子的简要理解:

注:

书上的推导是严谨的,但是深邃难懂,我也是二刷才看懂,而且引经据典到6.15式,6.15有引用6.6式,6.6式又引用5.12式等,引用链复杂。此外,从三系变换到i、i+1系变换过于突兀,极其不易理解。
因此在刷完B站能找到的所有关于牛顿欧拉法的视频后给出这个浅显易懂的推导。

汇总

总而言之,我们已经掌握了线速度、线角速度、角速度、角加速度的递推公式:

同时,牛顿和欧拉两位大佬也给我们提供了力和力矩的递推公式:

至此,我们就完成了正推公式的推导和理解,我们已经能借助前一个连杆的运动参数计算当前连杆的运动参数了。

知道运动参数后,我们就可以通过从第n连杆往回推各关节需要的力矩了。

反推

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

我们采用改进DH参数建模,在改进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是该连杆质心处的合力,

f_i

f_{i-1}

是作用在两侧关节的力。


统一到{i}坐标系中:

接下来,我们对连杆{i}受力分析:

假设连杆{i}存在前后两段连杆{i-1}{i+1}:
我们的目的是分析连杆{i}质心处的受力情况

看这张抽象图:
假设所有关节的z旋转轴平行,且垂直纸面向外,这意味逆时针旋转为正向。
首先,关节{i-1}逆时针旋转,因此会给杆{i}一个向左上的力

f_i


关节{i}也逆时针旋转,因此会给杆{i}一个向右上的力

f_{i+1}

,自身会受到杆{i+1}的反作用力

-f_{i+1}


杆{i-1}杆{i}施加 fi 的力,力臂为r1,那么根据右手法则,四指由f指向r,得到力矩N的方向朝下(纸内);
杆{i}杆{i+1}施加 f1+1的力,力臂为ri+1,那么杆{i+1}同样会施加给它一个反作用力-fi+1,于是四指由f指向r,得到力矩N的方向朝上(纸外);

我们的目标是要计算质心处和合力矩。目前已经得到两端相邻连杆对杆{i}的作用力矩了,还要将其转换到质心处:

假设质心Ci向杆{i}坐标系原点的向量是

-_{}^{i}\textrm{P}_{C_i}

,那么质心Ci向杆{i+1}坐标系原点的向量就是

_{}^{i}\textrm{P}_{i+1}-_{}^{i}\textrm{P}_{C_i}


对于作用于两端的力矩就可以通过这个公式合成到质心处:得到

_{}^{i}\textrm{N}_{i}

就是质心处的合力矩。

那么关节i应该施加的力可以通过移项得到

_{}^{i}\textrm{n}_{i}

,观察公式,显然是和

_{}^{i+1}\textrm{n}_{i+1}

相关的,因此,要计算前一个关节的力矩,就必须得知后一个关节的力矩。

这就是为什么计算力矩的过程叫做“逆推”!

而至于为什么要引入质心,就是为了构建上面的等式,构建前后关节的力矩关系,从而递推,他就是个中间变量。

我们继续,

实际上,

_{}^{i}\textrm{n}_{i}

并不是最终的关节力矩,而是中间计算过程中的一个变量——惯性力矩。

那它和真正的“关节力矩”是什么关系呢?

惯性力矩考虑了当前杆件和相邻杆件的惯性力矩、外力和重力的影响。
但是,我们的关节只能产生绕z轴旋转的力,至于重力或负载给的压力,它根本无法影响,换句话说,重力、压力、等非绕z轴的力无法被关节控制。

因此我们还需要提取与绕Z轴相关的力矩,这很简单,直接用Z轴的方向向量点积即可提取出这个方向上作用的力:

如图,

_{}^{i}\textrm{n}_{i}

是一个考虑了xyz三个方向和合力矩,但我们只想要z轴方向的力矩,因此乘以了

[0,0,1]^T

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

我们快速总结一下:

动力学的目的就是计算在某个运动状态下,各个关节应该施加多大的力,因此核心是构建一个“运动状态-力学参数”的方程,牛顿和欧拉两位大佬就提供了。
我们的核心就变成了如何得到各个关节的“真实速度”。
我们已知各个关节的关节空间的速度、角速度、加速度,如何将前一个坐标系的运动参数传递给下一个坐标系计算呢?
这就用到了正推,构建线速度、线加速度、角速度、角加速度以及质心和端点的速度关系。
这里面最难理解的就是对Zi轴的求导,我们把求导拆成先微分再对时间求导,并用红蓝绿坐标系表示了这个过程。
最终得到了运动参数的递推公式。
我们又知道,力的传播是从末端向基座的,因此力的计算就是逆推的过程。
我们先对连杆的相互作用点进行了受力分析,并构建了端点到质心的变换公式,得以计算质心处的合力矩情况。
此时的合力矩指的是xyz三方向的合力矩,但是关节电机只能控制绕z轴旋转的力矩,因此我们将合力矩中的Z方向力矩提取出来,直接用Z的方向向量点积即可。
由此,我们就能通过得知各个关节的关节速度、加速度,从而推导出各个关节需要多大的力矩了!

听懂没?没听懂来705找我,听懂了给自己呱唧呱唧!!!

静力学分析

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

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

为什么选择牛顿欧拉法?

时间复杂度最低——仅O(n)

相对而言,拉格朗日法接近O(n^3)

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

当然RNE也有缺点:

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

其余参考课件:

 

Read more

Qwen3-Embedding-4B推荐方案:llama.cpp集成部署教程

Qwen3-Embedding-4B推荐方案:llama.cpp集成部署教程 1. 引言 1.1 通义千问3-Embedding-4B:面向未来的文本向量化模型 Qwen3-Embedding-4B 是阿里云通义千问(Qwen)系列中专为「语义向量化」设计的中等规模双塔模型,于2025年8月正式开源。该模型以4B参数量、2560维输出向量、支持32k长文本上下文为核心亮点,定位为兼顾性能与效率的企业级语义理解基础设施组件。 其在MTEB(Multilingual Task Evaluation Benchmark)三大子集上表现优异:英文74.60、中文68.09、代码73.50,均优于同尺寸开源embedding模型。更重要的是,它支持119种自然语言及主流编程语言,在跨语言检索、bitext挖掘等任务中达到官方评估S级水平。 得益于Apache 2.0开源协议,Qwen3-Embedding-4B可直接用于商业场景,无需额外授权,极大降低了企业构建多语言知识库、智能客服、文档去重系统的门槛。 1.2 部署目标:轻量化 + 高性能

告别 Copilot 时代:Cursor, Kiro 与 Google Antigravity 如何重新定义编程?

如果说 GitHub Copilot 开启了 AI 辅助编程的“副驾驶”时代,那么 2024-2025 年则是 AI Agent(智能体) 全面接管 IDE 的元年。 现在的开发者不再满足于简单的代码补全,我们需要的是能理解整个项目架构、能自主规划任务、甚至能像真人同事一样工作的“编程搭子”。 今天,我们盘点三款目前最受瞩目、处于风口浪尖的 AI 编程工具:Cursor、Kiro 以及 Google 的重磅新品 Antigravity。无论你是想提升效率,还是想尝鲜最前沿的 Agentic Workflow,这三款神器都不容错过。 1. Cursor:当下体验最好的 AI 代码编辑器 定位:目前最成熟、最流畅的 VS Code 替代者 Cursor

为每个人提供 LLMs:在 Google Colab 中运行 LLaMA-13B 模型和 LangChain

原文:towardsdatascience.com/llms-for-everyone-running-the-llama-13b-model-and-langchain-in-google-colab-68d88021cf0b https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c1c2e1a8e6731e9a039722d2789772e2.png 由 Glib Albovsky 拍摄的照片,Unsplash 在故事的第一部分中,我们使用了一个免费的 Google Colab 实例来运行 Mistral-7B 模型,并使用 FAISS(Facebook AI Similarity Search)数据库提取信息。在这一部分,我们将更进一步,我将展示如何运行 LLaMA 2 13B 模型;我们还将测试一些额外的 LangChain 功能,如创建基于聊天的应用程序和使用代理。同样,就像第一部分一样,所有使用的组件都是基于开源项目,并且将完全免费使用。 让我们开始吧!

昇腾赋能海外主流大模型 | Llama-2-7b深度测评与部署方案

昇腾赋能海外主流大模型 | Llama-2-7b深度测评与部署方案

一. 昇腾引领国产AI算力新时代 当生成式人工智能迈入规模化应用的深水区,大模型已从技术探索走向产业落地的关键节点,而算力作为支撑这一进程的核心基础设施,正面临着前所未有的双重挑战:一方面,以Llama、GPT系列为代表的大模型参数规模持续扩大,对算力的峰值性能、内存带宽、能效比提出了指数级增长的需求;另一方面,全球算力供给格局的不确定性,使得核心算力设施的国产化替代成为保障AI产业自主可控发展的战略刚需。 在此背景下,昇腾(神经网络处理器)作为国产高端AI芯片的核心代表,其技术成熟度、生态适配性与性能表现,直接关系到我国在全球AI算力竞争中的核心话语权。 昇腾自诞生以来,便承载着构建国产AI算力底座的战略使命,通过“芯片-框架-模型-应用”全栈式技术布局,打破了海外算力芯片在高端AI领域的垄断局面。从架构设计来看,昇腾采用面向AI计算的专用架构,集成了大量AI计算单元与高效内存管理模块,能够针对性解决大模型训练与推理过程中的数据吞吐瓶颈。 本次测评的核心硬件平台基于昇腾910B 构建,其为大模型的高速推理提供了坚实的硬件基础; 1.什么是昇腾 昇腾 (Ascend)