Difference between revisions of "Inverse Dynamic Model/zh-hans"
(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | {{Languages}} | + | {{Languages|Inverse_Dynamic_Model}} |
<div id="BackToTop" class="noprint" style="background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;"> | <div id="BackToTop" class="noprint" style="background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;"> | ||
<span style="color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; "> | <span style="color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; "> | ||
Line 24: | Line 24: | ||
− | [[file:DM_1.png|center|650px|frame|<center><big>'' | + | [[file:DM_1.png|center|650px|frame|<center><big>''图 1 - Taddcmd的控制系统和前馈部分的示意图''</big></center>]] |
=力矩单位= | =力矩单位= | ||
Line 81: | Line 81: | ||
|} | |} | ||
− | == | + | ==softMC转矩相关属性== |
− | + | softMC具有以下转矩相关的属性: | |
− | * '''''<axis>''.TorqueThreshold''' - | + | * '''''<axis>''.TorqueThreshold''' - 轴转矩阈值,用于定义'''TADDCOMMAND'''值的限制。如果超过此值,softMC引发一个错误。可以将此值设置为用户所需的某个值,或设置为与驱动器MICONT或MIPEAK匹配的值。 <br> |
− | + | 例如,将TorqueThreshold设置为与'''MICONT'''匹配的值: <br> | |
<center> <math> <axis>.TorqueThreshold = \frac{1000}{TFac}\ </math> </center> | <center> <math> <axis>.TorqueThreshold = \frac{1000}{TFac}\ </math> </center> | ||
− | + | 将TorqueThreshold设置为与'''MIPEAK'''匹配的值: | |
<center> <math> TorqueThreshold=\frac{1000*MIPEAK}{TFac*MICONT}\ </math> </center> | <center> <math> TorqueThreshold=\frac{1000*MIPEAK}{TFac*MICONT}\ </math> </center> | ||
− | * '''''<axis>''.AdditiveTorqueDelay''' - | + | * '''''<axis>''.AdditiveTorqueDelay''' - 计算出的附加转矩指令基于''pcmd'' 和''vcmd''。由于命令与轴的实际位置和速度之间存在延迟,所以相同的延迟应该被提供给附加转矩。'''AdditiveTorqueDelay'''用于此目的。该属性以循环时间为单位,它接受正整数值。'''AdditiveTorqueDelay'''工作如下:计算出的一定时间的附加转矩指令后只发送'''AdditiveTorqueDelay'''给驱动器。此属性的默认值是3。 |
− | == | + | ==如何包含传动比== |
− | + | 通常,电机通过齿轮系统连接到关节。齿轮系统会影响电机所承受的扭矩负载,因此扭矩系数应该得到适当的补偿。经过补偿后,TorqueFactor参数将电流实际值参数从电机内部的电流([mMICONT]单位)转换为关节所承受的扭矩(单位[Nm])。 | |
<center> <math> TFac = \frac{1000000}{MKT*MICONT*GR}\ </math></center> | <center> <math> TFac = \frac{1000000}{MKT*MICONT*GR}\ </math></center> | ||
− | + | 这里GR代表传动比。 图3显示了一个传动比的例子。 | |
− | [[file:DM 2.png|80px|frame|left|<big><center> '' | + | [[file:DM 2.png|80px|frame|left|<big><center> ''图 2 - 在MC-Basic中为EtherCAT驱动器设置所有轴的扭矩系数(TFac)属性''</center></big>]] |
− | [[file:DM 3.png|150px|frame|left|<big><center> '' | + | [[file:DM 3.png|150px|frame|left|<big><center> ''图3 - 齿轮比为1:2的齿轮机构的示例''</center></big>]] |
− | == | + | ==线性轴== |
− | + | 以上所有都是指旋转轴。线性轴和旋转轴相比,是力而不是转矩。这些力以牛顿[N]为单位进行测量。因此,在处理线性轴时应进行一些修改。基本上有两种类型的直线轴 - 带有丝杠/滑轮/其他的旋转电机和直线电机。 | |
− | === | + | ===带有丝杠/滑轮的旋转电机或用于将旋转运动转换为直线运动的不同类型的机构=== |
− | + | 这种类型的处理与常规旋转轴一样进行单一修改。用于将旋转运动转换为线性运动的机制将由电机承载的扭矩负载转换为线性轴上的力负载。因此,TorqueFactor应该乘以另一个因子。此参数应包含旋转电机每转一圈(经过齿轮后)的直线运动量。对于丝杆,它将是丝杆导程[毫米/转]。对于一个滑轮,它将是滑轮的半径乘以2π[mm / rev]。TorqueFactor为:<br> | |
<center> <math> TFac = \frac{1000000*SL}{MKT*MICONT*GR} </math></center> | <center> <math> TFac = \frac{1000000*SL}{MKT*MICONT*GR} </math></center> | ||
− | + | '''SL'''代表丝杆导程或等效参数。 图4为一个丝杆导程的例子。<br> | |
− | [[file: DM_4.png|center|300px|frame|<big><center>'' | + | [[file: DM_4.png|center|300px|frame|<big><center>''图 4 - 丝杆 (顶部)和丝杆(底部)例子'' </center></big>]] |
− | === | + | ===直线电机=== |
− | + | 这种类型与普通旋转轴的处理方式相同,但用 '''MKT''' 替换'''MKF'''属性,单位为[N/A],没有减速比, 因此TorqueFactor为: <br> | |
<center> <math> TFac = \frac{1000000}{MKF*MICONT}\ </math></center> | <center> <math> TFac = \frac{1000000}{MKF*MICONT}\ </math></center> | ||
− | === | + | ===操作模式和PDO=== |
− | + | 驱动器在使用动力学模型时的操作模式应该是'''周期同步位置模式'''。 动力学模型用于计算每台电机所需的转矩(或电流),但结果从来都不精确。 附加转矩指令仅用作第3节所述的前馈信号。 <br> | |
− | + | 以下是使用动力学模型所必需的其他PDO(‘周期同步位置模式’PDO之外)的列表。: <br> | |
{| class = "wikitable" style="text-align: center" | {| class = "wikitable" style="text-align: center" | ||
− | !PDO | + | !PDO 索引 |
− | ! | + | !描述 |
|- | |- | ||
|RX: 0x60B2 | |RX: 0x60B2 | ||
− | | | + | |转矩偏置 –附加转矩信号 |
|- | |- | ||
|TX 0x6078 | |TX 0x6078 | ||
− | | | + | |实际电流值 – 转矩反馈信号 |
|} | |} | ||
− | = | + | =如何进行动力学模型参数识别= |
− | == | + | ==数据采集== |
− | + | 识别过程是通过移动机器人来记录运动参数和内部电机转矩。然后,根据机器人模型和测量结果,使用记录的数据来提取动力学模型参数。 | |
− | |||
+ | 高质量的数据对于获得良好的识别结果非常重要。高质量数据包含以不同速度和加速度分布在机器人运动空间的数据点。分散的数据为机器人的各种运动提供更好的参数拟合,从而可以高精度地预测附加转矩指令。 | ||
+ | |||
+ | |||
+ | |||
+ | 推荐的移动类型是使用正弦波命令。该命令以指定的幅度和频率移动机器人的每个关节。为了获得良好的离散数据,每个关节的振幅应接近其全部位置范围,每个关节的频率应与其他关节不同。每个关节的频率决定了关节之间运动的相关性。如果两个或多个关节具有相同的频率,则它们总是处于相同的相位,这将导致非离散的数据。此外,如果某个关节的频率是另一个关节的频率的倍数,那么在更快的关节的几个周期(更确切地说,乘法因子)之后将会重复相同的运动。实际上,对于任何合理的频率值,运动将在几个周期后重复。但是,为了获得良好的结果,建议每个关节至少获得三个周期的数据。因此,只要运动在这个记录时间内不重复,频率就选择好了。 以下是三种关节机器人的一些示例: | ||
− | |||
{| class = "wikitable" |style:align-text="center" | {| class = "wikitable" |style:align-text="center" | ||
Line 152: | Line 155: | ||
!J<sub>2</sub> | !J<sub>2</sub> | ||
!J<sub>3</sub> | !J<sub>3</sub> | ||
− | ! | + | !注释 |
− | ! | + | !质量 |
|- | |- | ||
|1 | |1 | ||
|2 | |2 | ||
|1.2 | |1.2 | ||
− | |j<sub>1</sub> | + | |j<sub>1</sub>和j<sub>2</sub>将在j<sub>1</sub>的1个周期和j<sub>2</sub>的2个周期之后重复 |
|Bad | |Bad | ||
|- | |- | ||
Line 164: | Line 167: | ||
|1.2 | |1.2 | ||
|1.2 | |1.2 | ||
− | |j<sub>2</sub> | + | |j<sub>2</sub>和j<sub>3</sub>将在j<sub>2</sub>的3个周期和j<sub>3</sub>的2个周期之后重复 |
|Medium | |Medium | ||
|- | |- | ||
Line 170: | Line 173: | ||
|1.3 | |1.3 | ||
|1.5 | |1.5 | ||
− | |j<sub>1</sub>, j<sub>2</sub> | + | |j<sub>1</sub>,j<sub>2</sub>和j<sub>3</sub> 将在j<sub>1</sub>的11个周期,j<sub>2</sub>的13个周期和j<sub>3</sub>的15个周期之后重复 |
|Good | |Good | ||
Line 176: | Line 179: | ||
− | + | 第一个例子不是一个好的频率选择,第二个例子是好的,最后一个例子是很好的参数选择。 显示这些正弦波组合的图表如图5所示。 <br> | |
− | + | 最后,关节的速度也很重要。运动过程中的峰值速度应该接近每个关节的最大速度。在高速度下,动力学模型的加速度和速度对象是显着的,从而允许更准确的识别过程。关节的峰值速度可以通过运动的幅度和频率来调节。首先定义每个关节的振幅,然后设置一些任意的频率,例如{1.1,1.3,1.5},然后用一个标量因子乘以频率矢量:factor * {1.1,1.3,1.5}。'''通过改变因子,可以控制关节的速度。''' | |
− | |||
− | + | [[file: DM_5.png|700px|center|frame|<center><big>''图 5 – 在每个图中正弦波的不同频率组合的图表对应于表2,正弦波开始重复的位置(如表2中所述)用橙色圆圈指出(最后的图没有重复)''</big></center>]] | |
− | + | ==识别任务的示例== | |
+ | 图6显示了识别过程的示意图。 <br> | ||
− | + | ||
+ | 执行识别过程的程序示例,该程序用于delta机器人: | ||
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
1. program | 1. program | ||
Line 237: | Line 241: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 这里是对示例程序的解释: <br> | |
{|class="wikitable" | {|class="wikitable" | ||
− | ! | + | !行号 |
− | ! | + | !描述 |
|- | |- | ||
|6 | |6 | ||
− | | | + | |定义系统每个关节的起始位置 |
|- | |- | ||
|7 | |7 | ||
− | | | + | |定义结束位置 |
|- | |- | ||
|8 | |8 | ||
− | | | + | |定义每个关节的正弦波的频率(注意频率乘以因子0.3)。总的来说,这些是关节在某一时刻的位置:<br> |
{{{!}} class = "wikitable" | {{{!}} class = "wikitable" | ||
− | ! | + | !关节 |
− | ! | + | !在某时刻的位置 <sub>[deg]</sub> |
{{!}}- | {{!}}- | ||
{{!}}J<sub>1</sub> | {{!}}J<sub>1</sub> | ||
Line 269: | Line 273: | ||
|- | |- | ||
|15 | |15 | ||
− | | | + | |定义适合机器人的动力学模型,这将在稍后讨论。 '''请注意,只有在禁用机器人的情况下,才能修改此参数'''. |
|- | |- | ||
|21 | |21 | ||
− | | | + | |将机器人移动到起始位置 |
|- | |- | ||
|26 | |26 | ||
− | | | + | |开始向目标点正弦波运动 |
|- | |- | ||
|29 | |29 | ||
− | | | + | |用IdentificationStart命令开始记录数据。在这行上,还可以设置一个将截止频率设置为IdentFilterFreq收集数据(通过pfb和tfb)的低通滤波器。截止频率必须大于最大正弦波频率。可以尝试多个截止频率,并在原始数据和滤波数据之间进行比较,然后选择过滤大部分噪声而不改变实际数据的数据。请查看识别wiki页面,以获取有关可以为IdentificationStart命令设置的参数的更多信息。 |
|- | |- | ||
|31 | |31 | ||
− | | | + | |设置休眠时间 – 记录时间 |
|- | |- | ||
|32 | |32 | ||
− | | | + | |停止记录并应用动力学模型参数识别 |
|} | |} | ||
Line 290: | Line 294: | ||
− | [[file: DM_6.png|600px|thumb|<center><big>'' | + | [[file: DM_6.png|600px|thumb|<center><big>''图6 - 识别过程的示意图''</big></center>]] |
− | + | 在此任务结束时,将在MC文件夹中创建一个名为IDNT<group num>.PRG和IDNT<group num>.REC的文件。<br> | |
− | + | PRG文件包含识别的参数,REC文件包含用于识别的记录数据。 <br> | |
− | + | 以下小节介绍如何将识别应用于不同的机器人模型。 | |
− | == | + | ==不同机器人模型的识别过程== |
− | === | + | ===单轴模型=== |
− | + | 有两种类型的单轴关节,直线和旋转。这些类型中的每一个都有几个不同的动力学模型,可以在动力学模型wiki页面(和第5.4节)中查看。 简而言之,这些是不同的模型: | |
− | ==== | + | ====直线轴==== |
− | + | 直线轴类型有2个动力学模型类型:<br> | |
− | # | + | # 水平轴 |
− | # | + | # 倾斜轴 – 相对于垂直轴线具有角度α的轴,范围在0和90度之间(图7)。当α= 0时,轴是垂直的,当α= 90时,轴是水平的(α参数是通过识别找到的(即,它不是用户输入)。 [[file: DM_8.png|200px|right|thumb|<center><big>''图7 - 倾斜的线性轴''</big></center>]] |
− | ==== | + | ====旋转轴==== |
− | + | 旋转轴类型有3种动力学模型: <br> | |
− | # | + | # 简单的旋转轴 - 其质心位于旋转轴上。 |
− | # | + | # 水平曲柄臂轴(图8左)。 |
− | # | + | # 垂直曲柄臂轴(图8右)。 |
− | [[file:DM_9.png|400px|thumb|right|<center><big>'' | + | [[file:DM_9.png|400px|thumb|right|<center><big>''图8 - (左)水平曲柄臂轴,(右)垂直曲柄臂轴''</big></center>]] |
− | + | 适用于上述所有类型的识别任务示例: | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
1. program | 1. program | ||
Line 363: | Line 367: | ||
− | + | 要重复使用此代码,请记住使用适合于应用程序的频率和振幅值,并使用合适的动力学模型类型。 | |
− | === | + | ===SCARA机器人=== |
− | + | SARA机器人有两个运动学模型,一个有三个轴(XYZ),另一个有四个轴(XYZR)。<br> | |
− | + | 但是,只有一种适合这两种运动学模型的动力学模型。 | |
− | + | 用于3轴SCARA的识别任务示例: | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 417: | Line 421: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 用于4轴SCARA的识别任务示例: | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 467: | Line 471: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。 <br> | |
− | + | 一些SCARA机器人具有耦合关节,通常是第三和第四关节。目前,SCARA机器人的动力学模型没有考虑耦合。因此,耦合关节可能会有很大的误差。 | |
− | === | + | ===DELTA机器人=== |
− | + | Delta机器人有两个运动学模型,一个有三个轴(XYZ),另一个有四个轴(XYZR)。<br> | |
− | + | 但是,只有一种适合这两种运动学模型的动态模型。 | |
− | + | 用于3轴Delta的识别任务示例: | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
1. program | 1. program | ||
Line 525: | Line 529: | ||
− | + | 适用于4轴Delta的识别任务示例: | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 576: | Line 580: | ||
− | + | 要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。 | |
− | === | + | ===PUMA机器人=== |
− | + | PUMA机器人只有一个运动学模型,但它有两个不同的动力学模型。 <br> | |
− | + | 第一个动力学模型是像其他机器人一样的常规模型。<br> | |
− | + | 第二个模型是一个半静态模型,这意味着它只适用于慢动作和静态位置。该模型仅考虑重力和摩擦力/扭矩。 | |
− | ==== | + | |
− | + | ====完整常规模式==== | |
− | + | 该模型识别规则和之前的模型一样。 <br> | |
+ | PUMA工作的识别任务示例: | ||
<syntaxhighlight lang='Vb'> | <syntaxhighlight lang='Vb'> | ||
1. program | 1. program | ||
Line 633: | Line 638: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。 | |
− | ==== | + | ====半静态模型==== |
− | + | 到目前为止,半静态模型识别与所有的例子都有一点不同。 这个模型只考虑重力和摩擦力,换句话说它忽略了动力。 因此,测量应该包括可以忽略不计的动态力,这可以通过缓慢运动来实现。<br> | |
− | + | 这个识别过程比通常的识别过程更长,大约需要2-3分钟。另外,建议执行少于3个周期,1个周期就足够了。.<br> | |
− | + | 另外,类似于前面的例子,半静态模型阈值数据点的速度。但是与前面的例子不同,这里有两个阈值,一个用于避免非常低的速度,避免数字误差),另一个用于避免高速度(避免显着的动态力)。 这种识别过程的例子: | |
− | |||
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
1. program | 1. program | ||
Line 690: | Line 694: | ||
− | + | 请注意造成慢速运动的重要低频。 | |
− | [[file:DM_17.png|1100px|center|thumb|<center><big>'' | + | [[file:DM_17.png|1100px|center|thumb|<center><big>''图9 - 识别过程中puma机器人的运动路径示例'' </big></center>]] |
− | == | + | ==动力学模型参数== |
− | + | 本节列出了每种类型的动力学模型的动力学参数。 | |
− | === | + | ===旋转轴=== |
− | ==== | + | ====动力学模型1 - 简单的旋转轴==== |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
|<math>I</math> | |<math>I</math> | ||
− | | | + | |运动部件的旋转轴周围的总转动惯量 |
|} | |} | ||
− | ; | + | ;模型方程 |
: <math>T = (I + I_{payload}) \cdot acc</math> | : <math>T = (I + I_{payload}) \cdot acc</math> | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | ==== | + | ====动力学模型2 - 水平曲柄臂轴 ==== |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
!Comments | !Comments | ||
|- | |- | ||
|1 | |1 | ||
|<math>I</math> | |<math>I</math> | ||
− | | | + | |运动部件的旋转轴周围的总转动惯量 |
|- | |- | ||
|2 | |2 | ||
|<math>L^2</math> | |<math>L^2</math> | ||
− | | | + | |曲柄臂的长度的平方(轴到有效载荷) |
|} | |} | ||
− | ; | + | ;模型方程 |
: <math>T = (I + I_{payload} + L^2 \cdot M_{payload}) \cdot acc</math> | : <math>T = (I + I_{payload} + L^2 \cdot M_{payload}) \cdot acc</math> | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | ==== | + | ==== 动力学模型3 - 垂直曲柄臂轴 ==== |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
|<math>I</math> | |<math>I</math> | ||
− | | | + | |运动部件的旋转轴周围的总转动惯量 |
|- | |- | ||
|2 | |2 | ||
|<math>L^2</math> | |<math>L^2</math> | ||
− | | | + | |曲柄臂的长度的平方(轴到有效载荷) |
|- | |- | ||
|3 | |3 | ||
|<math>M \cdot g \cdot A</math> | |<math>M \cdot g \cdot A</math> | ||
− | | | + | |质量(无有效载荷)* 重力加速度* 到质心的距离 |
|- | |- | ||
|4 | |4 | ||
|<math>g \cdot L</math> | |<math>g \cdot L</math> | ||
− | | | + | |重力加速度 * 到有效负载的距离 |
|} | |} | ||
− | ; | + | ;模型方程 |
: <math>T = (I + I_{payload} + L^2 \cdot M_{payload}) \cdot acc - (M \cdot g \cdot A + M_{payload} \cdot g \cdot L) \cdot \sin(pos)</math> | : <math>T = (I + I_{payload} + L^2 \cdot M_{payload}) \cdot acc - (M \cdot g \cdot A + M_{payload} \cdot g \cdot L) \cdot \sin(pos)</math> | ||
− | === | + | ===线性轴=== |
− | ==== | + | ==== 动力学模型1 - 水平轴==== |
− | [[File:Axystems;Motion Dynamics - Horizontal Axis.png|'' | + | [[File:Axystems;Motion Dynamics - Horizontal Axis.png|''图10 - 水平线性轴''|thumb]] |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
|<math>M</math> | |<math>M</math> | ||
− | | | + | |运动部分的总质量。 |
|} | |} | ||
− | ; | + | ;模型方程 |
: <math>T = (M + M_{payload}) \cdot acc</math> | : <math>T = (M + M_{payload}) \cdot acc</math> | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | ==== | + | ==== 动力学模型2 - 垂直或倾斜的轴 ==== |
− | [[File:Axystems;Motion Dynamics - Vertical Axis.png|'' | + | [[File:Axystems;Motion Dynamics - Vertical Axis.png|''图11 - 垂直线性轴''|thumb]] |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
|<math>M</math> | |<math>M</math> | ||
− | | | + | |运动部分的总质量. |
|- | |- | ||
|2 | |2 | ||
|<math>M \cdot g \cdot \cos(\alpha)</math> | |<math>M \cdot g \cdot \cos(\alpha)</math> | ||
− | | | + | |由重力产生的恒力 |
|- | |- | ||
|3 | |3 | ||
|<math>g \cdot \cos(\alpha)</math> | |<math>g \cdot \cos(\alpha)</math> | ||
− | | | + | |用于考虑有效载荷质量的重力系数。('''g = 9.80665''') |
|} | |} | ||
− | ; | + | ;模型方程 |
: <math>T = (M + M_{payload}) \cdot acc + M \cdot g \cdot \cos(\alpha) + M_{payload} \cdot g \cdot \cos(\alpha)</math> | : <math>T = (M + M_{payload}) \cdot acc + M \cdot g \cdot \cos(\alpha) + M_{payload} \cdot g \cdot \cos(\alpha)</math> | ||
− | ===SCARA | + | ===SCARA 机器人=== |
− | ==== | + | ====动力学模型1 ==== |
− | [[File:scara.PNG|'' | + | [[File:scara.PNG|''图 12 - scara机器人''|thumb]] |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
Line 827: | Line 831: | ||
|} | |} | ||
− | ===DELTA | + | ===DELTA 机器人=== |
− | ==== | + | ==== 动力学模型1 ==== |
− | [[File:Control;Rod forces model for Delta kinematics - Introduction.png|'' | + | [[File:Control;Rod forces model for Delta kinematics - Introduction.png|''图 13 - Delta 机器人''|thumb]] |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
Line 890: | Line 894: | ||
|} | |} | ||
− | ===PUMA | + | ===PUMA 机器人=== |
− | ==== | + | ==== 动力学模型1 ==== |
− | [[File:puma.PNG|'' | + | [[File:puma.PNG|''图 14 - Puma机器人''|thumb]] |
Description: | Description: | ||
− | :* <math> g </math> - | + | :* <math> g </math> - 重力常数 |
− | :* <math> m_{i} </math> - | + | :* <math> m_{i} </math> - 第 i<sup>th</sup>个连杆的质量 |
− | :* <math> a_{i} </math> - | + | :* <math> a_{i} </math> - 第i<sup>th</sup>和第i<sup>th+1</sup>关节之间的公共法线的长度 |
− | :* <math> d_{i} </math> - | + | :* <math> d_{i} </math> - 在第i<sup>th</sup>个和第i<sup>th+1</sup>个关节之间沿z轴偏移 |
− | :* <math> l_{i} </math> - | + | :* <math> l_{i} </math> - 从第i<sup>th</sup>个关节到第i<sup>th+1</sup> 个关节质量中心的距离 |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
Line 999: | Line 1,003: | ||
|} | |} | ||
− | ==== | + | ==== 动力学模型2 - 重力 ==== |
{|border="1" width="80%" | {|border="1" width="80%" | ||
− | !width="100"| | + | !width="100"|序号 |
− | !width="250"| | + | !width="250"|参数 |
− | ! | + | !注释 |
|- | |- | ||
|1 | |1 | ||
Line 1,024: | Line 1,028: | ||
|} | |} | ||
− | == | + | ==带有有效载荷的参数识别== |
− | + | IdentificationStart命令有一个名为‘IdentPayload’的布尔参数。如果此参数设置为false,则会定期执行识别过程。如果此参数设置为true,则识别过程仅识别有效载荷质量或惯性。<br> | |
+ | 为了识别有效载荷,必须遵循这些步骤: | ||
+ | # 执行识别过程没有有效载荷。 | ||
+ | # 设置动力学模型参数(通过运行identification PRG文件)。 | ||
+ | # 将‘IdentPayload’设置为true,并对有效负载执行识别过程。 | ||
− | + | {{Note| 在对有效载荷执行识别过程并将“IdentPayload”设置为true之后,identification PRG文件将包含步骤1中的动态模型参数以及步骤3中的有效载荷参数。}} | |
− | |||
− | |||
− | |||
− | |||
+ | {{Note| 该程序适用于所有动态模型除PUMA机器人的动力学模型1外}} | ||
− | + | =识别输出文件的说明= | |
− | + | 识别输出PRG文件的示例。该文件在识别过程结束时生成,命名为:IDNT <group num> .PRG: <br> | |
− | = | ||
− | |||
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 1,086: | Line 1,089: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 1-7行提供了有关识别过程的信息。第1行报告识别是否成功。 | |
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 1,095: | Line 1,098: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 第2行报告识别的日期和时间.<br> | |
− | + | 第3行报告记录的最大相对扭矩误差。扭矩误差作为TorqueAdditiveCommand(Taddcmd)减去测量的TorqueFeedback。这个计算的Taddcmd被当作Taddcmd,这个Taddcmd可以用已经确定的动力学参数进行计算,就好像这个运动已经完成了一样。 换句话说,误差是真实数据和拟合模型之间的差异。 相对转矩误差的计算方法是转矩误差除以最大测量转矩反馈(每个关节及其最大转矩反馈值)。 最大相对转矩误差是每个关节相对值的最大值。最大相对转矩误差的公式是:<br> | |
Line 1,102: | Line 1,105: | ||
<center> <math> max relative torque error =max(\frac{TaddCMD-Tfb}{max(Tfb)}\ </math></center> | <center> <math> max relative torque error =max(\frac{TaddCMD-Tfb}{max(Tfb)}\ </math></center> | ||
− | + | 如果其中一个关节的这个值大于50%,则认定为失败。 | |
Line 1,113: | Line 1,116: | ||
− | + | 第4行报告平均相对转矩误差,所有记录时间的相对转矩误差平均值被记录并显示在每个关节上。<br> | |
− | + | 第5行报告用于低通滤波器的截止频率。<br> | |
− | + | 第6行报告记录了多少个数据点。 | |
Line 1,125: | Line 1,128: | ||
− | + | 第7行报告每个关节有多少数据点用于模型拟合。 如果这些点中的关节速度低于某个阈值(每个关节的阈值也在该行中报告),则丢弃一些数据点。这是因为低速数据点导致模型拟合的数值误差。 因此,上面解释的所有相对误差只是针对模型拟合所考虑的那些点来计算的。 | |
Line 1,139: | Line 1,142: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 第10-15行(为此文件)设置拟合的动力学模型参数。 | |
Line 1,159: | Line 1,162: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 第16-27行(用于此文件)设置拟合的摩擦参数。 | |
− | |||
<syntaxhighlight lang='VB'> | <syntaxhighlight lang='VB'> | ||
Line 1,168: | Line 1,170: | ||
− | + | 第29行(为此文件)设置用于此识别过程的动力学模型。 | |
+ | |||
+ | |||
+ | ==成功条件== | ||
+ | 成功的条件是基于相对扭矩误差。每个轴应具有低于50%的最大相对扭矩误差值,以便将识别视为成功。 | ||
− | + | 扭矩误差作为TorqueAdditiveCommand(Taddcmd)减去测量的TorqueFeedback。 这个计算的Taddcmd被当作Taddcmd,这个Taddcmd可以用已经确定的动力学参数进行计算,就好像这个运动已经完成了一样。 换句话说,误差是真实数据和拟合模型之间的差异。 | |
− | |||
− | + | 相对转矩误差的计算方法是转矩误差除以最大测量转矩反馈(每个关节及其最大转矩反馈值)。 最大相对转矩误差是每个关节相对值的最大值。 如果其中一个关节的这个值大于50%,则认定为失败。 第4行报告平均相对转矩误差,所有记录时间的相对转矩误差平均值被记录并显示在每个关节上。 请注意,相对扭矩误差仅针对处于最小速度限制的点进行评估。 | |
− | |||
+ | 不同关节之间的最大相对扭矩误差可能会有所不同。通常,小型关节(小型电机)具有较大的相对误差。这是因为这些电机所施加的转矩很小,测量中的噪音与所施加的转矩处于相同的数量级。 | ||
− | |||
− | ''' | + | '''例如:''' 我们假设对于某个点j1.TorqueFeedback = 80和j1.TorqueAdditiveCommand = 100.对于这一点,j1.TorqueError = 20.假设在记录过程中最大j1.TorqueFeedback是160,那么对于这一点相对转矩误差将是:j1.TorqueError/max(j1.TorqueFeedback) = 20/160 = 0.125 = 12.5% |
− | |||
− | |||
+ | ==参数== | ||
+ | 支持的机器人模型的动力学模型至少有一种动力学模型。 这些模型可以在wiki 页面中 Dynamic Models找到。 每个模型都基于一些由机器人不同部分的质量,长度和惯性组成的参数。 这些是借助识别过程正在评估的参数。 参数保存为robot.DynamicParameter [i],其中robot是机器人名称,i是Dynamic Models页面中所述参数的编号。 每个模型可能有不同数量的参数。 | ||
− | |||
+ | 在动力学参数后,出现粘性摩擦和库仑摩擦参数:轴。摩擦摩擦,轴线。库仑摩擦。 机器人的每个关节都有这两个参数来定义它的摩擦系数。 | ||
− | |||
+ | 除了这些参数之外,用户还应该考虑设置附加转矩指令的最大允许值。 这可以通过属性TorqueThreshold来设置,例如, a1.TorqueThreshold = 200.如果Taddcmd超过此值,则会给softMC报告错误。 | ||
− | |||
− | |||
− | |||
− | |||
− | = | + | ==在设置中包含标识输出文件== |
− | + | 为了使动力学模型生效,只需在禁用机器人(en = 0)时运行IDNT<group num>.PRG文件。 请注意,这应该在机器人设置之后。 为了在系统初始化和机器人设置期间自动加载动态模型配置,只需添加该行:<br> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Load IDNT<group num>.PRG到机器人设置'''后''的AUTOEXEC.PRG或START PRG.PRG文件的末尾。 | ||
− | + | =识别过程记录文件的说明= | |
+ | 在识别过程结束时生成的另一个文件是数据记录文件。文件名称为: IDNT<group num>.REC。该文件包含识别过程使用的所有相关数据。以下是为每个关节显示的参数:<br> | ||
+ | |||
+ | * tfbRaw – TorqueFeedback(tfb)属性的原始记录数据。 | ||
+ | * pfbRaw – PositionFeedback(pfb)属性的原始记录数据。 | ||
+ | * tfb – 经过滤波的TorqueFeedback(tfb)属性的记录数据。 | ||
+ | * pfb – 经过滤波的PositionFeedback(pfb)属性的记录数据。 | ||
+ | * vfb – 经过滤波的VelocityFeedback (vfb)属性的记录数据。 | ||
+ | * afb – 经过滤波的AccelerationFeedback (afb)属性的记录数据。 | ||
+ | * tcmd –拟合模型生成的扭矩指令。识别的动力学参数和收集的数据用于计算此属性。 在常规模式下,这个属性实际上是TorqueAdditiveCommand(Taddcmd)。 | ||
+ | * te – TorqueError(te)由tcmd和tfb数据的差值计算得出。 | ||
+ | |||
+ | 该文件可用于更好的调试和故障排除,以及更好地理解识别过程。在图15中,您可以找到识别输出REC文件的示例: | ||
[[file: DM_19.png|1000px|thumb|center|<center><big>''Figure 15 - An example of an identification output REC file of a semi-static PUMA model''</big></center>]] | [[file: DM_19.png|1000px|thumb|center|<center><big>''Figure 15 - An example of an identification output REC file of a semi-static PUMA model''</big></center>]] | ||
− | = | + | =跟踪改进的示例(整定,位置误差)= |
− | == | + | ==SCARA机器人== |
− | + | 有和没有动力学参数的4轴scara机器人的实验。机器人以900[mm/s]的线速度运动600[mm],在这个运动中记录机器人的笛卡尔速度和ISSETTLED属性(图16和17,ISSETTLED属性缩放3000倍)。<br> | |
− | |||
− | |||
− | |||
− | + | ISSETTLED属性指示实际运动元素位置是否在指定的整定范围内。整定范围由PESETTLE属性定义,并由TIMESETTLE属性进一步限定。当运动分析器完成后,位置误差(目标位置 - 实际位置)的绝对值将与PESETTLE属性进行比较。当结果小于或等于此属性的TIMESETTLE给定的时间时,ISSETTLED标志被设置。对于这个例子,PESETTLE被认为是0.001。因此,可以预期较短的整定时间表示较好的性能。<br> | |
+ | 图16和17显示了来自实验的记录数据。结果表明,无运力学模型的运动的整定时间为300 ms,有动力学模型的整定时间为260 ms〜原整定时间的86.7%。<br> | ||
− | [[file: | + | [[file:DM_20.png|850px|thumb|center|<center><big>''图 15 - SCARA机器人整定时间的一个例子。该图是针对没有动力学模型的情况,整定时间为300 [ms]''</big></center>]] |
− | |||
− | |||
+ | [[file:DM_21.png|850px|thumb|center|<center><big>''图 16 - Delta机器人整定时间改进的一个例子。该图是针对动力学模型的情况,整定时间减少到260 [ms]''</big></center>]] | ||
− | + | ==DELTA 机器人== | |
+ | 有和没有动力学参数的3轴Delta机器人的实验。机器人以3000[mm/s]的线速度运动550[mm],在这个运动中记录机器人的笛卡尔速度和ISSETTLED属性(图17和18,ISSETTLED属性缩放3000倍)。<br> | ||
+ | ISSETTLED属性指示实际元素位置是否在指定的整定范围内。整定范围由PESETTLE属性定义,并由TIMESETTLE属性进一步限定。当运动分析器完成后,位置误差(目标位置 - 实际位置)的绝对值将与PESETTLE属性进行比较。当结果小于或等于此属性的TIMESETTLE给定的时间时,ISSETTLED标志被设置。对于这个例子,PESETTLE被设置为0.05。<br> | ||
− | |||
+ | 因此,可以预期较短的建立时间表示较好的性能。<br> | ||
− | |||
+ | 图17和18显示了来自实验的记录数据。结果表明,无动力学模型的这种运动的整定时间为268ms,动力学模型的整定时间44ms〜为原始建立时间的16.5%。 | ||
− | |||
− | [[file: | + | [[file:DM_22.png|850px|thumb|center|<center><big>''图 17 - Delta机器人整定时间改进的一个例子。该图是针对没有动力学模型的情况,整定时间为268 [ms]''</big></center>]] |
− | |||
− | |||
− | |||
− | [[file: | + | [[file:DM_23.png|850px|thumb|center|<center><big>''图 18 - Delta机器人整定时间改进的一个例子。 该图是针对有动力学模型的情况,整定时间减少到44 [ms]''</big></center>]] |
− | = | + | ==PUMA 机器人== |
− | + | 有和没有动力学模型的实验。3轴以SineWave命令运动,而2轴停留在0。 | |
+ | 图19显示了(顶部)和无(底部)动力学模型情况下的2轴位置误差。有和无动力学模型的峰峰值幅度分别为〜0.6e-3和〜1e-3。这意味着在这个例子中,使用动力学模型减少了约40%的误差。 | ||
− | + | [[file:DM_24.png|850px|thumb|center|<center><big>''图 19 - PUMA机器人跟踪改进的一个例子。顶部案例动力学模型峰峰幅度为0.627e - 3,底部案例无动力学模型峰峰幅度1.04e - 3''</big></center>]] | |
+ | =碰撞检测= | ||
+ | 动力学模型允许启用更精细的碰撞检测功能。 如果没有动力学模型,softMC可以通过机器人或关节的位置误差的阈值来检测碰撞。 然而,当使用机器人的动力学模型时,可以通过对转矩误差的阈值进行检测碰撞。扭矩误差比位置误差反应更快,因此可以实现更精细的碰撞检测。<br> | ||
− | + | ||
+ | 为了激活特定关节的转矩误差的阈值,将TorqueErrorEnable(Teen)属性设置为1,例如, a1.Teen = 1。要设置的另一个属性是TorqueErrorMax(Temax),例如, a1.Temax = 10。这个属性设置了在softMC之上的最大允许转矩误差,如果超过该转矩误差,则报告一个错误。 请注意,Temax属性可能会在不同的关节之间有所不同,通常关节的电机越大,用户应该允许的更大的Temax。 还要注意,随着动力学模型识别结果变得更加准确,Temax可以随着扭矩误差变小而减小。<br> | ||
+ | |||
+ | |||
+ | 最后一个要考虑的属性是TorqueErrorFilter属性。 如果扭矩反馈有噪声,则会由于噪声导致错误的碰撞检测的而超过Temax值。过滤这些噪音有助于实现更好的碰撞检测程序。 此属性设置的值范围在0.0到1.0之间。 滤波器是一个非常简单的平均滤波器,它的执行过程如下:<br> | ||
<center><math>TE=TEF*TE_{current} +(1-TEF)*TE_{previous}</math></center> | <center><math>TE=TEF*TE_{current} +(1-TEF)*TE_{previous}</math></center> | ||
− | + | TE是TorqueError属性,TEF是TorqueErrorFilter属性。<br> | |
+ | |||
+ | |||
+ | 请注意,通常最大的误差发生在运动的开始,结束或改变方向。 因此,在这些情况下,误差的大小决定了Temax值的大小。 尽管如此,这些案例的特点是速度非常低。 因此,可以编写一个监视扭矩误差和关节速度的应用程序,忽略速度较小的情况,或者可能仅仅为这些情况增加Temax。 因此,碰撞检测功能可能变得非常灵敏。 | ||
+ | |||
+ | |||
+ | =检测识别失败的可能原因= | ||
+ | 本节回顾可能导致不良结果或识别过程失败的一些可能的原因。 下一节讨论如何识别这些原因。 | ||
+ | ==运动太慢== | ||
+ | 如第3节所述,动态识别模型要求机器人关节高速运动。当关节低速运动时,关节内产生的扭矩主要克服与关节摩擦力和重力扭矩,加速度和惯性相对较小。因此,动态模型参数识别性能较差。 此外,识别过程忽略了一定速度下的数据,所以缓慢运动也会导致数据不足。<br> | ||
+ | |||
+ | |||
+ | 也就是说,在这种情况下,输出的PRG识别文件可以报告识别过程是成功的,并且所得到的最大相对误差可以很小。 然而,稍后当试图以比在识别过程中使用的速度更高的速度移动时,附加转矩指令预测将很可能表现不佳。<br> | ||
+ | |||
+ | |||
+ | 图20显示了识别期间运动速度较慢的三轴Delta机器人识别输出REC文件的示例。值得注意的是数据非常嘈杂,其原因是运动速度慢,因此产生的转矩小,相对噪音大 | ||
+ | |||
+ | |||
+ | |||
+ | [[file:DM_25.png|900px|thumb|center|<center><big>''图 20 - 3轴Delta机器人慢速识别输出REC文件的示例''</big></center>]] | ||
+ | |||
+ | |||
+ | 图21显示了相同的Delta机器人和相同运动的扭矩误差。最上面的图是使用从慢速识别过程中检索到的参数的运动的结果,底部图是使用从良好识别过程中检索到的参数的运动的结果。可以看出,对于慢速的识别过程的情况,扭矩误差显着增加。 | ||
+ | [[file:DM_26.png|900px|thumb|center|<center><big>''图21 - 上图 - 使用从慢速识别过程中检索的动力学参数的Delta机器人的三个轴的扭矩误差。 下图 - Delta机器人3轴的转矩误差,使用从良好的识别过程中检索到的动态参数。''</big></center>]] | ||
− | + | ==运动太快== | |
+ | 这个问题不太可能发生,但仍然可能导致较差的结果或识别过程失败。<br> | ||
+ | 如果机器人关节达到极限,则电机转矩可达到饱和值。目前的动力学模型没有考虑到饱和度,因此如果发生饱和,将导致较差的识别结果。 | ||
− | = | + | ==运动持续时间太短== |
− | + | 识别是基于在机器人移动过程中记录的收集数据。如果没有足够的数据,则识别可能过度拟合数据,并且将仅针对所收集的数据的区域而准确地进行预测。在这种情况下,识别可能报告为成功,因此用户必须判断所收集的数据是否足够。经验法则是每个关节至少应该完成3个周期。 | |
− | |||
− | |||
− | + | ==运动区域太小== | |
+ | 识别是基于在机器人移动过程中记录的收集数据。 如果数据不是分散在机器人的整个工作区域,那么识别可能会过度地拟合数据,并且仅针对所收集的数据的区域来准确地进行预测。<br> | ||
+ | 在这种情况下,识别可能被报告为成功,因此用户必须判断所收集的数据是否足够。 一个经验法则是每个关节都应该达到位置值,与其正负位置极限接近。 | ||
+ | ==TorqueFactor属性未配置好== | ||
+ | 每个机器人的动力学模型是基于MKS单位系统,因此转矩反馈值应该以[Nm]为单位。 如果TorqueFactor特性配置不当,扭矩反馈将不会有合适的值,并且模型方程将会出错。<br> | ||
+ | 在这种情况下,识别过程将表现不佳,所识别的模型参数将不正确。 | ||
− | + | ==错误的DynamicModel属性的类型== | |
+ | 一些运动学模型被分配了多种类型的动力学模型。这些不同的型号是为了处理不同的配置。例如,一个线性轴可以是水平的,垂直的或者倾斜一定的角度,这些配置中的每一个具有不同的动力学模型和不同的DynamicModel属性值。<br> | ||
+ | 如果设置了错误的DynamicModel值,识别过程将表现不佳。 | ||
+ | =如何根据输出文件来评估失败原因= | ||
+ | 本节回顾生成的识别文件和识别过程的一些可能的失败结果。失败的原因可能是识别过程失败,或者识别过程成功,效果不佳。 | ||
− | + | ==识别过程失败== | |
+ | 识别失败是其中一个关节导致最大相对误差大于50%的情况。 以下是可能导致此结果的一些原因:<br> | ||
+ | * 一个或多个关节运动太慢。这可以在第6行和第7行的输出PRG文件中找到。第6行报告为每个关节收集了多少个数据点。 第7行报告有多少点的速度大于速度阈值。 如果一个或多个关节阈值之后的数据点数量明显小于收集点的总数,则意味着该关节运动太慢。<br> | ||
+ | * 一个或多个关节达到饱和。这可以在输出REC文件中识别。打开输出REC文件,只观察标题中关节的以下属性:tfb,tcmd和te。饱和度可以通过观察tfb突然到达峰值,而tdcmd持续稳定。 | ||
+ | * 对于小关节噪音很大。对于某些系统,噪声可能与工作的平均电流的数量级相同。在这种情况下,虽然净转矩误差很小,但相对转矩误差可能非常大。 在这种情况下,即使识别失败(考虑到没有更多问题),仍建议使用输出PRG文件中接收到的动力学的参数结果。为了表明这个问题,请打开输出REC文件,只观察标题中关节的以下属性:tfb,tcmd和te。 然后可以观察是否由于噪声而出现大的误差。 图22显示了工作平均电流的相同数量级的噪声示例,图23显示了相对较小噪声大小的示例 | ||
+ | [[file:DM_27.png|800px|thumb|center|<center><big>''图 22 - 一个噪声幅度相对大的例子。 <br>图例: 黄色 – TFb, 橙色 – TCmd, 蓝绿色 - TE''</big></center>]] | ||
− | |||
− | |||
− | + | [[file:DM_28.png|800px|thumb|center|<center><big>''图 23 - 一个噪声幅度相对小的例子。 <br>图例: 红 – TFb, 橙色 – TCmd, 绿色 – TE''</big></center>]] | |
− | |||
− | |||
− | == | + | ==识别过程成功但实时预测结果不佳== |
− | |||
− | + | 识别过程可以报告成功,但实时执行效果不佳。由于某种原因,该模型能够很好地拟合数据,但是对于正常操作中的其他运动,该模型还不够好。这通常是因为机器人在识别过程中没有覆盖其工作空间的主要部分。以下是可能导致此结果的一些原因:<br> | |
− | + | * 一个或多个关节的振幅不够大,不能覆盖关节的运动范围。 这可以在输出REC文件中查看,或者只是重新检查关节的幅度是否足够大。 | |
− | + | * 识别过程持续时间太短(相对于关节速度)。可以通过查看输出REC文件来识别。 看看每个关节的pfb属性。如果一个或多个关节不能完成至少3个周期,增加识别持续时间(或关节速度)应该有所帮助。 | |
+ | * 所选择的频率是重叠的或不容许的位置足够多样性。可以通过查看输出REC文件来识别。可以查看所有关节的pfb属性。如果两个或多个关节似乎一起振荡,或在少量周期后重叠,或者非常类似地振荡,则尝试更改有问题的关节的频率。 | ||
− | |||
− | |||
− | |||
− | = | + | =测试规格= |
− | + | 本节介绍如何测试动力学模型功能并检查其是否正常工作。测试过程包括记录特定属性,同时执行某种机器人运动。记录的最低要求属性是Tfb,Taddcmd,Te。 测试可以分为两种类型:一种是检查扭矩预测的准确性对于所有类型的运动是合理的; 另一个是检查机器人性能(例如整定时间,振动等)是否随着动力学模型的激活而有所改善。<br> | |
− | |||
− | |||
− | |||
− | + | 测试精度等同于测试转矩误差。为了测试扭矩误差,只需生成一个任务,在运行时产生一些运动变化并记录所需的属性。 或者,如果机器人应用程序任务已知,则可以使用此任务来执行此测试。 只需在记录Tfb,Taddcmd和Te属性的同时运行任务。 然后,观察记录(特别是Te属性),并确定是否达到满意的精度。 | |
− | |||
− | |||
− | |||
− |
Latest revision as of 06:35, 22 January 2018
语言: | English • 中文(简体) |
---|
Contents
简介 - 它是如何工作以及优势
逆动力学模型(IDM)功能用于补偿运动元素的摩擦和动态效应,否则会导致定位误差和次优的定位和跟踪行为。
IDM功能的动机是使用关于运动的额外知识,而不仅仅是位置(即速度和扭矩)来抵消扭矩控制器的命令值,以便使它们反应更快,从而减少最终的定位误差并改善到位行为。
术语逆动力学模型(通常称为“转矩计算控制”)意味着softMC负责运动元素的笛卡尔运动,不仅计算下一个笛卡尔设定点的关节位置,还计算运动所需的关节力矩。 为了能够做到这一点,它需要一个动态模型–即运动元素的质量和惯性的模型。 关节速度和扭矩然后作为附加的扭矩命令数据发送到驱动器(见图1)。
在大多数情况下,用户没有动力学模型的参数。在这种情况下,可以使用softMC识别过程来估算这些参数。 softMC可以通过测量并估算一些常用机器人模型的动力学模型参数。 识别过程如下进行:当机器人被命令执行一定的运动时,记录运动参数和机器人内部马达扭矩。 然后,根据机器人模型和测量结果生成机器人的动力学模型的参数。
力矩单位
MKS单位制将力矩单位定义为[Nm](牛顿*米)。当涉及电机时,电机转矩通常建模为与电流成比例。因此,可以在每个系统中以不同的单位来定义力矩。本节介绍每个系统的力矩单位以及它们如何相互关联。
softMC通过驱动器读取电机的转矩,但不是[Nm]单位。 因此,softMC包含一个名为TorqueFactor(TFac)的轴属性,它将电机的转矩参数分开,以便将其转换为所需的单位。 该操作的结果存储在名为 TorqueFeedback的轴属性中。
CDHD驱动器设置
CDHD驱动器具有以下参数来定义电机的电流特性:
- MICONT – 以安培[A]为单位, 但是以毫安[mA]为单位读取,定义了电机的连续电流。这是长运行周期的最大允许值。
- MIPEAK – 以安培[A]为单位,但是以毫安[mA]为单位来读取,定义了电动机的峰值电流。 这是非常短的运行周期的最大允许值。
- MKT – 对旋转电机, 以[Nm/A]为单位读取, 定义了转矩常数,即电机每安培单位电机输出多少转矩。
- MKF – 对直线电机, 以[N/A]为单位读取, 定义了转矩常数,即电机每安培单位电机输出多少转矩。
- I – 以milli-MICONT [0.001 * MICONT]为单位读取。 它表示电流的实际值。它对应于电机中的电流。
TorqueFeedback属性计算如下:
因此,应该适当地设置TorqueFactor属性,以便将TorqueFeedback值转换为[Nm]:
100万是为了补偿MICONT单位是[mA],当前实际值是以[0.001 * MICONT]为单位。 通过这种方式定义TorqueFactor会将当前实际值转换为[Nm]的单位(并将该值分配给TorqueFeedback)。 在设置Tfac后,所有的扭矩值(Tfb,TCmd,Tmax,TorqueThreshold,Te)将始终以[Nm](线性轴为[N])为单位。 图2给出了在MC-Basic中这个计算的例子。
EtherCAT和CANopen标准(DS402)
EtherCAT标准定义了与上述参数等效的以下参数:
CDHD 参数 | EtherCAT 参数 | EtherCat 索引 |
---|---|---|
MICONT | 电机额定电流 | 0x6075 |
MIPEAK | 电机峰值电流 | 0x2036 |
MKT | 力矩常数 | 0x2039 |
MKF | 直线电机推力常数 | 0x2038 |
I | 实际电流值 | 0x6078 |
softMC转矩相关属性
softMC具有以下转矩相关的属性:
- <axis>.TorqueThreshold - 轴转矩阈值,用于定义TADDCOMMAND值的限制。如果超过此值,softMC引发一个错误。可以将此值设置为用户所需的某个值,或设置为与驱动器MICONT或MIPEAK匹配的值。
例如,将TorqueThreshold设置为与MICONT匹配的值:
将TorqueThreshold设置为与MIPEAK匹配的值:
- <axis>.AdditiveTorqueDelay - 计算出的附加转矩指令基于pcmd 和vcmd。由于命令与轴的实际位置和速度之间存在延迟,所以相同的延迟应该被提供给附加转矩。AdditiveTorqueDelay用于此目的。该属性以循环时间为单位,它接受正整数值。AdditiveTorqueDelay工作如下:计算出的一定时间的附加转矩指令后只发送AdditiveTorqueDelay给驱动器。此属性的默认值是3。
如何包含传动比
通常,电机通过齿轮系统连接到关节。齿轮系统会影响电机所承受的扭矩负载,因此扭矩系数应该得到适当的补偿。经过补偿后,TorqueFactor参数将电流实际值参数从电机内部的电流([mMICONT]单位)转换为关节所承受的扭矩(单位[Nm])。
这里GR代表传动比。 图3显示了一个传动比的例子。
线性轴
以上所有都是指旋转轴。线性轴和旋转轴相比,是力而不是转矩。这些力以牛顿[N]为单位进行测量。因此,在处理线性轴时应进行一些修改。基本上有两种类型的直线轴 - 带有丝杠/滑轮/其他的旋转电机和直线电机。
带有丝杠/滑轮的旋转电机或用于将旋转运动转换为直线运动的不同类型的机构
这种类型的处理与常规旋转轴一样进行单一修改。用于将旋转运动转换为线性运动的机制将由电机承载的扭矩负载转换为线性轴上的力负载。因此,TorqueFactor应该乘以另一个因子。此参数应包含旋转电机每转一圈(经过齿轮后)的直线运动量。对于丝杆,它将是丝杆导程[毫米/转]。对于一个滑轮,它将是滑轮的半径乘以2π[mm / rev]。TorqueFactor为:
SL代表丝杆导程或等效参数。 图4为一个丝杆导程的例子。
直线电机
这种类型与普通旋转轴的处理方式相同,但用 MKT 替换MKF属性,单位为[N/A],没有减速比, 因此TorqueFactor为:
操作模式和PDO
驱动器在使用动力学模型时的操作模式应该是周期同步位置模式。 动力学模型用于计算每台电机所需的转矩(或电流),但结果从来都不精确。 附加转矩指令仅用作第3节所述的前馈信号。
以下是使用动力学模型所必需的其他PDO(‘周期同步位置模式’PDO之外)的列表。:
PDO 索引 | 描述 |
---|---|
RX: 0x60B2 | 转矩偏置 –附加转矩信号 |
TX 0x6078 | 实际电流值 – 转矩反馈信号 |
如何进行动力学模型参数识别
数据采集
识别过程是通过移动机器人来记录运动参数和内部电机转矩。然后,根据机器人模型和测量结果,使用记录的数据来提取动力学模型参数。
高质量的数据对于获得良好的识别结果非常重要。高质量数据包含以不同速度和加速度分布在机器人运动空间的数据点。分散的数据为机器人的各种运动提供更好的参数拟合,从而可以高精度地预测附加转矩指令。
推荐的移动类型是使用正弦波命令。该命令以指定的幅度和频率移动机器人的每个关节。为了获得良好的离散数据,每个关节的振幅应接近其全部位置范围,每个关节的频率应与其他关节不同。每个关节的频率决定了关节之间运动的相关性。如果两个或多个关节具有相同的频率,则它们总是处于相同的相位,这将导致非离散的数据。此外,如果某个关节的频率是另一个关节的频率的倍数,那么在更快的关节的几个周期(更确切地说,乘法因子)之后将会重复相同的运动。实际上,对于任何合理的频率值,运动将在几个周期后重复。但是,为了获得良好的结果,建议每个关节至少获得三个周期的数据。因此,只要运动在这个记录时间内不重复,频率就选择好了。 以下是三种关节机器人的一些示例:
J1 | J2 | J3 | 注释 | 质量 |
---|---|---|---|---|
1 | 2 | 1.2 | j1和j2将在j1的1个周期和j2的2个周期之后重复 | Bad |
1 | 1.2 | 1.2 | j2和j3将在j2的3个周期和j3的2个周期之后重复 | Medium |
1.1 | 1.3 | 1.5 | j1,j2和j3 将在j1的11个周期,j2的13个周期和j3的15个周期之后重复 | Good |
第一个例子不是一个好的频率选择,第二个例子是好的,最后一个例子是很好的参数选择。 显示这些正弦波组合的图表如图5所示。
最后,关节的速度也很重要。运动过程中的峰值速度应该接近每个关节的最大速度。在高速度下,动力学模型的加速度和速度对象是显着的,从而允许更准确的识别过程。关节的峰值速度可以通过运动的幅度和频率来调节。首先定义每个关节的振幅,然后设置一些任意的频率,例如{1.1,1.3,1.5},然后用一个标量因子乘以频率矢量:factor * {1.1,1.3,1.5}。通过改变因子,可以控制关节的速度。
识别任务的示例
图6显示了识别过程的示意图。
执行识别过程的程序示例,该程序用于delta机器人:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-30,-30,-30,-200}
7. sineTarget = {70,70,70,200}
8. SWfreq = 0.3*{1,1.27,1.43,1.13}
9.
10. with robot
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
这里是对示例程序的解释:
行号 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
6 | 定义系统每个关节的起始位置 | ||||||||||
7 | 定义结束位置 | ||||||||||
8 | 定义每个关节的正弦波的频率(注意频率乘以因子0.3)。总的来说,这些是关节在某一时刻的位置:
| ||||||||||
15 | 定义适合机器人的动力学模型,这将在稍后讨论。 请注意,只有在禁用机器人的情况下,才能修改此参数. | ||||||||||
21 | 将机器人移动到起始位置 | ||||||||||
26 | 开始向目标点正弦波运动 | ||||||||||
29 | 用IdentificationStart命令开始记录数据。在这行上,还可以设置一个将截止频率设置为IdentFilterFreq收集数据(通过pfb和tfb)的低通滤波器。截止频率必须大于最大正弦波频率。可以尝试多个截止频率,并在原始数据和滤波数据之间进行比较,然后选择过滤大部分噪声而不改变实际数据的数据。请查看识别wiki页面,以获取有关可以为IdentificationStart命令设置的参数的更多信息。 | ||||||||||
31 | 设置休眠时间 – 记录时间 | ||||||||||
32 | 停止记录并应用动力学模型参数识别 |
在此任务结束时,将在MC文件夹中创建一个名为IDNT<group num>.PRG和IDNT<group num>.REC的文件。
PRG文件包含识别的参数,REC文件包含用于识别的记录数据。
以下小节介绍如何将识别应用于不同的机器人模型。
不同机器人模型的识别过程
单轴模型
有两种类型的单轴关节,直线和旋转。这些类型中的每一个都有几个不同的动力学模型,可以在动力学模型wiki页面(和第5.4节)中查看。 简而言之,这些是不同的模型:
直线轴
直线轴类型有2个动力学模型类型:
- 水平轴
- 倾斜轴 – 相对于垂直轴线具有角度α的轴,范围在0和90度之间(图7)。当α= 0时,轴是垂直的,当α= 90时,轴是水平的(α参数是通过识别找到的(即,它不是用户输入)。
旋转轴
旋转轴类型有3种动力学模型:
- 简单的旋转轴 - 其质心位于旋转轴上。
- 水平曲柄臂轴(图8左)。
- 垂直曲柄臂轴(图8右)。
适用于上述所有类型的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = -350
7. sineTarget = 350
8. SWfreq = 1.5
9.
10. with axis
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 2
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq Abs = 1
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
要重复使用此代码,请记住使用适合于应用程序的频率和振幅值,并使用合适的动力学模型类型。
SCARA机器人
SARA机器人有两个运动学模型,一个有三个轴(XYZ),另一个有四个轴(XYZR)。
但是,只有一种适合这两种运动学模型的动力学模型。
用于3轴SCARA的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-160,-160,0}
7. sineTarget = {160,160,150}
8. SWfreq = 0.3*{1,1.27,1.43}
9.
10. with SCARA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
用于4轴SCARA的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-160,-160,0,-350}
7. sineTarget = {160,160,150,350}
8. SWfreq = 0.3*{1,1.27,1.43,1.13}
9.
10. with SCARA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。
一些SCARA机器人具有耦合关节,通常是第三和第四关节。目前,SCARA机器人的动力学模型没有考虑耦合。因此,耦合关节可能会有很大的误差。
DELTA机器人
Delta机器人有两个运动学模型,一个有三个轴(XYZ),另一个有四个轴(XYZR)。
但是,只有一种适合这两种运动学模型的动态模型。
用于3轴Delta的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-30,-30,-30}
7. sineTarget = {70,70,70}
8. SWfreq = 0.3*{1,1.27,1.43}
9.
10. with DELTA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
适用于4轴Delta的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-30,-30,-30,-350}
7. sineTarget = {70,70,70,350}
8. SWfreq = 0.3*{1,1.27,1.43,1.13}
9.
10. with DELTA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。
PUMA机器人
PUMA机器人只有一个运动学模型,但它有两个不同的动力学模型。
第一个动力学模型是像其他机器人一样的常规模型。
第二个模型是一个半静态模型,这意味着它只适用于慢动作和静态位置。该模型仅考虑重力和摩擦力/扭矩。
完整常规模式
该模型识别规则和之前的模型一样。
PUMA工作的识别任务示例:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-100,-170,100,-60,-60,-100}
7. sineTarget = {100,-40,235,60,60,100}
8. SWfreq = 0.15*{1.56,1,1.31,1.47,1.21,1.17}
9.
10. with PUMA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
要重复使用此代码,请记住使用适合于应用程序的频率和幅度值。
半静态模型
到目前为止,半静态模型识别与所有的例子都有一点不同。 这个模型只考虑重力和摩擦力,换句话说它忽略了动力。 因此,测量应该包括可以忽略不计的动态力,这可以通过缓慢运动来实现。
这个识别过程比通常的识别过程更长,大约需要2-3分钟。另外,建议执行少于3个周期,1个周期就足够了。.
另外,类似于前面的例子,半静态模型阈值数据点的速度。但是与前面的例子不同,这里有两个阈值,一个用于避免非常低的速度,避免数字误差),另一个用于避免高速度(避免显着的动态力)。 这种识别过程的例子:
1. program
2. dim startPoint as generic joint
3. dim sineTarget as generic joint
4. dim SWfreq as generic joint
5.
6. startPoint = {-100,-170,100,-60,-60,-100}
7. sineTarget = {100,-40,235,60,60,100}
8. SWfreq = 0.02*{1.56,1,1.31,1.47,1.21,1.17}
9.
10. with PUMA
11. attach
11. En = 0
12. while En
13. sleep 100
14. end while
15. DynamicModel = 1
16. En = 1
17. while not En
18. sleep 100
19. end while
20.
21. Move startPoint Abs = 1
22. while IsMoving
23. sleep 100
24. end while
25.
26. SineWave sineTarget SineWaveFreq = SWfreq
27. sleep 2000
28. ' IdentFilterFreq is a Low pass filter.Frequency should be below 125 Hz
29. IdentificationStart IdentFilterFreq = 80
30. ' the time of the identification, you can change time.
31. sleep 20000
32. IdentificationFinish
33.
34. stop
35. while IsMoving
36. sleep 100
37. end while
38. proceed
39. En = 0
40.
41. detach
42. end with
43. end program
请注意造成慢速运动的重要低频。
动力学模型参数
本节列出了每种类型的动力学模型的动力学参数。
旋转轴
动力学模型1 - 简单的旋转轴
序号 | 参数 | 注释 |
---|---|---|
1 | 运动部件的旋转轴周围的总转动惯量 |
- 模型方程
动力学模型2 - 水平曲柄臂轴
序号 | 参数 | Comments |
---|---|---|
1 | 运动部件的旋转轴周围的总转动惯量 | |
2 | 曲柄臂的长度的平方(轴到有效载荷) |
- 模型方程
动力学模型3 - 垂直曲柄臂轴
序号 | 参数 | 注释 |
---|---|---|
1 | 运动部件的旋转轴周围的总转动惯量 | |
2 | 曲柄臂的长度的平方(轴到有效载荷) | |
3 | 质量(无有效载荷)* 重力加速度* 到质心的距离 | |
4 | 重力加速度 * 到有效负载的距离 |
- 模型方程
线性轴
动力学模型1 - 水平轴
序号 | 参数 | 注释 |
---|---|---|
1 | 运动部分的总质量。 |
- 模型方程
动力学模型2 - 垂直或倾斜的轴
序号 | 参数 | 注释 |
---|---|---|
1 | 运动部分的总质量. | |
2 | 由重力产生的恒力 | |
3 | 用于考虑有效载荷质量的重力系数。(g = 9.80665) |
- 模型方程
SCARA 机器人
动力学模型1
序号 | 参数 | 注释 |
---|---|---|
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 |
DELTA 机器人
动力学模型1
序号 | 参数 | 注释 |
---|---|---|
1 | kg*m2 | |
2 | kg*m2/sec2 | |
3 | kg | |
4 | kg*m2 | |
5 | kg | |
6 | kg | |
7 | kg*m2 | |
8 | kg*m2 | |
9 | m | |
10 | m | |
11 | ||
12 | ||
13 | ||
14 |
PUMA 机器人
动力学模型1
Description:
- - 重力常数
- - 第 ith个连杆的质量
- - 第ith和第ith+1关节之间的公共法线的长度
- - 在第ith个和第ith+1个关节之间沿z轴偏移
- - 从第ith个关节到第ith+1 个关节质量中心的距离
序号 | 参数 | 注释 |
---|---|---|
1 | |
kg/m^2 |
2 | kg/m^2 | |
3 | kg/m^2 | |
4 | kg/m^2 | |
5 | kg/m^2 | |
6 | kg/m^2 | |
7 | kg/m^2 | |
8 | kg/m^2 | |
9 | kg/m^2 | |
10 | kg/m^2 | |
11 | kg/m^2 | |
12 | kg/m^2 | |
13 | kg/m^2 | |
14 | kg/m^2 | |
15 | kg/m^2 | |
16 | kg/m^2 | |
17 | kg/m^2 | |
18 | kg/m^2 | |
19 | kg/m^2 | |
20 | kg/m^2 | |
21 | kg/m^2 | |
22 | kg/m^2 | |
23 | kg/m^2 |
动力学模型2 - 重力
序号 | 参数 | 注释 |
---|---|---|
1 | kg*m^2/s^2 | |
2 | kg*m^2/s^2 | |
3 | kg*m^2/s^2 | |
4 | kg*m^2/s^2 |
带有有效载荷的参数识别
IdentificationStart命令有一个名为‘IdentPayload’的布尔参数。如果此参数设置为false,则会定期执行识别过程。如果此参数设置为true,则识别过程仅识别有效载荷质量或惯性。
为了识别有效载荷,必须遵循这些步骤:
- 执行识别过程没有有效载荷。
- 设置动力学模型参数(通过运行identification PRG文件)。
- 将‘IdentPayload’设置为true,并对有效负载执行识别过程。
NOTE | |
在对有效载荷执行识别过程并将“IdentPayload”设置为true之后,identification PRG文件将包含步骤1中的动态模型参数以及步骤3中的有效载荷参数。 |
NOTE | |
该程序适用于所有动态模型除PUMA机器人的动力学模型1外 |
识别输出文件的说明
识别输出PRG文件的示例。该文件在识别过程结束时生成,命名为:IDNT <group num> .PRG:
1. 'Dynamic parameter identification for PUMA succeeded!
2. 'Identification date and time: 29/03/17 08:17:08
3. 'Max relative torque error: axis 1 = 13.86 %; axis 2 = 8.70 %; axis 3 = 7.79 %; axis 4 = 17.87 %; axis 5 = 23.87 %; axis 6 = 43.85 %; (maximal allowed = 50.00 %)
4. 'Mean relative torque error: axis 1 = 3.18 %; axis 2 = 1.71 %; axis 3 = 1.88 %; axis 4 = 3.59 %; axis 5 = 5.88 %; axis 6 = 12.41 %;
5. 'Signal filter cutoff frequency = 20.000 Hz
6. 'Signal data length = 49876 samples (raw record length = 50000 samples)
7. 'Moving data length: axis 1 = 35998 samples (threshold = 0.038770 rad/s); axis 2 = 35405 samples (threshold = 0.031481 rad/s); axis 3 = 36032 samples (threshold = 0.039294 rad/s); axis 4 = 36785 samples (threshold = 0.041069 rad/s); axis 5 = 34931 samples (threshold = 0.038757 rad/s); axis 6 = 29759 samples (threshold = 0.062830 rad/s);
8. PROGRAM CONTINUE
9. ATTACH PUMA
10. PUMA.DynamicParameter[1] = 8.759309007e+01
11. PUMA.DynamicParameter[2] = 1.021832253e+01
12. PUMA.DynamicParameter[3] = 3.042091725e+01
13. PUMA.DynamicParameter[4] = 1.560383089e+00
14. PUMA.DynamicParameter[5] = 0.000000000e+00
15. PUMA.DynamicParameter[6] = 0.000000000e+00
16. A1.ViscousFriction = -1.547427791e+02
17. A1.CoulombFriction = -2.018153298e+01
18. A2.ViscousFriction = -1.603287029e+02
19. A2.CoulombFriction = -4.658045702e+01
20. A3.ViscousFriction = -1.085257604e+02
21. A3.CoulombFriction = -1.961987594e+01
22. A4.ViscousFriction = -1.142833743e+01
23. A4.CoulombFriction = -9.124446870e+00
24. A5.ViscousFriction = -2.468491129e+01
25. A5.CoulombFriction = -3.713111266e+00
26. A6.ViscousFriction = -2.173025205e+00
27. A6.CoulombFriction = -9.724658207e-01
29. PUMA.DynamicModel = 2
30. DETACH PUMA
31. TERMINATE PROGRAM
1-7行提供了有关识别过程的信息。第1行报告识别是否成功。
2. 'Identification date and time: 29/03/17 08:17:08
3. 'Max relative torque error: axis 1 = 13.86 %; axis 2 = 8.70 %; axis 3 = 7.79 %; axis 4 = 17.87 %; axis 5 = 23.87 %; axis 6 = 43.85 %; (maximal allowed = 50.00 %)
第2行报告识别的日期和时间.
第3行报告记录的最大相对扭矩误差。扭矩误差作为TorqueAdditiveCommand(Taddcmd)减去测量的TorqueFeedback。这个计算的Taddcmd被当作Taddcmd,这个Taddcmd可以用已经确定的动力学参数进行计算,就好像这个运动已经完成了一样。 换句话说,误差是真实数据和拟合模型之间的差异。 相对转矩误差的计算方法是转矩误差除以最大测量转矩反馈(每个关节及其最大转矩反馈值)。 最大相对转矩误差是每个关节相对值的最大值。最大相对转矩误差的公式是:
如果其中一个关节的这个值大于50%,则认定为失败。
4. 'Mean relative torque error: axis 1 = 3.18 %; axis 2 = 1.71 %; axis 3 = 1.88 %; axis 4 = 3.59 %; axis 5 = 5.88 %; axis 6 = 12.41 %;
5. 'Signal filter cutoff frequency = 20.000 Hz
6. 'Signal data length = 49876 samples (raw record length = 50000 samples)
第4行报告平均相对转矩误差,所有记录时间的相对转矩误差平均值被记录并显示在每个关节上。
第5行报告用于低通滤波器的截止频率。
第6行报告记录了多少个数据点。
7. 'Moving data length: axis 1 = 35998 samples (threshold = 0.038770 rad/s); axis 2 = 35405 samples (threshold = 0.031481 rad/s); axis 3 = 36032 samples (threshold = 0.039294 rad/s);
'axis 4 = 36785 samples (threshold = 0.041069 rad/s); axis 5 = 34931 samples (threshold = 0.038757 rad/s); axis 6 = 29759 samples (threshold = 0.062830 rad/s);
第7行报告每个关节有多少数据点用于模型拟合。 如果这些点中的关节速度低于某个阈值(每个关节的阈值也在该行中报告),则丢弃一些数据点。这是因为低速数据点导致模型拟合的数值误差。 因此,上面解释的所有相对误差只是针对模型拟合所考虑的那些点来计算的。
10. PUMA.DynamicParameter[1] = 8.759309007e+01
11. PUMA.DynamicParameter[2] = 1.021832253e+01
12. PUMA.DynamicParameter[3] = 3.042091725e+01
13. PUMA.DynamicParameter[4] = 1.560383089e+00
14. PUMA.DynamicParameter[5] = 0.000000000e+00
15. PUMA.DynamicParameter[6] = 0.000000000e+00
第10-15行(为此文件)设置拟合的动力学模型参数。
16. A1.ViscousFriction = -1.547427791e+02
17. A1.CoulombFriction = -2.018153298e+01
18. A2.ViscousFriction = -1.603287029e+02
19. A2.CoulombFriction = -4.658045702e+01
20. A3.ViscousFriction = -1.085257604e+02
21. A3.CoulombFriction = -1.961987594e+01
22. A4.ViscousFriction = -1.142833743e+01
23. A4.CoulombFriction = -9.124446870e+00
24. A5.ViscousFriction = -2.468491129e+01
25. A5.CoulombFriction = -3.713111266e+00
26. A6.ViscousFriction = -2.173025205e+00
27. A6.CoulombFriction = -9.724658207e-01
第16-27行(用于此文件)设置拟合的摩擦参数。
29. PUMA.DynamicModel = 2
第29行(为此文件)设置用于此识别过程的动力学模型。
成功条件
成功的条件是基于相对扭矩误差。每个轴应具有低于50%的最大相对扭矩误差值,以便将识别视为成功。
扭矩误差作为TorqueAdditiveCommand(Taddcmd)减去测量的TorqueFeedback。 这个计算的Taddcmd被当作Taddcmd,这个Taddcmd可以用已经确定的动力学参数进行计算,就好像这个运动已经完成了一样。 换句话说,误差是真实数据和拟合模型之间的差异。
相对转矩误差的计算方法是转矩误差除以最大测量转矩反馈(每个关节及其最大转矩反馈值)。 最大相对转矩误差是每个关节相对值的最大值。 如果其中一个关节的这个值大于50%,则认定为失败。 第4行报告平均相对转矩误差,所有记录时间的相对转矩误差平均值被记录并显示在每个关节上。 请注意,相对扭矩误差仅针对处于最小速度限制的点进行评估。
不同关节之间的最大相对扭矩误差可能会有所不同。通常,小型关节(小型电机)具有较大的相对误差。这是因为这些电机所施加的转矩很小,测量中的噪音与所施加的转矩处于相同的数量级。
例如: 我们假设对于某个点j1.TorqueFeedback = 80和j1.TorqueAdditiveCommand = 100.对于这一点,j1.TorqueError = 20.假设在记录过程中最大j1.TorqueFeedback是160,那么对于这一点相对转矩误差将是:j1.TorqueError/max(j1.TorqueFeedback) = 20/160 = 0.125 = 12.5%
参数
支持的机器人模型的动力学模型至少有一种动力学模型。 这些模型可以在wiki 页面中 Dynamic Models找到。 每个模型都基于一些由机器人不同部分的质量,长度和惯性组成的参数。 这些是借助识别过程正在评估的参数。 参数保存为robot.DynamicParameter [i],其中robot是机器人名称,i是Dynamic Models页面中所述参数的编号。 每个模型可能有不同数量的参数。
在动力学参数后,出现粘性摩擦和库仑摩擦参数:轴。摩擦摩擦,轴线。库仑摩擦。 机器人的每个关节都有这两个参数来定义它的摩擦系数。
除了这些参数之外,用户还应该考虑设置附加转矩指令的最大允许值。 这可以通过属性TorqueThreshold来设置,例如, a1.TorqueThreshold = 200.如果Taddcmd超过此值,则会给softMC报告错误。
在设置中包含标识输出文件
为了使动力学模型生效,只需在禁用机器人(en = 0)时运行IDNT<group num>.PRG文件。 请注意,这应该在机器人设置之后。 为了在系统初始化和机器人设置期间自动加载动态模型配置,只需添加该行:
Load IDNT<group num>.PRG到机器人设置'后的AUTOEXEC.PRG或START PRG.PRG文件的末尾。
识别过程记录文件的说明
在识别过程结束时生成的另一个文件是数据记录文件。文件名称为: IDNT<group num>.REC。该文件包含识别过程使用的所有相关数据。以下是为每个关节显示的参数:
- tfbRaw – TorqueFeedback(tfb)属性的原始记录数据。
- pfbRaw – PositionFeedback(pfb)属性的原始记录数据。
- tfb – 经过滤波的TorqueFeedback(tfb)属性的记录数据。
- pfb – 经过滤波的PositionFeedback(pfb)属性的记录数据。
- vfb – 经过滤波的VelocityFeedback (vfb)属性的记录数据。
- afb – 经过滤波的AccelerationFeedback (afb)属性的记录数据。
- tcmd –拟合模型生成的扭矩指令。识别的动力学参数和收集的数据用于计算此属性。 在常规模式下,这个属性实际上是TorqueAdditiveCommand(Taddcmd)。
- te – TorqueError(te)由tcmd和tfb数据的差值计算得出。
该文件可用于更好的调试和故障排除,以及更好地理解识别过程。在图15中,您可以找到识别输出REC文件的示例:
跟踪改进的示例(整定,位置误差)
SCARA机器人
有和没有动力学参数的4轴scara机器人的实验。机器人以900[mm/s]的线速度运动600[mm],在这个运动中记录机器人的笛卡尔速度和ISSETTLED属性(图16和17,ISSETTLED属性缩放3000倍)。
ISSETTLED属性指示实际运动元素位置是否在指定的整定范围内。整定范围由PESETTLE属性定义,并由TIMESETTLE属性进一步限定。当运动分析器完成后,位置误差(目标位置 - 实际位置)的绝对值将与PESETTLE属性进行比较。当结果小于或等于此属性的TIMESETTLE给定的时间时,ISSETTLED标志被设置。对于这个例子,PESETTLE被认为是0.001。因此,可以预期较短的整定时间表示较好的性能。
图16和17显示了来自实验的记录数据。结果表明,无运力学模型的运动的整定时间为300 ms,有动力学模型的整定时间为260 ms〜原整定时间的86.7%。
DELTA 机器人
有和没有动力学参数的3轴Delta机器人的实验。机器人以3000[mm/s]的线速度运动550[mm],在这个运动中记录机器人的笛卡尔速度和ISSETTLED属性(图17和18,ISSETTLED属性缩放3000倍)。
ISSETTLED属性指示实际元素位置是否在指定的整定范围内。整定范围由PESETTLE属性定义,并由TIMESETTLE属性进一步限定。当运动分析器完成后,位置误差(目标位置 - 实际位置)的绝对值将与PESETTLE属性进行比较。当结果小于或等于此属性的TIMESETTLE给定的时间时,ISSETTLED标志被设置。对于这个例子,PESETTLE被设置为0.05。
因此,可以预期较短的建立时间表示较好的性能。
图17和18显示了来自实验的记录数据。结果表明,无动力学模型的这种运动的整定时间为268ms,动力学模型的整定时间44ms〜为原始建立时间的16.5%。
PUMA 机器人
有和没有动力学模型的实验。3轴以SineWave命令运动,而2轴停留在0。 图19显示了(顶部)和无(底部)动力学模型情况下的2轴位置误差。有和无动力学模型的峰峰值幅度分别为〜0.6e-3和〜1e-3。这意味着在这个例子中,使用动力学模型减少了约40%的误差。
碰撞检测
动力学模型允许启用更精细的碰撞检测功能。 如果没有动力学模型,softMC可以通过机器人或关节的位置误差的阈值来检测碰撞。 然而,当使用机器人的动力学模型时,可以通过对转矩误差的阈值进行检测碰撞。扭矩误差比位置误差反应更快,因此可以实现更精细的碰撞检测。
为了激活特定关节的转矩误差的阈值,将TorqueErrorEnable(Teen)属性设置为1,例如, a1.Teen = 1。要设置的另一个属性是TorqueErrorMax(Temax),例如, a1.Temax = 10。这个属性设置了在softMC之上的最大允许转矩误差,如果超过该转矩误差,则报告一个错误。 请注意,Temax属性可能会在不同的关节之间有所不同,通常关节的电机越大,用户应该允许的更大的Temax。 还要注意,随着动力学模型识别结果变得更加准确,Temax可以随着扭矩误差变小而减小。
最后一个要考虑的属性是TorqueErrorFilter属性。 如果扭矩反馈有噪声,则会由于噪声导致错误的碰撞检测的而超过Temax值。过滤这些噪音有助于实现更好的碰撞检测程序。 此属性设置的值范围在0.0到1.0之间。 滤波器是一个非常简单的平均滤波器,它的执行过程如下:
TE是TorqueError属性,TEF是TorqueErrorFilter属性。
请注意,通常最大的误差发生在运动的开始,结束或改变方向。 因此,在这些情况下,误差的大小决定了Temax值的大小。 尽管如此,这些案例的特点是速度非常低。 因此,可以编写一个监视扭矩误差和关节速度的应用程序,忽略速度较小的情况,或者可能仅仅为这些情况增加Temax。 因此,碰撞检测功能可能变得非常灵敏。
检测识别失败的可能原因
本节回顾可能导致不良结果或识别过程失败的一些可能的原因。 下一节讨论如何识别这些原因。
运动太慢
如第3节所述,动态识别模型要求机器人关节高速运动。当关节低速运动时,关节内产生的扭矩主要克服与关节摩擦力和重力扭矩,加速度和惯性相对较小。因此,动态模型参数识别性能较差。 此外,识别过程忽略了一定速度下的数据,所以缓慢运动也会导致数据不足。
也就是说,在这种情况下,输出的PRG识别文件可以报告识别过程是成功的,并且所得到的最大相对误差可以很小。 然而,稍后当试图以比在识别过程中使用的速度更高的速度移动时,附加转矩指令预测将很可能表现不佳。
图20显示了识别期间运动速度较慢的三轴Delta机器人识别输出REC文件的示例。值得注意的是数据非常嘈杂,其原因是运动速度慢,因此产生的转矩小,相对噪音大
图21显示了相同的Delta机器人和相同运动的扭矩误差。最上面的图是使用从慢速识别过程中检索到的参数的运动的结果,底部图是使用从良好识别过程中检索到的参数的运动的结果。可以看出,对于慢速的识别过程的情况,扭矩误差显着增加。
运动太快
这个问题不太可能发生,但仍然可能导致较差的结果或识别过程失败。
如果机器人关节达到极限,则电机转矩可达到饱和值。目前的动力学模型没有考虑到饱和度,因此如果发生饱和,将导致较差的识别结果。
运动持续时间太短
识别是基于在机器人移动过程中记录的收集数据。如果没有足够的数据,则识别可能过度拟合数据,并且将仅针对所收集的数据的区域而准确地进行预测。在这种情况下,识别可能报告为成功,因此用户必须判断所收集的数据是否足够。经验法则是每个关节至少应该完成3个周期。
运动区域太小
识别是基于在机器人移动过程中记录的收集数据。 如果数据不是分散在机器人的整个工作区域,那么识别可能会过度地拟合数据,并且仅针对所收集的数据的区域来准确地进行预测。
在这种情况下,识别可能被报告为成功,因此用户必须判断所收集的数据是否足够。 一个经验法则是每个关节都应该达到位置值,与其正负位置极限接近。
TorqueFactor属性未配置好
每个机器人的动力学模型是基于MKS单位系统,因此转矩反馈值应该以[Nm]为单位。 如果TorqueFactor特性配置不当,扭矩反馈将不会有合适的值,并且模型方程将会出错。
在这种情况下,识别过程将表现不佳,所识别的模型参数将不正确。
错误的DynamicModel属性的类型
一些运动学模型被分配了多种类型的动力学模型。这些不同的型号是为了处理不同的配置。例如,一个线性轴可以是水平的,垂直的或者倾斜一定的角度,这些配置中的每一个具有不同的动力学模型和不同的DynamicModel属性值。
如果设置了错误的DynamicModel值,识别过程将表现不佳。
如何根据输出文件来评估失败原因
本节回顾生成的识别文件和识别过程的一些可能的失败结果。失败的原因可能是识别过程失败,或者识别过程成功,效果不佳。
识别过程失败
识别失败是其中一个关节导致最大相对误差大于50%的情况。 以下是可能导致此结果的一些原因:
- 一个或多个关节运动太慢。这可以在第6行和第7行的输出PRG文件中找到。第6行报告为每个关节收集了多少个数据点。 第7行报告有多少点的速度大于速度阈值。 如果一个或多个关节阈值之后的数据点数量明显小于收集点的总数,则意味着该关节运动太慢。
- 一个或多个关节达到饱和。这可以在输出REC文件中识别。打开输出REC文件,只观察标题中关节的以下属性:tfb,tcmd和te。饱和度可以通过观察tfb突然到达峰值,而tdcmd持续稳定。
- 对于小关节噪音很大。对于某些系统,噪声可能与工作的平均电流的数量级相同。在这种情况下,虽然净转矩误差很小,但相对转矩误差可能非常大。 在这种情况下,即使识别失败(考虑到没有更多问题),仍建议使用输出PRG文件中接收到的动力学的参数结果。为了表明这个问题,请打开输出REC文件,只观察标题中关节的以下属性:tfb,tcmd和te。 然后可以观察是否由于噪声而出现大的误差。 图22显示了工作平均电流的相同数量级的噪声示例,图23显示了相对较小噪声大小的示例
识别过程成功但实时预测结果不佳
识别过程可以报告成功,但实时执行效果不佳。由于某种原因,该模型能够很好地拟合数据,但是对于正常操作中的其他运动,该模型还不够好。这通常是因为机器人在识别过程中没有覆盖其工作空间的主要部分。以下是可能导致此结果的一些原因:
- 一个或多个关节的振幅不够大,不能覆盖关节的运动范围。 这可以在输出REC文件中查看,或者只是重新检查关节的幅度是否足够大。
- 识别过程持续时间太短(相对于关节速度)。可以通过查看输出REC文件来识别。 看看每个关节的pfb属性。如果一个或多个关节不能完成至少3个周期,增加识别持续时间(或关节速度)应该有所帮助。
- 所选择的频率是重叠的或不容许的位置足够多样性。可以通过查看输出REC文件来识别。可以查看所有关节的pfb属性。如果两个或多个关节似乎一起振荡,或在少量周期后重叠,或者非常类似地振荡,则尝试更改有问题的关节的频率。
测试规格
本节介绍如何测试动力学模型功能并检查其是否正常工作。测试过程包括记录特定属性,同时执行某种机器人运动。记录的最低要求属性是Tfb,Taddcmd,Te。 测试可以分为两种类型:一种是检查扭矩预测的准确性对于所有类型的运动是合理的; 另一个是检查机器人性能(例如整定时间,振动等)是否随着动力学模型的激活而有所改善。
测试精度等同于测试转矩误差。为了测试扭矩误差,只需生成一个任务,在运行时产生一些运动变化并记录所需的属性。 或者,如果机器人应用程序任务已知,则可以使用此任务来执行此测试。 只需在记录Tfb,Taddcmd和Te属性的同时运行任务。 然后,观察记录(特别是Te属性),并确定是否达到满意的精度。