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

panda机械臂的正逆运动学分析与仿真


文章目录

  • 前言
  • Panda机械臂的DH参数法建模
  • 正运动学
  • 逆运动学
    • 误差函数
    • 雅可比矩阵
    • 高斯-牛顿法(Gauss-Newton)
  • 参考
  • 代码获取

前言

机械臂的位置运动学分析是机器人控制与轨迹规划的核心基础,其研究内容主要分为正运动学(Forward Kinematics)和逆运动学(Inverse Kinematics)两大部分,二者构成运动学分析的完整闭环。

正运动学研究的是在已知机械臂各关节角度的条件下,通过数学模型计算末端执行器在三维空间中的位置(x, y, z坐标)和姿态(如欧拉角或四元数表示)。其本质是通过关节空间到笛卡尔空间的映射关系,建立末端位姿与关节变量的函数表达式。常用的建模方法包括几何分析法(适用于简单构型)、Denavit-Hartenberg(DH)参数法(标准DH法、改进DH方法)。改进DH法通过调整坐标系分配规则,更适用于具有平行关节或特殊拓扑结构的机械臂,本文即采用该方法构建运动学模型,其优势在于能减少奇异点并提高参数定义的规范性。

逆运动学则解决相反的问题:在给定末端执行器目标位姿的约束下,反推出机械臂各关节所需达到的角度值。这一过程具有更强的工程挑战性,主要体现在解的存在性(可达工作空间判断)、多解性(关节构型选择)以及求解算法的实时性等方面。常用的求解算法可分为两大类:

  • 解析法(封闭解):通过代数变换或几何分解直接推导关节角表达式。

  • 数值法(迭代解):采用雅可比矩阵迭代或优化算法逼近解,适用于通用构型但需处理收敛性问题。

正逆运动学的协同求解构成了机械臂轨迹生成与实时控制的理论基础,其中正运动学用于实际位姿反馈验证,逆运动学则服务于关节空间的目标规划,二者的精度与效率直接影响机械臂的整体性能。

Panda机械臂的DH参数法建模

坐标系定义和DH参数确定

在这里插入图片描述

  • α i \alpha_{i} αi:沿着 X ^ i − 1 \hat{X}_{i-1} X^i1方向看,从 Z ^ i − 1 \hat{Z}_{i-1} Z^i1转到 Z ^ i \hat{Z}_i Z^i的旋转角度
  • a i − 1 a_{i-1} ai1:沿着 X ^ i − 1 \hat{X}_{i-1} X^i1方向, Z ^ i − 1 \hat{Z}_{i-1} Z^i1 Z ^ i \hat{Z}_i Z^i间的距离( a i a_{i} ai>0)
  • θ i \theta_{i} θi:沿着 Z ^ i \hat{Z}_{i} Z^i方向看,从 X ^ i − 1 \hat{X}_{i-1} X^i1转到 X ^ i \hat{X}_i X^i的旋转角度
  • d i d_{i} di:沿着 Z ^ i \hat{Z}_{i} Z^i方向, X ^ i − 1 \hat{X}_{i-1} X^i1 X ^ i \hat{X}_i X^i间的距离( d i d_i di>0)

几何参数

在这里插入图片描述

DH参数

在这里插入图片描述

正运动学

转换公式:

i i − 1 T = T X ^ i − 1 ( α i − 1 ) T X ^ R ( a i − 1 ) T Z ^ Q ( θ i ) T Z ^ P ( d i ) = [ c θ i − s θ i 0 a i − 1 s θ i c α i − 1 c θ i c α i − 1 − s α i − 1 − s α i − 1 d i s θ i s α i − 1 c θ i s α i − 1 c α i − 1 c α i − 1 d i 0 0 0 1 ] \begin{aligned} { }_{i}^{i-1} T & =T_{\hat{X}_{i-1}}\left(\alpha_{i-1}\right) T_{\hat{X}_{R}}\left(a_{i-1}\right) T_{\hat{Z}_{Q}}\left(\theta_{i}\right) T_{\hat{Z}_{P}}\left(d_{i}\right) \\ & =\left[\begin{array}{cccc} c \theta_{i} & -s \theta_{i} & 0 & a_{i-1} \\ s \theta_{i} c \alpha_{i-1} & c \theta_{i} c \alpha_{i-1} & -s \alpha_{i-1} & -s \alpha_{i-1} d_{i} \\ s \theta_{i} s \alpha_{i-1} & c \theta_{i} s \alpha_{i-1} & c \alpha_{i-1} & c \alpha_{i-1} d_{i} \\ 0 & 0 & 0 & 1 \end{array}\right] \end{aligned} ii1T=TX^i1(αi1)TX^R(ai1)TZ^Q(θi)TZ^P(di)= cθisθicαi1sθisαi10sθicθicαi1cθisαi100sαi1cαi10ai1sαi1dicαi1di1

