当前位置: 首页 > news >正文

机器人导论 第六章 动力学(2)——拉格朗日动力学推导与详述

在https://blog.csdn.net/2301_80226956/article/details/147035633?spm=1001.2014.3001.5502
这篇文章已经“抽象”地推导了如上方程,文中的形式是:

具体推导会涉及虚功原理,因此不严谨推导,上文仅供理解。

动力学的目的就是:

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

力域雅可比与动力学的混淆问题

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

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

“力域雅可比”解决的是一个不同的问题,属于静力学外力映射范畴,他的目的是将作用在机器人末端执行器上的外力/力矩 F_{end} 映射到对应的关节空间力矩 \tau_{ext}

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


前言

拉格朗日动力学方程和之前讲的牛顿-欧拉迭代法都是用于解决动力学问题的思路,但二者有本质区别,牛顿欧拉方程的观点是力平衡下的推导,而拉格朗日法则是基于最低能量原理的推导,具体来说,就是物体总是倾向走能量消耗最小的轨迹。

书上只给出了RP机构的推导,但实际应用上更多时候是串联的旋转关节机械臂,因此本文参考 UP:德狗追求独立 的视频【机器人动力学拉格朗日法详细推导(二连杆机械臂)】 https://www.bilibili.com/video/BV1DP4y1o7Bu/?share_source=copy_web&vd_source=2c56c6a2645587b49d62e5b12b253dca

拉格朗日动力学方程的推导

对二连杆机械臂进行拉格朗日动力学分析,这种分析可以扩展到任意关节的串联机械臂。

我们的核心就是计算右侧的τ,因此就必须计算左侧的各参数,分别是:
k——动能:由角动能和线动能组成
u——势能
\Theta——关节角度
\tau——各关节力矩

对于上面的二连杆机械臂,我们做出简化:
假设质量都集中在连杆末端,这样能大大简化关于角量的计算,因此此时惯量矩阵为0;

动能 k 计算

首先计算动能k1k2,其中第一项是线动能,第二项是角动能,而由于我们的简化,第二项置零。


对于第一连杆,v_1=\omega_1 \cdot r_1,因此动能很容易得到:
k_1 = \frac{1}{2} m_1 l_1^2 \dot{\theta}_1^2

对于第二连杆,由于涉及速度牵连,如果多连杆,那么计算的复杂度一定很大,因此我们引入广义坐标和广义速度计算。

通过对广义坐标x2,y2求导就能得到第二连杆在xy方向的分速度,接着合成速度即可。

合成分速度:

k_1 = \frac{1}{2} m_1 l_1^2 \dot{\theta}_1^2

因此总动能:

势能 u 计算

u=mgh,h用这种投影到y轴上即可。

关节力矩 τ 计算

现在ku都算出来了,接下来就要完成整个左式的计算。

求导法则别忘咯:链式法则、嵌套函数的求导:外导乘内导、乘积求导法则:导原原导

首先计算\frac{\partial u}{\partial\Theta}

请注意,求导是“分别”对每个关节求导,因此每次都只需要求对\theta_i的导数,一会列式子也是每个关节满足自身的方程。

接着求\frac{\partial k}{\partial \Theta}

最后求\frac{d}{dt}\frac{\partial k}{\partial \Theta}

注意这里是对时间求导,不是对关节变量求导!

经过上面推导,我们能得到:

\frac{\partial u}{\partial\theta_1} \frac{\partial u}{\partial\theta_2} 
\frac{\partial k}{\partial \theta_1} \frac{\partial k}{\partial \theta_2} 
\frac{d}{dt}\frac{\partial k}{\partial \theta_1} \frac{d}{dt}\frac{\partial k}{\partial \theta_2}

他们分别是:

这样,我们就可以计算关节力矩τ了!
把上述六个变量带入:

计算得到:

整理为状态空间方程

为什么

这个形式不美观,我们往往会整理为状态空间方程,即,可以通过对关节变量次数的不同,可以整理为 M(\Theta)质量矩阵,V(\Theta, \dot \Theta)离心力和哥氏力,G(\Theta)重力矢量。

这是因为:
关节力矩一受牛顿力学影响——F=M(\Theta)\ddot \Theta,这部分反映了系统的惯性特性,他只与加速度有关,于是力矩τ的式子包含\ddot \Theta的项就被整理进M(\Theta)中了。

二受离心力和哥氏力影响——V(\Theta, \dot \Theta),离心力和哥氏力都是由于旋转运动产生的惯性力,它们与关节的位置 Θ 和速度 \dot \Theta 有关,于是力矩τ的式子包含Θ、\dot \Theta的项就被整理进V(\Theta, \dot \Theta)中了。

三要抵消重力影响——G(\Theta),而重力只与势能有关,因此是关于关节变量的普通函数,于是力矩τ的式子仅包含Θ的项就被整理进G(\Theta)中了。

