机器人拉格朗日动力学应用公式详解

article/2025/10/24 10:06:43

拉格朗日动力学


请务必先看此处!!!!!

本文没有理论分析,是直接开干!!!

公式部分详细介绍了公式及各参数及其由来

例题部分详细写了公式各部分的详细计算和使用

代码部分则是实现了例题部分的Matlab代码

相关资料部分写了主要的参考来源

本文最佳食用方式!

快速浏览公式部分都有什么东西,以确保后续要用时你能找到

直接去例题部分,跟着推导一边,需要用到啥公式再去公式部分查找,再详细看具体的公式解释

然后去看代码实现,你手推一遍之后就会很容易看懂公式,争取能自己写出来不同题目的代码

想进一步了解的,请看相关资料部分,老卢卡主页的Robotics里面的course material部分有PPT和历次的考试题

题是真的难的一匹。。。期中八成要挂了,跪地吐血

果然挂了,吐血


动力学总公式

中间的推导过程略过,感兴趣得朋友可以自行去查看资料

M ( q ) q ¨ + c ( q , q ˙ ) + g ( q ) = u (动力学总公式) M(q) \ddot{q} +c(q, \dot{q})+g(q)=u \tag{动力学总公式} M(q)q¨+c(q,q˙)+g(q)=u()

  • M(q) 表示广义机器人的惯性矩阵,对称的,正定的, ∀ q ⇒ \forall q \Rightarrow q总是可逆的,求法请继续往下看

  • q ¨ = [ q ¨ c 1 . . . q ¨ c n ] \ddot{q}=\begin{bmatrix} \ddot{q}_{c1} \\ ... \\ \ddot{q}_{cn} \end{bmatrix} q¨=q¨c1...q¨cn 表示连杆质心C的角加速度, q = [ q c 1 . . . q c n ] q=\begin{bmatrix} q_{c1} \\ ... \\ q_{cn} \end{bmatrix} q=qc1...qcn表示角度, c c c 表示连杆质心C

  • c ( q , q ˙ ) c(q, \dot{q}) c(q,q˙) 表示 Coriolis力的系数

  • g ( q ) g(q) g(q) 表示重力项

动能部分

i i i 个单个连杆的总动能公式

T i = 1 2 m i v i T v i + 1 2 ω i T I c i ω i ( 1, K o ¨ nig定理 ) T_{i} = \frac{1}{2}m_{i} v_{i}^{T}v_{i}+\frac{1}{2} \omega_{i}^{T}I_{ci}\omega_{i} \tag{1, König定理} Ti=21miviTvi+21ωiTIciωi(1, Ko¨nig)

各部分参数详细解析:

  • v v v 表示连杆质心 C i C_{i} Ci 的线速度

  • ω \omega ω 表示连杆质心 C i C_{i} Ci的角速度

  • I c i = [ I c i , x x I c i , y y I c i , z z ] I_{ci} = \begin{bmatrix} I_{ci,xx}& & \\ & I_{ci,yy}& \\ & & I_{ci,zz} \end{bmatrix} Ici=Ici,xxIci,yyIci,zz

势能部分

i i i 个单个连杆的总势能公式

U = − m i g 0 d i U = - m_{i} g_{0} d_{i} U=mig0di

  • m i m_{i} mi表示连杆质量

  • g 0 g_{0} g0表示重力加速度,一般为 9.81 m / s 2 9.81m/s^{2} 9.81m/s2

  • d i d_{i} di表示初始连接点到连杆质心C的 d c i d_{ci} dci g 0 g_{0} g0 方向的分量,一般 d i = d c i c o s ( θ ) d_{i} = d_{ci}cos(\theta) di=dcicos(θ)

M(q)部分

整个机器人的总动能为:

T = T 1 + . . . + T n (2) T = T_{1}+ ... +T_{n} \tag{2} T=T1+...+Tn(2)

另有:

T = 1 2 q ˙ T M ( q ) q ˙ (3) T = \frac{1}{2} \dot{q}^{T} M(q) \dot{q} \tag{3} T=21q˙TM(q)q˙(3)

  • q ˙ = [ q ˙ c 1 . . . q ˙ c n ] \dot{q}= \begin{bmatrix} \dot{q}_{c1} \\ ... \\ \dot{q}_{cn} \end{bmatrix} q˙=q˙c1...q˙cn 表示角速度

( 2 ) ( 3 ) (2)(3) (2)(3) 相等,只有M(q)为未知数,则可求得M(q)

c ( q , q ˙ ) c(q,\dot{q}) c(q,q˙)部分

