机器人运动学标定:基于DH建模方法

写在前面

作者:桂凯
链接:https://www.zhihu.com/question/401957723/answer/1298513878
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
当然,运动学标定这种很基础的问题,理论已非常成熟了,基于激光或拉线编码器的标定系统也已经商业化了。我们在接触这块知识的时候,除了理论,也应该关注于如何融合理论与实践之间的gap。
题主提到的关于“最小性、连续性、冗余剔除”等,是在理论成面上针对雅可比矩阵求伪逆等要进行的优化。然而回归到机械臂来说,运动学逆解中主要是采用解析方法,DH参数里面有些参数是不进行标定的,所以像一些商业化的软件,它针对六轴机器人只会标定一部分参数。若要标定所有参数,结果容易不稳定,且对采样点要求也很高。
题主提到的"考虑关节变形",理论上,这个关节变形特性复杂,想要完全建模(非线性与时变特性)非常困难。实际中大家会有一些近似折中处理方法,kuka机器人会在不同负载下使用不同的关节零点。另外关节变形里的减速器传递的周期性波形、动力学特性的复杂,想要更加精确的补偿变得很困难,有些研究给的结果只是很小样本的特例。题主说的绝对精度要到零点零几mm,这可能只是论文结果,实际中要到零点几mm已经是非常困难的。机器人运动学标定这块更具典型意义的产品是关节测量臂,它不用减速器,本体很轻,通过机器人正运动学来测量位置,绝对精度算是关节型机器人里能达到的最高水平了。

误差定义在全局下,根据偏微分理论进行模型构建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

误差定义在局部坐标系下,利用误差传递进行模型构建

在这里插入图片描述在这里插入图片描述在这里插入图片描述

仿真测试

标定集:50组随机关节角及对应真实模型的测量点位姿数据
评价集(测试集):50组随机关节角
标定方法:
(1)基于偏微分的改进dh标定方案,标定过程仅测量位置;
(2)基于误差传递的标准dh标定方案,标定过程仅测量位置;
(3)基于误差传递的标准dh标定方案,标定过程测量位姿。
仿真结果如下:
图中标定后误差是指位置误差,可看出三种方法标定后的模型位置误差均收敛且非常小;
在这里插入图片描述另外,随机选一组测试集中的关节角,验证全位姿方案对比仅位置方案的优越性,如下图所示,可看出只有全位姿测量方案,位置和姿态全收敛到实际值。
在这里插入图片描述在这里插入图片描述在这里插入图片描述


参考文献

[1] 熊有伦. 机器人学: 建模, 控制与视觉[M]. 华中科技大学出版社, 2018.
[2] https://www.zhihu.com/question/54682285/answer/336365316
[3] https://www.zhihu.com/question/401957723
[4] 陈宵燕. 工业机器人多模式标定及刚柔耦合误差补偿方法研究[D].江南大学,2020.DOI:10.27169/d.cnki.gwqgu.2020.000063.
[5] Zhang T, Du L, Dai X. Test of robot distance error and compensation of kinematic full parameters[J]. Advances in Mechanical Engineering, 2014, 6: 810684.