注意: c θ i c\theta_{i} cθi表示 c o s ( θ i ) cos(\theta_{i}) cos(θi) s θ i s\theta_{i} sθi表示 s i n ( θ i ) sin(\theta_{i}) sin(θi),其他同理。

则:

1 0 T = [ c θ 1 − s θ 1 0 0 s θ 1 c θ 1 0 0 0 0 1 0.333 0 0 0 1 ] \begin{aligned} { }_{1}^{0} T & =\left[\begin{array}{cccc} c \theta_{1} & -s \theta_{1} & 0 & 0 \\ s \theta_{1} & c \theta_{1} & 0 & 0 \\ 0 & 0 & 1 & 0.333 \\ 0 & 0 & 0 & 1 \end{array}\right] \end{aligned} 10T= cθ1sθ100sθ1cθ1000010000.3331

其中, a 0 = 0 a_{0}=0 a0=0 d 1 = 0.333 d_{1}=0.333 d1=0.333 α 0 = 0 \alpha_{0}=0 α0=0

2 1 T = [ c θ 2 − s θ 2 0 0 0 0 1 0 − s θ 2 − c θ 2 0 0 0 0 0 1 ] \begin{aligned} { }_{2}^{1} T & =\left[\begin{array}{cccc} c \theta_{2} & -s \theta_{2} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -s \theta_{2} & -c \theta_{2} & 0 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \end{aligned} 21T= cθ20sθ20sθ20cθ2001000001

其中, a 1 = 0 a_{1}=0 a1=0 d 2 = 0 d_{2}=0 d2=0 α 1 = − π / 2 \alpha_{1}=-\pi/2 α1=π/2

⋮ \vdots

7 6 T = [ c θ 7 − s θ 7 0 0.088 0 0 − 1 0 s θ 7 c θ 7 0 0 0 0 0 1 ] \begin{aligned} { }_{7}^{6} T & =\left[\begin{array}{cccc} c \theta_{7} & -s \theta_{7} & 0 & 0.088 \\ 0 & 0 & -1 & 0 \\ s \theta_{7} & c \theta_{7} & 0 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \end{aligned} 76T= cθ70sθ70sθ70cθ7001000.088001

其中, a 6 = 0.088 a_{6}=0.088 a6=0.088 d 7 = 0 d_{7}=0 d7=0 α 6 = π / 2 \alpha_{6}=\pi/2 α6=π/2

最终末端执行器相对于基座坐标系的变换矩阵为:

7 0 T = 0 1 T 1 2 T 2 3 T 3 4 T 4 5 T 5 6 T 6 7 T \begin{aligned} { }_{7}^{0} T & ={ }_{0}^{1} T { }_{1}^{2} T { }_{2}^{3} T { }_{3}^{4} T { }_{4}^{5} T { }_{5}^{6} T { }_{6}^{7} T \end{aligned} 70T=01T12T23T34T45T56T67T

仿真分析

在这里插入图片描述

逆运动学

这里介绍一下通过数值法来逆向求解机械臂的关节角度。

误差函数

首先定义一个误差函数 E E E ,它衡量末端执行器的实际位置和姿态与目标位置的差异:

E = ∥ 7 0 T − 7 0 T ∗ ∥ E = \left\| { }_{7}^{0} T - { }_{7}^{0} T^* \right\| E= 70T70T

其中 7 0 T ∗ { }_{7}^{0} T^* 70T 是目标的位置和姿态的变换矩阵, ∥ ∥ \| \| ∥∥ 表示的是范数(norm)。

雅可比矩阵

雅可比矩阵(Jacobian matrix)是求解逆运动学问题的关键工具。它是一个偏导数矩阵,表示末端执行器在基座坐标系下的位移分量对每个关节变量的变化率。

在这里插入图片描述

在这里插入图片描述

高斯-牛顿法(Gauss-Newton)

高斯-牛顿法是一种常用的数值优化方法,用于求解非线性最小二乘问题。在逆运动学中,我们可以将误差函数 E E E 视为关于关节变量的非线性函数,并使用高斯-牛顿法来迭代地更新关节变量,以减小误差函数的值。

具体步骤如下:

  1. 初始化:选择一组初始的关节角度作为起点。
  2. 计算雅可比矩阵和误差向量:根据当前的关节角度,计算出末端执行器的位置和姿态(即变换矩阵),然后计算雅可比矩阵和误差向量。
  3. 构建增广正规方程:构造一个增广的正则化方程组,其中包括了雅可比矩阵的转置乘以雅可比矩阵加上一个正则项 λ I \lambda I λI (其中 I I I 是单位矩阵, λ > 0 \lambda > 0 λ>0)。这个正则项是为了防止奇异性的出现,特别是在某些关节接近极限时。
  4. 解算增量:通过解上述增广正规方程组,得到关节角度的增量。
  5. 更新关节角度:用得到的增量更新关节角度。
  6. 重复以上步骤:直到满足一定的收敛条件(例如,误差函数的值小于某个阈值,或者增量的大小足够小)。
  7. 返回最终的关节角度。

其中的关键步骤为:

❇️创建一个6x6的单位矩阵W,用于在求解增广正规方程时乘以雅可比矩阵的转置和雅可比矩阵。

W = [ 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ] 6 × 6 \begin{aligned} W = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \end{bmatrix}_{6 \times 6} \end{aligned} W= 100010001 6×6

❇️迭代求解

  • 计算误差

通过正运动学求解当前的机械臂末端位姿矩阵: T current = fkine ⁡ ( q ) \mathbf{T}_{\text{current}}=\operatorname{fkine}(\mathbf{q}) Tcurrent=fkine(q)

E = tr2delta ⁡ ( T current , T target  ) \mathbf{E}=\operatorname{tr2delta}\left(\mathbf{T}_{\text{current}}, \mathbf{T}_{\text {target }}\right) E=tr2delta(Tcurrent,Ttarget )

当误差小于容差时终止循环: ∥ W ∗ E ∥ < t o l \text{当误差小于容差时终止循环:} \left \| W*E \right \| < tol 当误差小于容差时终止循环:WE<tol

  • 计算雅可比矩阵

J = jocobi ( q ) \mathbf{J} = \text{jocobi} (\mathbf{q}) J=jocobi(q)

  • 更新关节角

Δ q = ( J ⊤ W J + ( λ + λ min ⁡ ) I ) − 1 J ⊤ W E \Delta\mathbf{q}=\left(\mathbf{J}^\top\mathbf{W}\mathbf{J}+(\lambda+\lambda_{\min})\mathbf{I}\right)^{-1}\mathbf{J}^\top\mathbf{W}\mathbf{E} Δq=(JWJ+(λ+λmin)I)1JWE

q n e w = q + Δ q ⊤ \mathbf{q}_{\mathrm{new}}=\mathbf{q}+\Delta\mathbf{q}^\top qnew=q+Δq

参考

代码获取

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关注👇👇,发送:DockerRos2UnityArm,获取仿真代码。

http://www.lryc.cn/news/2378749.html

相关文章:

  • QT使用QXlsx读取excel表格中的图片
  • VulnHub | Breach - 1
  • CMake基础及操作笔记
  • 在Oracle到GreatSQL迁移中排序规则改变引发的乱码问题分析及解决
  • 开源物联网平台(OpenRemote)
  • JavaScript入门【3】面向对象
  • 软件安全检测报告:如何全面评估企业级办公软件安全性?
  • 区间dp(竞赛)
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色常量QColorConstants)
  • 大模型技术演进与应用场景深度解析
  • 鸿蒙5.0项目开发——鸿蒙天气项目的实现(主页1)
  • python项目参考文献
  • 【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GATT规范和ATT属性协议 + 电池电量服务例程
  • 2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题
  • 【记录】Windows|竖屏怎么调整分辨率使横竖双屏互动鼠标丝滑
  • 开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析
  • 数据结构*优先级队列(堆)
  • 汽车Wafer连接器:工业设备神经网络的隐形革命者
  • 微信小程序:封装表格组件并引用
  • 湖北理元理律师事务所:债务优化中的双维支持实践解析
  • uniapp在APP上如何使用websocket--详解
  • 计网| 网际控制报文协议(ICMP)
  • Conda 完全指南:从环境管理到工具集成
  • 安卓中0dp和match_parent区别
  • 蓝桥杯-不完整的算式
  • 信贷风控笔记4——贷前策略之额度、定价(面试准备12)
  • A级、B级弱电机房数据中心建设运营汇报方案
  • Linux中的域名解析服务器
  • 如何优化Java中十进制字符串转十六进制的性能
  • CycleISP: Real Image Restoration via Improved Data Synthesis通过改进数据合成实现真实图像恢复