c k ( q , q ˙ ) = q ˙ T C k ( q ) q ˙ c_{k}(q,\dot{q})=\dot{q}^{T}C_{k}(q)\dot{q} ck(q,q˙)=q˙TCk(q)q˙

C k ( q ) = 1 2 ( ∂ M k ∂ q + ( ∂ M k ∂ q ) T − ∂ M ∂ q k ) (4) C_{k}(q)=\frac{1}{2}(\frac{\partial M_{k}}{\partial q} + (\frac{\partial M_{k}}{\partial q})^{T}- \frac{\partial M}{\partial q_{k}}) \tag{4} Ck(q)=21(qMk+(qMk)TqkM)(4)

这里的 M k M_{k} Mk 的详细解释请参见下方的例题

g(q)部分

g ( q ) = ∂ U ∂ q (5) g(q)=\frac{\partial U}{\partial q} \tag{5} g(q)=qU(5)

PR机械臂例题

在这里插入图片描述

  • 第一步,先仔细看题目(废话),然后写出每个连杆质心的位置坐标 P,比如该题为:

P c 1 = ( q 1 − d c 1 0 0 ) P_{c1}=\begin{pmatrix} q_{1}-d_{c1} \\ 0 \\ 0 \end{pmatrix} Pc1=q1dc100

P c 1 = ( q 1 + d c 2 c o s ( q 2 ) d c 2 s i n ( q 2 ) 0 ) P_{c1}=\begin{pmatrix} q_{1}+d_{c2}cos(q_{2}) \\ d_{c2}sin(q_{2}) \\ 0 \end{pmatrix} Pc1=q1+dc2cos(q2)dc2sin(q2)0

  • 第二步,对 P 的时间 t 求导(其实这里的 q i = q i ( t ) q_{i}=q_{i}(t) qi=qi(t),只是简写为q)得其线速度, 写出其角速度(同理,对q的时间求导), ω 1 = 0 \omega_{1}=0 ω1=0,因为是P类连杆,压根没角速度:

P c 1 ˙ = ( q 1 ˙ 0 0 ) \dot{P_{c1}}=\begin{pmatrix} \dot{q_{1}} \\ 0 \\ 0 \end{pmatrix} Pc1˙=q1˙00

P c 2 ˙ = ( q 1 ˙ − d c 2 s i n ( q 2 ) q 2 ˙ d c 2 c o s ( q 2 ) q 2 ˙ 0 ) \dot{P_{c2}}=\begin{pmatrix} \dot{q_{1}}-d_{c2}sin(q_{2})\dot{q_{2}} \\ d_{c2}cos(q_{2})\dot{q_{2}} \\ 0 \end{pmatrix} Pc2˙=q1˙dc2sin(q2)q2˙dc2cos(q2)q2˙0

ω 1 = ( 0 0 0 ) \omega_{1}=\begin{pmatrix}0 \\ 0 \\ 0 \end{pmatrix} ω1=000

ω 2 = ( 0 0 q 2 ˙ ) \omega_{2}=\begin{pmatrix}0 \\ 0 \\ \dot{q_{2}} \end{pmatrix} ω2=00q2˙

  • 第三步,将上述结果带入式(1),求得动能:

T 1 = 1 2 m 1 q 1 ˙ 2 T_{1} = \frac{1}{2} m_{1} \dot{q_{1}}^2 T1=21m1q1˙2

T 2 = 1 2 m 2 ( q 1 ˙ 2 + d c 2 2 q 2 ˙ 2 − 2 d c 2 s i n ( q 2 ) q 1 ˙ q 2 ˙ ) + 1 2 I c 2 , z z q 2 ˙ 2 T_{2}=\frac{1}{2} m_{2} (\dot{q_{1}}^2+d_{c2}^{2}\dot{q_{2}}^2-2d_{c2}sin(q_{2}) \dot{q_{1}} \dot{q_{2}})+\frac{1}{2}I_{c2,zz}\dot{q_{2}}^2 T2=21m2(q1˙2+dc22q2˙22dc2sin(q2)q1˙q2˙)+21Ic2,zzq2˙2

  • 第四步,将T带入式(3),求得M(q):

在这里插入图片描述

  • 第五步,将M 带入式(4)求得 C k ( q ) C_{k}(q) Ck(q) 继而求得 c ( q , q ˙ ) c(q, \dot{q}) c(q,q˙)

在这里插入图片描述

  • 第六步,按说该求势能部分的,但是这个机械臂是平面的,没有势能,所以 g(q)=0, 所以这一步就是将上边求得的式子带入动力学总公式

在这里插入图片描述

Matlab代码实现