哥氏力和离心力的作用

  1. 离心力:当一个物体绕着某个轴旋转时,会产生向外的力,这就是离心力。在机器人操作臂中,每个连杆的旋转都会产生离心力,这些力会对相邻的连杆和关节产生作用,从而影响关节力矩。

  2. 哥氏力:当一个物体在一个旋转参考系中进行直线运动时,会感受到一个与运动方向垂直的力,这就是哥氏力。在机器人操作臂中,如果一个关节在旋转的同时另一个关节也在运动,那么就会产生哥氏力,这种力同样会影响关节力矩。

由此,可以整理出最后的状态矩阵:

我们再回看状态空间方程:

\tau = M(\Theta)\ddot{\Theta} + V(\Theta, \dot{\Theta}) + G(\Theta)

显然,他们都是与关节变量、速度、加速度有关的,因此得到运动状态参数后就能写出上面这些矩阵,并构建方程,从而计算关节力矩了。

对于多连杆串联机械臂

同样的,对于多个连杆的串联机械臂,我们也可以通过获取运动状态参数,从而填充矩阵,计算得出各个关节所需要的力矩,从而驱动关节。

由此,我们就完成了动力学的任务:

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

写在后面

同时我们强调,在真正进行计算的时候用的还是牛顿-欧拉法,因为在复杂度上他有绝对的优势,但做分析的时候,拉格朗日法能提供另一个维度的考量。

为什么选择牛顿欧拉法?

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

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

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

文章转载自:

http://SS1pfdw8.qsctt.cn
http://p1jMaR83.qsctt.cn
http://xl0kp5MX.qsctt.cn
http://V9YxbxUB.qsctt.cn
http://bvcVjJyu.qsctt.cn
http://FwcfBFYA.qsctt.cn
http://YsCJRjSM.qsctt.cn
http://9IXDf9fV.qsctt.cn
http://oXJUcylg.qsctt.cn
http://0asvUeaZ.qsctt.cn
http://xMjHnoWK.qsctt.cn
http://5l3cXElK.qsctt.cn
http://8QjujZ0M.qsctt.cn
http://Si41ozqt.qsctt.cn
http://ymQXjnof.qsctt.cn
http://9Bce0KRI.qsctt.cn
http://abpT5Wfo.qsctt.cn
http://KY2gIn6n.qsctt.cn
http://C6ZZc5zm.qsctt.cn
http://8q90FITx.qsctt.cn
http://IS4dacAP.qsctt.cn
http://ZCvxeas4.qsctt.cn
http://nKSvZOUf.qsctt.cn
http://c9YhBX6s.qsctt.cn
http://MRr1MxkK.qsctt.cn
http://1386ngrQ.qsctt.cn
http://aun0Q3yp.qsctt.cn
http://PL6nkX3q.qsctt.cn
http://RBTXO4Y7.qsctt.cn
http://AcJNjUgD.qsctt.cn
http://www.dtcms.com/a/386390.html

相关文章:

  • 在uniapp中调用虚拟机调试vue项目
  • UE5 GAS 技能系统解析:EGameplayAbilityTriggerSource 枚举详解
  • MySQL 基础概念与简单使用
  • PostgreSQL高可用架构实战:构建企业级数据连续性保障体系
  • (二)昇腾AI处理器计算资源层基础
  • C++17新特性:用[*this]告别悬垂指针,提升并发健壮性
  • Buck电路输出电容设计:从理论到实践的完整指南
  • Gin + Gorm:完整 CRUD API 与关系操作指南
  • 996引擎-ItemTips特效框层级自定义
  • 软考高级系统架构设计师之构件与中间件技术篇
  • Maya绑定案例:摆动、扭曲、拉伸(样条IK高级扭曲、表达式)
  • FOG钻井多花数倍成本?MEMS陀螺定向短节如何为成本做“减法”?
  • 性能分析工具的使用
  • DNS-Windows上使用DNS
  • Go 语言开发京东商品详情 API:构建高并发数据采集服务
  • 通用计算流体力学CFD软件VirtualFlow 2025发布,5大亮点
  • 趣味学RUST基础篇(实战Web server)完结
  • 机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述
  • Android U 浮窗——整体流程介绍(更新中)
  • Pytest+request+Allure
  • Android 反调试攻防实战:多重检测手段解析与内核级绕过方案
  • [vue.js] 树形结点多选框选择
  • websocket python 实现
  • 使用代理访问网络各项命令总结
  • 信创电脑入门指南:定义、发展历程与重点行业部署详解
  • PostgreSQL——元命令
  • PHP 连接池详解:概念、实现与最佳实践
  • nginx + php-fpm改用socket方式代理可能遇到的问题
  • 一篇文章说清【布隆过滤器】
  • 「数据获取」《中国教育经费统计年鉴》(1997-2024)