<think>首先,用户的问题是:“我想建立基于DH参数的6自由度机器人运动学模型 请问如何使用Denavit-Hartenberg方法建立六自由度机械臂的正向运动学方程 步骤详解”。这是一个关于机器人学的问题,具体是关于使用Denavit-Hartenberg (DH) 参数来建立六自由度机械臂的正向运动学方程。 我需要确保我的回答符合系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供了参考站内引用:[^1]和[^2]。这些引用是关于DH参数的: - 引用[^1]:讨论DH参数机器人运动学中的应用。 - 引用[^2]:详细描述了DH参数的定义和应用。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”但在这个对话中,这是第一个问题,所以没有“上一次的问题”。我应该基于用户当前的问题和提供的引用来回答。 关键点:用户想建立六自由度机械臂的正向运动学方程,使用DH方法。步骤详解。 我的回答结构应该清晰,帮助用户逐步解决问题。确保回答真实可靠。 步骤详解: 1. **理解DH参数**:解释DH参数是什么。DH参数包括四个参数:连杆长度$a_i$、连杆扭转角$\alpha_i$、连杆偏置$d_i$、关节角度$\theta_i$。 2. **建立坐标系**:为每个关节分配坐标系。 3. **确定DH参数表**:为每个关节计算四个DH参数。 4. **构建变换矩阵**:每个关节的变换矩阵$A_i$。 5. **组合变换矩阵**:计算正向运动学方程作为所有变换矩阵的乘积。 6. **得到末端执行器位姿**:最终变换矩阵给出位置和方向。 对于六自由度机械臂,我需要一个通用的框架。 使用提供的引用: - 引用[^2]说:DH参数是四个参数,用于将坐标系附加到连杆上。 - 引用[^1]提到:DH参数用于建立运动学模型。 在我的回答中,我应该自然地引用这些,但用户说引用仅供参考,所以我需要基于标准知识回答。 生成相关问题:在回答结束时,添加相关问题部分。 回答结构: - 引言:简要介绍DH方法和正向运动学。 - 步骤详解:分步骤解释。 - 示例:可能给出一个简化的例子或公式。 - 总结。 - 相关问题。 确保数学表达式正确: - 行内:如$theta_i$ - 独立:如变换矩阵。 正向运动学方程: 对于每个关节i,变换矩阵$A_i$为: $$ A_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i \cos\alpha_i & \sin\theta_i \sin\alpha_i & a_i \cos\theta_i \\ \sin\theta_i & \cos\theta_i \cos\alpha_i & -\cos\theta_i \sin\alpha_i & a_i \sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ 然后,总变换矩阵$T_6^0 = A_1 A_2 A_3 A_4 A_5 A_6$。 步骤: 1. **定义关节和连杆**:识别六自由度机械臂的关节和连杆。 2. **分配坐标系**:根据DH约定,为每个连杆分配坐标系。 - Z轴沿关节轴。 - X轴沿连杆的法线方向。 3. **确定DH参数**:对于每个关节i,计算: - $a_i$:从Z_i到Z_{i+1}沿X_i的距离。 - $\alpha_i$:从Z_i到Z_{i+1}绕X_i的角度。 - $d_i$:从X_{i-1}到X_i沿Z_i的距离。 - $\theta_i$:从X_{i-1}到X_i绕Z_i的角度。 4. **构建单个变换矩阵**:使用上述公式为每个关节。 5. **计算总变换**:相乘得到从基座到末端执行器的变换。 6. **提取位姿**:从$T_6^0$中获取位置和方向。 在回答中使用中文。 最后,生成相关问题。</think>### 使用Denavit-Hartenberg方法建立六自由度机械臂正向运动学方程的步骤详解 Denavit-Hartenberg(DH方法机器人学中用于建立运动学模型的标准化技术。它通过四个参数(连杆长度$a_i$、连杆扭转角$\alpha_i$、连杆偏置$d_i$、关节角度$\theta_i$)描述相邻连杆之间的几何关系,从而构建正向运动学方程。正向运动学方程计算末端执行器的位姿(位置和方向)基于各关节变量的值。以下是针对六自由度机械臂的详细步骤(假设关节类型为旋转关节,但方法通用)。整个过程依赖于精确的DH参数和齐次变换矩阵[^1]。 --- #### **步骤1: 理解DH参数并定义机械臂结构** - **DH参数定义**:每个关节$i$($i=1$到$6$)有四个参数: - $a_i$:连杆长度,表示从关节$i$的Z轴到关节$i+1$的Z轴沿X轴的距离(单位:米)。 - $\alpha_i$:连杆扭转角,表示从关节$i$的Z轴到关节$i+1$的Z轴绕X轴的旋转角度(单位:弧度)。 - $d_i$:连杆偏置,表示从关节$i-1$的X轴到关节$i$的X轴沿Z轴的距离(单位:米)。 - $\theta_i$:关节角度,表示从关节$i-1$的X轴到关节$i$的X轴绕Z轴的旋转角度(单位:弧度);对于旋转关节,$\theta_i$是变量。 - **机械臂建模**:将六自由度机械臂简化为一个串联链,其中每个连杆连接两个关节。基座(连杆0)固定,末端执行器附着在连杆6上。关节变量(如$\theta_i$)决定了运动状态。 #### **步骤2: 分配坐标系(基于DH约定)** 根据DH约定,为每个连杆分配一个坐标系(从基座到末端)[^2]: 1. **基坐标系({0})**:固定在基座上,Z轴沿关节1的旋转轴。 2. **中间坐标系({i},i=1到5)**: - Z轴:沿关节$i$的旋转轴。 - X轴:沿连杆$i$的法线方向,从Z_i指向Z_{i+1}(如果Z_i和Z_{i+1}相交,X轴垂直于它们构成的平面)。 - Y轴:通过右手定则确定($Y_i = Z_i \times X_i$)。 3. **末端坐标系({6})**:固定在末端执行器上,Z轴通常沿工具方向。 - **规则**:坐标系{i}附着在连杆i上,且原点位于关节i+1的轴线上(或当轴线平行时,选择方便计算的点)。 #### **步骤3: 确定DH参数表** 为每个关节计算四个DH参数(i从1到6)。参数取决于机械臂的具体几何设计(需根据实际尺寸测量或CAD模型提取)。以下是通用示例(假设标准构型,如PUMA机器人): | 关节 $i$ | $a_i$ (m) | $\alpha_i$ (rad) | $d_i$ (m) | $\theta_i$ (rad) | |----------|-----------|------------------|-----------|------------------| | 1 | $a_1$ | $\alpha_1$ | $d_1$ | $\theta_1$ | | 2 | $a_2$ | $\alpha_2$ | $d_2$ | $\theta_2$ | | 3 | $a_3$ | $\alpha_3$ | $d_3$ | $\theta_3$ | | 4 | $a_4$ | $\alpha_4$ | $d_4$ | $\theta_4$ | | 5 | $a_5$ | $\alpha_5$ | $d_5$ | $\theta_5$ | | 6 | $a_6$ | $\alpha_6$ | $d_6$ | $\theta_6$ | - **示例值**(假设一个简单模型): - $a_1=0, \alpha_1=-\pi/2, d_1=0.5, \theta_1=\text{变量}$ - $a_2=0.5, \alpha_2=0, d_2=0, \theta_2=\text{变量}$ - ...(实际值需根据机器人设计确定)。 - **关键点**:$\theta_i$是变量(对旋转关节),其他参数是常数。DH参数将坐标系{i-1}到{i}的变换标准化[^2]。 #### **步骤4: 构建单个关节的变换矩阵** 每个关节$i$的齐次变换矩阵$A_i$将坐标系{i}相对于{i-1}的位姿描述为: $$ A_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i \cos\alpha_i & \sin\theta_i \sin\alpha_i & a_i \cos\theta_i \\ \sin\theta_i & \cos\theta_i \cos\alpha_i & -\cos\theta_i \sin\alpha_i & a_i \sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ - **解释**:矩阵$A_i$包含旋转和平移分量: - 左上3×3子矩阵:表示坐标系{i}相对于{i-1}的旋转。 - 右上3×1向量:表示坐标系{i}原点相对于{i-1}的位置(例如,$[a_i \cos\theta_i, a_i \sin\theta_i, d_i]^T$)。 - **变量处理**:$\theta_i$是未知量(关节变量),其他参数建模时固定。 #### **步骤5: 计算正向运动学方程(总变换矩阵)** 正向运动学方程是基座到末端执行器的总变换矩阵$T_6^0$,通过串联所有$A_i$矩阵得到: $$ T_6^0 = A_1 \cdot A_2 \cdot A_3 \cdot A_4 \cdot A_5 \cdot A_6 $$ - **结果**:$T_6^0$是一个4×4齐次变换矩阵: $$ T_6^0 = \begin{bmatrix} r_{11} & r_{12} & r_{13} & p_x \\ r_{21} & r_{22} & r_{23} & p_y \\ r_{31} & r_{32} & r_{33} & p_z \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ 其中: - $[p_x, p_y, p_z]^T$:末端执行器位置(相对于基座)。 - 3×3旋转子矩阵$[r_{ij}]$:末端执行器方向(可用欧拉角或RPY角表示)。 - **计算要点**: - 矩阵乘法顺序:从基座开始,依次右乘($A_1 A_2 \cdots A_6$)。 - 符号计算:使用代数工具(如Matlab符号工具箱)处理$\theta_i$变量。 #### **步骤6: 提取末端执行器位姿** 从$T_6^0$中提取位姿: - **位置**:直接读取平移向量$(p_x, p_y, p_z)$。 - **方向**:旋转矩阵可转换为欧拉角(如Z-Y-X顺序): $$ \text{偏航角} \psi = \atan2(r_{21}, r_{11}), \quad \text{俯仰角} \theta = \atan2(-r_{31}, \sqrt{r_{11}^2 + r_{21}^2}), \quad \text{翻滚角} \phi = \atan2(r_{32}, r_{33}) $$ 其中$\atan2$是双参数反正切函数。 #### **示例(简化二自由度模型)** 假设一个二自由度机械臂(便于理解,扩展至六自由度类似): - DH参数:关节1 ($a_1=0.5, \alpha_1=0, d_1=0, \theta_1$), 关节2 ($a_2=0.3, \alpha_2=0, d_2=0, \theta_2$) - 变换矩阵: $$ A_1 = \begin{bmatrix} \cos\theta_1 & -\sin\theta_1 & 0 & 0.5 \cos\theta_1 \\ \sin\theta_1 & \cos\theta_1 & 0 & 0.5 \sin\theta_1 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad A_2 = \begin{bmatrix} \cos\theta_2 & -\sin\theta_2 & 0 & 0.3 \cos\theta_2 \\ \sin\theta_2 & \cos\theta_2 & 0 & 0.3 \sin\theta_2 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ - 总变换:$T_2^0 = A_1 A_2$,末端位置为: $$ p_x = 0.5 \cos\theta_1 + 0.3 \cos(\theta_1 + \theta_2), \quad p_y = 0.5 \sin\theta_1 + 0.3 \sin(\theta_1 + \theta_2) $$ #### **实际应用注意事项** - **参数校准**:DH参数需通过测量或标定获得,误差会影响精度[^1]。 - **数值实现**:在代码中(如Python或Matlab),使用矩阵库计算$T_6^0$。例如: ```python import numpy as np def dh_matrix(theta, alpha, a, d): return np.array([ [np.cos(theta), -np.sin(theta)*np.cos(alpha), np.sin(theta)*np.sin(alpha), a*np.cos(theta)], [np.sin(theta), np.cos(theta)*np.cos(alpha), -np.cos(theta)*np.sin(alpha), a*np.sin(theta)], [0, np.sin(alpha), np.cos(alpha), d], [0, 0, 0, 1] ]) # 示例:六自由度,参数需具体定义 T_total = np.eye(4) for i in range(6): A_i = dh_matrix(theta_i, alpha_i, a_i, d_i) # 替换为实际值 T_total = T_total @ A_i ``` - **挑战**:对于复杂构型,需处理奇异性和参数一致性(如Modified DH参数变体)。正向运动学是逆运动学和轨迹规划的基础[^1]。 通过以上步骤,您可以系统建立六自由度机械臂的正向运动学方程。实际中,建议结合机器人规格(如UR5或KUKA KR6的DH参数)进行验证。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuuyann

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值