clear all
close all
clc%% 定义各种要用的符号syms m1 m2 m3 m4 real     %各连杆质量
syms d1 d2 d3 d4 real     %各质心长度
syms L1 L2 L3 L4 L h real %各连杆长度
syms I1xx I1yy I1zz real  
syms I2xx I2yy I2zz real 
syms I3xx I3yy I3zz real  
syms I4xx I4yy I4zz real  
syms q1 q2 q3 q4 real     %角
syms qv1 qv2 qv3 qv4 real %角速度
syms qa1 qa2 qa3 qa4 real %角加速度
syms u1 u2 u3 u4 g0 real  %% 定义下要用的东西q = [q1; q2];
qv = [qv1; qv2];
qa = [qa1; qa2];
%% 求T1pc1 = [q1-d1; 0;0];
vc1=diff(pc1,q1)*qv1+diff(pc1,q2)*qv2;
T1 = 1/2*m1*(vc1'*vc1);%% 求T2pc2 = [q1+d2*cos(q2); d2*sin(q2);0];
vc2=diff(pc2,q1)*qv1+diff(pc2,q2)*qv2;
T2a = 1/2*m2*(vc2'*vc2);om2 = [0; 0; qv2];
T2b = 1/2*om2'*diag([I2xx I2yy I2zz])*om2;T2=T2a+T2b;%% 求总TT = simplify(T1 + T2)%% 求MM(1,1)=diff(T,qv1,2);
M(2,2)=diff(T,qv2,2);
TempB12=diff(T,qv1);
M(1,2)=diff(TempB12,qv2);
M(2,1)=M(1,2);
M=simplify(M)%% 求cM1=M(:,1);
C1=(1/2)*(jacobian(M1,q)+jacobian(M1,q)'-diff(M,q1))
M2=M(:,2);
C2=(1/2)*(jacobian(M2,q)+jacobian(M2,q)'-diff(M,q2))c1=qv'*C1*qv;
c2=qv'*C2*qv;
c=[c1;c2]%% 最终结果M*qa+c == [u1; u2]

相关资料

理论来源于本人机器人学课程的教授——机器人领域老牛:Prof. Alessandro De Luca

老卢卡机器人运动学视频:B站 YouTube

老卢卡机器人动力学视频:B站 YouTube

代码来源于这个好心的老哥


http://chatgpt.dhexx.cn/article/hcbJyidj.shtml

相关文章

拉格朗日手工求解和编程求解

目录 一、问题二、拉格朗日乘数法的基本思想三、拉格朗日手工求解三、拉格朗日 python 求解四、小结五、参考资料 一、问题 二、拉格朗日乘数法的基本思想 作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘…

表格(拉格朗日插值法)

众所周知,Logx精通Excel。 他觉得表格只有单调的白色非常无聊,他决定将一些单元格涂黑。 在一个n行m列的表格里,刚开始所有单元格都是白的。 Logx打算在这个表格选出三个不同的单元格A(x1,y1),B(x2,y2),C(x3,y3),并将选中的三个单…

[计算机数值分析]拉格朗日插值公式

Spring-_-Bear 的 CSDN 博客导航 实际问题中碰到的函数 f ( x ) f(x) f(x) 是各种各样的,有的表达式很复杂,有的甚至给不出数学式子,只提供了一些离散数据,譬如某些点上的函数值和导数值。 由于问题的复杂性,直接研…

高斯-拉格朗日(Gauss-Legendre )Ⅱ型求积公式 数值分析 勘误 P111

教材信息: 数值分析(第二版) 李红 华中科技大学出版社 Gauss-Legendre Ⅱ型求积公式 [a,b]区间上的3点高斯-拉格朗日(Gauss-Legendre)复化求积公式 X k 2 X_{k2} Xk2​推导说明 QA为什么复化高斯-拉格朗日(Gauss-Legendre)求积公式不需要像牛…

三个三维矢量叉乘公式(拉格朗日矢量公式)推导(非坐标法)

0 简单情况 先从简单的情况开始推导,考虑三个向量 a ⃗ , b ⃗ , c ⃗ \vec{a},\vec{b},\vec{c} a ,b ,c 在同一个平面,其中 c ⃗ ⊥ a ⃗ \vec{c} \perp \vec{a} c ⊥a ,如下图所示,求取 ( a ⃗ b ⃗ ) c ⃗ (\vec{a} \times \…

拉格朗日乘子法 latex手打公式 良心推导

文章目录 拉格朗日乘数法简介等式约束问题明确问题基础知识推导构造求极值 不等式约束问题明确问题问题转化 拉格朗日乘数法 简介 简单概括一下拉格朗日乘子法用来解决具有约束的最值问题。 那么其中主要有两个比较重要的问题需要解决: 等式约束问题不等式约束问…

计算方法学习笔记——插值方法,拉格朗日插值公式

插值方法 插值方法是用来处理和分析数据的方法,所谓插值就是在所给数据的基础上再插入一些所需的值,但这些值不是随便给出的,而是在已有数据的基础上进行分析,给出的近似值。 插值方法要解决的问题 首先当我们遇到一堆数据(如表…

机器学习数学基础二:泰勒公式与拉格朗日

建议如果是大一大二的同学想提前学习机器学习的话可以提前看看我这个专栏的文章,说实话,专门做这个学习机器学习前置知识的博主没多少,至少我当时学的时候没找到多少,不得不学习我很厌恶的一个人讲的课,听得我浑身难受…

拉格朗日插值公式详解

一.线性插值(一次插值) 已知函数f(x)在区间[xk ,xk1 ]的端点上的函数值yk f(xk ), yk1 f(xk1 ),求一个一次函数yP1 (x)使得yk f(xk ),yk1 f(xk1 ), 其几何意义是已知平面上两点(xk ,yk ),(xk1 ,yk1 ),求一条直线过该已知两点。 1. 插值函数和插…

【拉格朗日差值法】 公式

拉格朗日插值法 给出对于给定的若n1个点的坐标(x0,y0),(x1,y1)…,(xn,yn),对应于它们的次数不超过n的拉格朗日多项式只有一个。 应用:给出平面上n1个点,求一条穿过这n1个点的n次多项式,或这个多…

拉格朗日乘子法的分析基础篇

拉格朗日乘子法(Lagrange Multiplier)在在求取有约束条件的优化问题时使用的算法。约束条件又分为等式和不等式方法。这里只用等式方法作为例子分析算法的含义原理(自己理解的)。 首先看拉格朗日的计算式子:L(a, x) f(x) a*g(x…

拉格朗日(Lagrange)插值

问题 给定 n n n 个点,可确定一个多项式 y f ( x ) yf(x) yf(x) ,要求确定这个多项式并求出 f ( k ) f(k) f(k) 拉格朗日(Lagrange)插值公式 搬运 令 L n ( x ) f ( x ) L_n(x)f(x) Ln​(x)f(x) n1 有 由点斜式可以得…

oracle手动锁表

[转载]oracle手动锁表 手工锁表: lock table tbl_t1 in row share mode nowait; --2 lock table tbl_t1 in share update mode nowait; --2 lock table tbl_t1 in row exclusive mode nowait; --3 lock table tbl_t1 in sha…

Oracle数据库锁表解决办法

1.输入查锁语句 SELECT s.sid, s.serial#,b.object_name, s.username, s.schemaname, s.osuser, s.process, s.machine, s.terminal, s.logon_time, l.type FROM v$session s, v$lock l,v$locked_object a,dba_objects b WHERE s.sid l.sid and b.object_id a.object_id and …

Oracle数据库锁表解决

PLSQL不会用,Oracle数据库不了解,哈哈哈,直接闹出了笑话, 由于多次的事务没有提交,导致多个会话没有关闭 造成Oracle数据库表锁死 报 ORA-00054错误 即多个会话没有关闭,Oracle不然你操作了 解决办法 1.查所有被锁的sessionid 用户 哪张表被锁 select l.sessio…

Oracle锁表解决方法

锁表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚或者强制结束当前会话。 对于我们的应用系统而言锁表大概率会发生在SQL执行慢…

centos7 升级 gcc 版本

GNU Mirror List 查看动态库版本 strings /usr/lib64/libstdc.so.6 | grep CXXABI查找gcc生成的最新动态库 find / -name "libstdc.so*"一、升级 gcc: 1、查看当前gcc版本 #默认4.8.5 g -v 或者 gcc --version2、下载gcc源码(10.2.0&…

环境搭建—3.0 Linaro gcc

一、gcc gcc,GNU Compiler Collection,GNU编译器套件,它最初是专门给GNU操作系统开发的,随着时间推移,现在已经成为了嵌入式领域应用最广泛的c/c编译器工具。不管是单片机开发还是linux开发,都离不开gcc。主…

mac使用gcc编译器

mac自带的编译器是clang编译器而且自带的gcc是映射到clang的之前看到网上需要关闭SIP模式很烦,我试了试关闭了也删除不了gcc,也无法软链接。 后来找到一篇曲线救国的帖子,是在~目录下使用的。 首先下载gcc的最新版本&#xff0c…

win10下安装gcc

win10下安装gcc 一、gcc是什么?1.1、安装gcc 第一次安装,记录一下 一、gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc、libgcj等等)。GCC的初…