Difference between revisions of "Multi-Axis Kinematics/zh-hans"

From SoftMC-Wiki
Jump to: navigation, search
(AXY: new links)
 
(18 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Languages}}
+
{{Languages|Multi-Axis_Kinematics}}
 +
<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; ">
 +
[[Image:TOP2.png|50px|link=#top]] </span></div>
 
= 介绍 =
 
= 介绍 =
  
多个轴可以组合并移动。 有:
+
多个轴可以组合并运动。 有:
 
* 简单组((无模型,可以是相同类型或不同类型)
 
* 简单组((无模型,可以是相同类型或不同类型)
 
* 笛卡尔组(每个轴的作用被严格定义,例如:XYZ,XYZR,...)
 
* 笛卡尔组(每个轴的作用被严格定义,例如:XYZ,XYZR,...)
Line 12: Line 15:
 
'''Non-homogeneous groups'''由旋转轴和线性轴两种轴组成。增加了一个特征来支持非同类型组速度的定义。 在设置中,声明旋转轴和线性轴。 系统确定它是线性还是旋转主导组。例如,在SCARA机器人中,有两个旋转轴用于第一和第二个关节,另一个旋转轴用于最后一个关节(旋转)。 只有一个线性轴(Z轴)。这种系统是旋转主导的。 另一个例子是XYZ-Roll系统。 这里,只有一个旋转轴(旋转)有两个线性(X和Y)轴和另一个线性(Z轴)。 在这种情况下,系统是线性主导的。 轴设置定义组的行为。每个轴必须声明是线性轴或旋转轴,通过设置 [[MC-Basic:axis.POSITIONROLLOVERENABLE|'''POSITIONROLLOVERENABLE''']] 为线性轴(0)或旋转轴(1)。
 
'''Non-homogeneous groups'''由旋转轴和线性轴两种轴组成。增加了一个特征来支持非同类型组速度的定义。 在设置中,声明旋转轴和线性轴。 系统确定它是线性还是旋转主导组。例如,在SCARA机器人中,有两个旋转轴用于第一和第二个关节,另一个旋转轴用于最后一个关节(旋转)。 只有一个线性轴(Z轴)。这种系统是旋转主导的。 另一个例子是XYZ-Roll系统。 这里,只有一个旋转轴(旋转)有两个线性(X和Y)轴和另一个线性(Z轴)。 在这种情况下,系统是线性主导的。 轴设置定义组的行为。每个轴必须声明是线性轴或旋转轴,通过设置 [[MC-Basic:axis.POSITIONROLLOVERENABLE|'''POSITIONROLLOVERENABLE''']] 为线性轴(0)或旋转轴(1)。
  
在非同类型组中, 根据组的主导类型(参考: [[MC-Basic:group.DOMINANCEMODE|DOMINANCEMODE]])总是给出联合插补运动([[MC-Basic:MOVE|MOVE]])命令速度。如果该组是线性优势的,速度([[MC-Basic:group.VELOCITYCRUISE|'''VCRUISE''']], [[MC-Basic:group.VELOCITYFINAL|'''VFINAL''']])为线性单位(mm / sec)。
+
在非同类型组中, 根据组的主导类型(参考: [[MC-Basic:group.DOMINANCEMODE|DOMINANCEMODE]])总是给出联合插补运动([[MC-Basic:MOVE|MOVE]])命令速度。如果该组是线性优势的,速度([[MC-Basic:element.VELOCITYCRUISE|'''VCRUISE''']], [[MC-Basic:element.VELOCITYFINAL|'''VFINAL''']])为线性单位(mm / sec)。
 
在运动的准备阶段检查其他非线性轴。 这些轴的速度不能超过最大值。 如果是这样,总体(组)速度就会降低。
 
在运动的准备阶段检查其他非线性轴。 这些轴的速度不能超过最大值。 如果是这样,总体(组)速度就会降低。
  
Line 92: Line 95:
  
 
= 耦合 =
 
= 耦合 =
在许多机器人应用中,机械结构引入轴之间的机械耦合。在这种情况下,两个或多个电机只移动一个关节。 因此,仅激活一个电机会导致两个轴(关节)的运动。有很多这样的机械设置的例子。通常当电机移动关节时,它们正在启动。 当电动移动第二关节置于第一关节之前时,第二关节通过第一和第二电机的运动而移动。这种应用的典型实例是移动机械手臂(PUMA)的电机通过链条或皮带移动机器人手臂。最后一个机器人部件上的差速齿轮传动从末端执行器移动最后一个电机(转动),第五和第六个电机在第六个和第六个电机上引入运动(Staubli RX系列)。
+
在许多机器人应用中,机械结构引入轴之间的机械耦合。在这种情况下,两个或多个电机只移动一个关节。 因此,仅激活一个电机会导致两个轴(关节)的运动。有很多这样的机械设置的例子。通常当电机移动关节时,它们正在启动。 当电机在第一关节之前时移动第二关节时,第二关节通过第一和第二电机的运动而移动。这种应用的典型实例是移动机械手臂(PUMA)的电机通过链条或皮带移动机器人手臂。最后一个机器人部件上的差速齿轮传动从末端执行器移动最后一个电机(转动),第五和第六个电机引入第六个关节的运动(Staubli RX系列)。
  
  
Line 135: Line 138:
  
 
== 关节 ==
 
== 关节 ==
Joints are virtual axes. Joints give the illusion of only one axis, both from the language point of view and looking at the physical movement of the coupled axis. The joint is analogous to an axis. Joints are denoted as J1, J2, etc.
+
关节是虚拟轴。 无论从语言的角度看,还是耦合轴的物理运动,关节只给出一个轴的错觉,关节类似于轴,关节表示为J1,J2等
  
Each joint actually represents one or several axes of the group, according to the given coupling matrix. If the group has no coupling matrix defined, the joint is a direct representation of the axis of the same ordinal number in the group as the joint index. To introduce another term, the "shadow-axis" of a joint is the axis with the same ordinal number in the group as the joint index. For example, if a group consists of axes A2, A3, A4, the shadow-axis of the joint J1 is A2.
+
根据给定的耦合矩阵,每个关节实际上表示该组的一个或多个轴。如果组没有定义耦合矩阵,则关节是组中相同序数的轴作为关节索引的直接表示。
 +
为了引入另一个术语,关节的"影轴"是组中与关节索引具有相同序数的轴。 例如,如果一组由轴A2,A3,A4组成,则关节J1的影轴为A2。
  
Normally, all joint properties are a direct representation (have the same value) of shadow-axis properties, independent of whether the coupling matrix is defined or not. The only exceptions are properties related to joint position: '''PCMD''', '''PFB''', '''VCMD''', '''VFB''', '''CCMD''', '''CFB''', '''PMAX''', and '''PMIN'''. These are unique for each joint.
+
通常,所有关节属性都是影轴属性的直接表示(具有相同的值),与是否定义了耦合矩阵无关。唯一的例外是与关节位置相关的属性: '''PCMD''', '''PFB''', '''VCMD''', '''VFB''', '''CCMD''', '''CFB''', '''PMAX''''''PMIN''',这些是每个关节独有的。
  
Current positions and velocities are obtained according to the given coupling matrix. They are computed each time a query of these values is issued ('''PCMD''', '''PFB''', etc.). They are read-only and do not represent any specific internal variable. Symmetrically the same properties, when queried from a group (?g1.PCMD), return lists of joint-property values according to the coupling matrix. The movement’s target positions ('''MOVE''' or '''CIRCLE''') of group movements are treated analogously (coupling matrix).
+
根据给定的耦合矩阵获得当前位置和速度。每次发出这些值的查询('''PCMD''', '''PFB''',)时都会计算它们。它们是只读的,不表示任何特定的内部变量。从组(?g1.PCMD)查询时,对称地具有相同的属性,根据耦合矩阵返回关节属性值的列表。 组运动的运动的目标位置('''MOVE''' or '''CIRCLE''')类似(耦合矩阵)处理。
  
On the other hand, the joint’s position limits ('''PMAX''' and '''PMIN''') are added to the joints. The position limit of the joint and the position limit of the shadow-axis are not related, but independent of whether the coupling matrix is defined or not. The joint position limits are always used when the coupling matrix is defined (COUPLED = 1). In this case, the shadow-axis limits are not used. This is only true for joint and group movements. Single-axis movement (e.g., MOVE A1 100) is limited only by the axis limits, independent of coupling.
+
另一方面,关节的位置限制('''PMAX''''''PMIN''') 被添加到关节中。
 +
关节的位置限制和影轴的位置限制不相关,与是否定义耦合矩阵无关。当定义耦合矩阵(COUPLED = 1)时,总是使用关节位置限制。 在这种情况下,不会使用影轴限制。 这只适用于关节和组运动。单轴运动(例如,MOVE A1 100)仅受轴限制的限制,与耦合无关。
  
Joints represent several axes of a group. Joint movements are actually group movements:
+
关节代表一组中的几个轴。 关节运动实际上是组运动:
 
<pre>
 
<pre>
 
Move-Group = Move-Joint
 
Move-Group = Move-Joint
 
</pre>
 
</pre>
  
Joint movement gives the illusion of moving one physical axis (MOVE J1 100), although several motors could be moving together. The movement is executed according to the specified joint’s movement parameters. For example:
+
关节运动给出移动一个物理轴(MOVE J1 100)的错觉,尽管有几台电机可以在一起移动。根据指定的关节运动参数执行运动。 例如:
 
<pre>
 
<pre>
 
A1.Acc = 100
 
A1.Acc = 100
Line 156: Line 161:
 
</pre>
 
</pre>
  
Is analogous to:
+
类似于:
 
<pre>
 
<pre>
 
J1.Acc = 100
 
J1.Acc = 100
Line 162: Line 167:
 
</pre>
 
</pre>
  
Move-Joint simulates the behavior of moving a single axis by moving a single joint both by the parameters and physical motion. The only difference is that several motors are moving instead of just one. When moving joints, all motor limits within each group axis are checked. The joint movement is a group movement of one joint-coordinate with the group motion parameters copied from the shadow-axis. The following translation rule is true:
+
Move-Joint模拟通过参数和物理运动移动单个关节来移动单个轴的行为。唯一的区别是几台电机正在移动而不是一个电机。关节移动时,检查每个组轴内的所有电机限位。关节运动是一组关节坐标与从影轴复制的组运动参数的组运动。下面的转换规则为真:
  
 
<pre>
 
<pre>
Line 168: Line 173:
 
</pre>
 
</pre>
  
== Robot Models ==
+
== 机器人模型 ==
A robot is defined as a group with a special model type. (See the list of currently available robot models: [[Robot_Model_Table|'''robot_model_table''']])
+
机器人被定义为具有特殊型号类型的组 (请参阅当前可用的机器人型号列表: [[Robot_Model_Table|'''robot_model_table''']])
  
For example:
+
例如:
 
<pre>
 
<pre>
 
COMMON SHARED scara AS GROUP AxNm = a1 AxNm = a2 AxNm = a3 AxNm = a4 Model = '''4'''
 
COMMON SHARED scara AS GROUP AxNm = a1 AxNm = a2 AxNm = a3 AxNm = a4 Model = '''4'''
 
</pre>
 
</pre>
=== Robot Setup ===
+
=== 机器人设置 ===
This automatically defines a robot with a SCARA kinematics model. Contrary to the regular groups that need only the axis to be enabled, you must set the robot parameters and configure them. The robot parameters needing to be set differ from robot to robot. For the SCARA robot, these are:
+
这将自动定义具有SCARA运动学模型的机器人。与仅需要使能轴的通用组相反,必须设置机器人参数并对其进行配置。 不同的机器人需要设置的参数不同。对SCARA机器人, 这些是:
  
* Set all axes with all standard kinematics parameters.
+
* 使用所有标准运动学参数设置所有轴
  
* Define the roll-over properties.
+
* 定义转属性
  
* Set all user-units factors for the entire group: '''VFAC''', '''AFAC''', '''JFAC'''
+
* 设置整个组的所有用户单位因子: '''VFAC''', '''AFAC''', '''JFAC'''
  
* Set segment lengths and joints orientations for each robotic link.
+
* 设置每个机械臂链接的连杆长度和关节角度
  
* Set kinematics of regular groups ('''VELOCITY''', '''ACCELERATION''', '''JERK''', etc.)
+
* 设定通用组的运动学 ('''VELOCITY''', '''ACCELERATION''', '''JERK''', etc.)
  
* Set kinematics of Cartesian motions ('''VTRAN''','''VROT''', etc.)
+
* 设定笛卡尔运动的运动学 ('''VTRAN''','''VROT''', etc.)
  
* Issue [[MC-Basic:CONFIGGROUP|'''CONFIGGROUP''']]
+
* 发布[[MC-Basic:CONFIGGROUP|'''CONFIGGROUP''']]
  
Only after setting all these and successfully executing '''CONFIGGROUP''' can the robot be moved. Otherwise, an error is returned, stating that the group is not configured. The important difference between the regular groups (those with default model value 1) and the robot, is the necessity of executing '''CONFIGGROUP'''. In robot groups, no motion is allowed before the robot is configured.
+
只有在设置好所有这些并且成功执行'''CONFIGGROUP'''之后,机器人才能运动。否则返回错误,表示该组未配置。常规组(默认模型值1)与机器人之间的重要区别是执行'''CONFIGGROUP'''的必要性。 在机器人组中,机器人在配置之前不允许运动。
  
Model value automatically defines the default robot world space descriptor. For model 4 (SCARA), the XYZR (x-y-z-roll) world-space is selected.
+
模型值自动定义默认机器人世界空间描述符。 对于模型4(SCARA),选择XYZR(x-y-z-roll)世界空间。
  
In groups with the robot model defined (model > 1), the translation between joint- and world-space is not simple. Translating joint coordinates into world coordinates is accomplished with '''TOCART''' taking both the robot and given joint coordinates (position variable) as input arguments. The output of this are world coordinates corresponding to the given joint position.
+
在有定义的机器人模型(模型> 1)的组中,关节和世界空间之间不是简单的转换。将“关节坐标转换为世界坐标是用'''TOCART'''来实现的,它将机器人和给定的关节坐标(位置变量)同时作为输入参数。其输出是与给定关节位置对应的世界坐标。
  
The other direction is more complex. It is accomplished with '''TOJOINT''' receiving three input arguments: the robot, the given Cartesian point, and the configuration flag.
+
另一个方向更复杂。 通过'''TOJOINT''' 接收三个输入参数来实现:机器人,给定的笛卡尔点和配置标志。
  
The configuration flag is used to select between the two translation functions. In most robot models, there is more than one joint coordinate description for the same world-space position. The different robot configurations can produce the same world-space positions with different joint-space values. The robot configurations differ from robot to robot. In SCARA, there are only two configurations: lefty (second joint coordinate is negative) and righty (second joint coordinate is positive).
+
配置标志用于在两个翻译功能之间进行选择。在大多数机器人模型中,对于相同的世界空间位置,有多个关节坐标描述。不同的机器人配置可以产生有不同关节空间值但是有相同的世界空间位置。不同的机器人配置不同,在 在SCARA中,只有两个配置:lefty(第二个关节坐标是负的)和righty(第二个关节坐标是正的)。
  
=== Interpolation ===
+
=== 插补 ===
  
For groups with robot models (model > 1), there is an additional moving type: [[MC-Basic:MOVES|'''MOVES''']]. The movement makes a straight path from the starting position to the given target position in the world space. The straightness is tightly-related to the working space. The same path can be straight in the Cartesian working space (XYZ) but curvy in joint space, and vice versa. '''MOVES '''is used solely for groups from type robot and cannot be used in regular groups.
+
对于有机器人型号(型号> 1)的组,还有一个额外的运动类型:[[MC-Basic:MOVES|'''MOVES''']]。运动从起始位置到世界空间中给定的目标位置是一条直线。平直度与工作空间紧密相关。 相同的路径在笛卡尔工作空间(XYZ)中可以是直的,但在关节空间中弯曲,反之亦然。 '''MOVES '''仅用于机器人类型的组,不能在通用组中使用。
  
Straight line motion refers to motions that are straight lines in world-space. In groups with no robot model (model=1), all motions produced with '''MOVES''' are straight-line motions in joint-space. In regular linearly-dominant groups, most of their axes are linear. As the world-space and joint-space are identical, '''MOVES''' executes a straight line in both joint- and world-space. The target position can be given both in world- and joint-space coordinates. The movement differs from joint interpolation ('''MOVE'''). Instead of joint-space kinematics parameters used in regular groups, the world-space parameters for velocity, acceleration and jerk are used. These parameters are available in two forms:, one for the translational part of the motion and one for the rotational part (orientation).
+
直线运动是指在世界空间中是直线的运动。在没有机器人模型(模型= 1)的组中,使用'''MOVES'''生成的所有运动是关节空间中的直线运动。在通用的线性主导组中,它们的大多数轴是线性的。由于世界空间和关节空间是相同的, '''MOVES'''在关节空间和世界空间中执行一条直线。目标位置可以在世界和关节空间坐标中给出。运动与关节插值('''MOVE''')不同。 使不是用常规组中使用的关节空间运动学参数,而是使用速度,加速度和加加速度的世界空间参数。这些参数有两种形式:一种用于运动的平移部分,另一种用于旋转部分(方向)。
  
When world-space has both position and orientation components, the straight-line motion includes interpolation on both position and orientation. Because these two are intrinsically different objects, two different parameters are needed: one for the translation (pure position interpolation): '''VELOCITYTRANS''', '''ACCELERATIONTRANS''', '''JERKTRANS'''<nowiki>; and one for the orientation (rotation interpolation): </nowiki>'''VELOCITYROT''', '''ACCLERATIONROT''', '''JERKROT'''. These parameter are used only for Cartesian interpolation ('''MOVES''' and '''CIRCLE'''). These parameters have no influence on joint interpolated motion ('''MOVE''') because it is not a world-space interpolation.
+
当世界空间具有位置和方向分量时,直线运动包括位置和方向上的插值。 因为这两个在本质上不同的对象,所以需要两个不同的参数:一个用于平移(纯位置插值): '''VELOCITYTRANS''', '''ACCELERATIONTRANS''', '''JERKTRANS'''<nowiki>; 另一个用于旋转(旋转插值): </nowiki>'''VELOCITYROT''', '''ACCLERATIONROT''', '''JERKROT'''. 这些参数仅用于笛卡尔插值('''MOVES''' and '''CIRCLE''')。这些参数对关节插值'''MOVE''')没有影响,因为它不是世界空间插值。
  
The two sets of parameters define the straight line motion. Which parameter is dominant for the motion depends on the movement. If most of the movement is in translational position change and the orientation change is much smaller, the translational part is taken. Conversely, the rotational parameters define the movement.
+
两组参数定义了直线运动。 哪个参数是运动的主要因素取决于运动。 如果大部分运动都处于平移位置的变化,方向的变化要小得多,则平移部分被采用。 相反,旋转参数定义直线运动。
  
  
Line 216: Line 221:
 
|-
 
|-
 
|
 
|
[[Image:Axsystems;UserManual-1-Interpolation.png|caption|600px]]<br>
+
下图显示了在关节空间中显示的'''MOVES '''<br>
The following graph shows '''MOVES '''as seen in joint-space.
+
[[Image:Axsystems;UserManual-1-Interpolation.png|caption|600px]]
 
|
 
|
[[Image:Axsystems;UserManual-2-Interpolation.png|caption|600px]]<br>
+
下图显示了在世界空间中显示的'''MOVES '''<br>
The following graph shows '''MOVES '''as seen in world-space.
+
[[Image:Axsystems;UserManual-2-Interpolation.png|caption|600px]]
 
|-
 
|-
 
|
 
|
[[Image:Axsystems;UserManual-3-Interpolation.png|caption|600px]]<br>
+
下图显示了关节空间中显示的'''MOVES '''<br>
The following graph shows '''MOVE '''as seen in joint-space.
+
[[Image:Axsystems;UserManual-3-Interpolation.png|caption|600px]]
 
|
 
|
[[Image:Axsystems;UserManual-4-Interpolation.png|caption|600px]]<br>
+
下图显示了世界空间中显示的'''MOVES '''<br>
The following graph shows '''MOVES '''as seen in world-space.
+
[[Image:Axsystems;UserManual-4-Interpolation.png|caption|600px]]
 
|}
 
|}
  
  
  
There are four commands to make point-to-point movement in robot groups. There are two commands to interpolate the motion ('''MOVE''' and '''MOVES''') and two commands to define the target point ('''JOINT''' and '''LOCATION'''). The total combination of these gives four options.
+
有四个命令用于在机器人组中进行点对点移动。由两个命令用于插值运动('''MOVE''''''MOVES''') ,两个命令来定义目标点('''JOINT''''''LOCATION'''). 它们的总体组合提供了四个选项。
  
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
 
| style="border-top:none;border-bottom:0.039cm double #000000;border-left:none;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"|  
 
| style="border-top:none;border-bottom:0.039cm double #000000;border-left:none;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"|  
| style="border-top:0.039cm double #000000;border-bottom:0.039cm double #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''LOCATION target'''
+
| style="border-top:0.039cm double #000000;border-bottom:0.039cm double #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''位置目标'''
| style="border-top:0.039cm double #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''JOINT target'''
+
| style="border-top:0.039cm double #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''关节目标'''
  
 
|-
 
|-
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''Cartesian-Interpolation'''
+
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''笛卡尔插值'''
 
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.018cm solid #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVES #{400,400,0,0}
 
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.018cm solid #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVES #{400,400,0,0}
 
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVES {45,45,0,0}
 
| style="border-top:0.039cm double #000000;border-bottom:0.018cm solid #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVES {45,45,0,0}
  
 
|-
 
|-
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''Joint-Interpolation'''
+
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.039cm double #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| '''关节插值'''
 
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVE <nowiki>#{400,400,0,0}</nowiki>
 
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVE <nowiki>#{400,400,0,0}</nowiki>
 
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVE {45,45,0,0}
 
| style="border-top:0.018cm solid #000000;border-bottom:0.039cm double #000000;border-left:0.018cm solid #000000;border-right:0.039cm double #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| MOVE {45,45,0,0}
Line 251: Line 256:
  
  
=== Contouring ===
+
=== 等值线 ===
  
Contouring connects different motions by defining the '''final velocity''' for each movement. This way, the motion does not stop at the segment. It is continued with the next motion. This method is applicable in one-axis applications, but has several drawbacks that become more prominent in multi-axis applications:
+
轮廓通过为每个运动定义“最终速度”“来连接不同的运动。 这样,运动不会在线段停止,继续下一个运动。 该方法适用于单轴应用,但在多轴应用中具有几个缺点:
  
* The angle between the movements' direction must be zero. Otherwise, a jump in velocity occurs.
+
* 运动方向之间的角度必须为零。 否则,会发生速度跳跃。
* It is not possible to connect arc with linear segments without a jump in acceleration.
+
* 不能在没有加速度跳跃的情况下将圆弧与线性段连接.
* You must calculate the achievable final velocities on each segment to stop after the last segment.
+
* 您必须计算每个段上可达到的最终速度,以在最后一段之后停止.
  
== Working Envelope ==
+
== 工作包络 ==
Robot working space is determined by the position limits of each joint. The working space (all reachable positions) is limited by the working envelope of the robot. From the outer side, it is limited by the arc made rotating the first joint with a fully stretched arm (j2.pcmd=0). This is the maximum radius of reachable points ('''RMAX'''). It is an internal value computed each time the robot is configured ('''CONFIGGROUP'''). Points given outside this radius are rejected with the error message, ''Point Too Far''.
+
机器人工作空间由每个关节的位置限制决定。工作空间(所有可达到的位置)受到机器人工作范围的限制。从外侧,受到完全伸展臂(j2.pcmd = 0)后第一关节旋转的弧限制。 这是可达点的最大半径('''RMAX''')。 它是每次配置机器人时计算的内部值 ('''CONFIGGROUP''')。在该半径之外给出的点将被错误消息拒绝, ''Point Too Far''.
  
The other limit is the small circle with the radius ('''RMIN'''). This circle is obtained by rotating the first joint with a maximally-folded second joint (not more then 180 degrees). This radius is additionally enlarged by the robot's base size and the attached end-effector mechanism to prevent the robot from colliding with itself. The minimal working envelope radius ('''RMIN''') is available to the user (contrary to '''RMAX'''). It is recommended that this value be set for each application according to the physical setup of the robot. If a point is given inside '''RMIN''', an error message is returned. For example:
+
另一个极限是半径为('''RMIN''')的小圆。 通过以最大折叠的第二关节(不超过180度)后旋转第一关节来获得该圆。另外该半径由机器人的基座尺寸和连接的末端执行器机构进一步扩大,以防止机器人自身发生碰撞。 最小工作包络半径('''RMIN''')可供用户使用(与 '''RMAX'''相反)。建议根据机器人的物理设置为每个应用程序设置此值。如果在'''RMIN'''中给出了一个点,则返回错误信息。 例如:
  
 
[[Image:Axsystems;UserManual-5-WorkingEnvelope.png|caption]]
 
[[Image:Axsystems;UserManual-5-WorkingEnvelope.png|caption]]
Line 281: Line 286:
 
</pre>
 
</pre>
  
== Robot Configurations ==
+
== 机器人配置 ==
In robot models, there are several joint points representing the same robot end-effector position for each location point. To uniquely select between different joint coordinates, there are configuration flags.
+
在机器人模型中,对每个位置点有几个关节点可以表示相同的机器人末端执行器位置。要在不同的关节坐标之间进行唯一选择,要有配置标志。
  
For SCARA kinematics, there is only one configuration flag available: the arm flag. It indicates either lefty (1) (j2.pcmd > 0) or righty (2) (j2.pcmd > 0). A value of 1 (lefty) means that the joint coordinates having a positive second joint are taken to represent the given location. The current configuration of the robot is returned by '''ARMFBK'''. The value can be 1 or 2, depending on the position feedback value of the second joint. '''ARMFBK''' determines the movement's target position. It can be automatic (0), lefty(1) or righty(2). When a movement with a Cartesian target position is given, the joint coordinates of the target position are selected according to '''ARMFBK'''. If it is zero (automatic), the current robot configuration is used ('''ARMFBK''').
+
对SCARA机器人运动学,只有一个配置标志可用,机械臂标志。它表示lefty (1) (j2.pcmd > 0)righty (2) (j2.pcmd > 0)。 值为1(lefty)表示具有正值的第二关节的关节坐标被用于表示给定位置。 '''ARMFBK'''返回机器人的当前配置。该值可以是1或2 ,取决于第二关节的位置反馈值。'''ARMFBK'''决定运动的目标位置。它可以是自动(0),lefty(1)或righty(2。当给出了具有笛卡尔目标位置的运动时,根据 '''ARMFBK'''选择目标位置的关节坐标。 如果为零(自动),则使用当前的机器人配置('''ARMFBK''')。
  
PUMA models traditionally use three configuration flags (arm,elbow and wrist – '''ACMD''', '''ECMD''', '''WCMD''').
+
PUMA模型习惯上使用三个配置标志(手臂,肘和腕 - '''ACMD''', '''ECMD''', '''WCMD''')。
  
Another use of configuration flags is in the conversion function, '''TOJOINT'''. This function translates the given location point into joint point. It receives two arguments. The first is the location variable and the second is the configuration flag.
+
另一种使用配置标志的是转换功能'''TOJOINT'''。 该功能将给定的位置点转换为关节点。 它接收两个参数。 第一个是位置变量,第二个是配置标志。
  
= Points =
+
= =
A point is a data type used for storing a list of doubles in a variable. The main advantage of points is that you can directly call the whole vector without having to access every element of it. There are two subt-ypes of the point data type: LOCATION and JOINT. Using both point types in the same expression results in a type mismatch translation error. Type casting between point types requires the usage of special system functions '''TOJOINT''' and '''TOCART'''.
+
一个点是用于存储变量中双精度列表的数据类型。 点的主要优点是您可以直接调用整个向量,而无需访问它的每个元素。 点数据类型有两个子类型:LOCATION和JOINT。 在同一表达式中使用两个点类型会导致类型不匹配转换错误。 点类型之间的类型转换需要使用特定的系统函数'''TOJOINT''' '''TOCART'''
  
== Declaration ==
+
== 声明==
  
A point must be declared before you can use it. The declaration of points is defined according to the type of robot (XYZR, XYZ, etc.). The softMC enables the declaration of point variables, which can be scalar or arrays. Point arrays may have up to 10 dimensions. Point variables are designed to hold a list of 2 to 10 double-type coordinates. A point variable is declared in relation to a robot type. Therefore, declaring a point variable must include the name of a valid robot type. The dimension of the point is the same as the dimension of the type of robot. The syntax is:
+
必须先声明点然后才能使用它。点的声明根据机器人的类型(XYZR,XYZ等)定义。softMC启用了点变量的声明,可以是标量或数组。 点数组最多可以有10个维度。点变量被设计为保存2到10个双类型坐标的列表。点变量的声明与机器人类型有关。因此,声明点变量必须包含有效的机器人类型名称。点的维数与机器人类型的维数相同。格式是:
  
 
<nowiki>(COMMON SHARED|DIM {SHARED}) <</nowiki>''variable_name''<nowiki>> AS JOINT OF <</nowiki>''robot_type''><nowiki>(COMMON SHARED|DIM {SHARED}) <</nowiki>''variable_name''<nowiki>> AS LOCATION OF <</nowiki>''robot_type''>
 
<nowiki>(COMMON SHARED|DIM {SHARED}) <</nowiki>''variable_name''<nowiki>> AS JOINT OF <</nowiki>''robot_type''><nowiki>(COMMON SHARED|DIM {SHARED}) <</nowiki>''variable_name''<nowiki>> AS LOCATION OF <</nowiki>''robot_type''>
  
<nowiki><</nowiki>''robot_type''> can be:
+
<nowiki><</nowiki>''robot_type''> 可以是:
  
 
XYZR – Three cartesian axes + rollXY – two axes XY tableXYZ – three axes XYZ system
 
XYZR – Three cartesian axes + rollXY – two axes XY tableXYZ – three axes XYZ system
  
For example:
+
例子:
 
<pre>
 
<pre>
 
Common Shared JointXYZ As Joint Of XYZ  
 
Common Shared JointXYZ As Joint Of XYZ  
Line 311: Line 316:
 
</pre>
 
</pre>
  
== Variables ==
+
== 变量 ==
Two new variable types are defined for point variables in the translator: LOCATION and JOINT. For the translator, a point variable differs from any other type of variable (Long, Double, etc.) only by its type. A point variable is inserted to the expression tree as a variable leaf. The variable leaf retains data related to the point variable, including its context (system, program or local), its offset (taken from the symbol table), and its type (LOCATION or JOINT, also taken from the symbol table).
+
在点变量的解释器中定义了两个新的变量类型: LOCATION 和JOINT。对转换,点变量仅由它的类型,不同于任何其他类型的变量(Long, Double等)。 点变量作为变量叶插入到表达式树中。变量叶保留与点变量相关的数据,包括其上下文(系统,程序或本地),其偏移(取自符号表)及其类型(LOCATION或JOINT,也取自符号表)。
  
=== Declaration ===
+
=== 声明 ===
When declaring a point variable, data corresponding to this variable is entered into the correct symbol table (depending on whether it is a system variable, a program variable, or a local variable). A point variable is defined in the symbol table by its name, its type (LOCATION or JOINT) and an offset of the data segment. Each offset of the data segment corresponds to the address of the point variable. The robot type string is sent to a special function that gives the robot-type value and the number of coordinates.
+
当声明一个点变量时,对应于该变量的数据被输入到正确的符号表中(取决于它是系统变量,程序变量还是局部变量)。点变量在符号表中由其名称,其类型(LOCATION或JOINT)和数据段的偏移量定义。数据段的每个偏移对应于点变量的地址。 机器人类型字符串被发送到特殊的函数,这个函数给出机器人类型值和坐标数量。
  
== Constant Points ==
+
== 常量点 ==
Constant points are location or joint vectors with an undefined robot type. The constant point’s subtype is defined by the shape of its brackets (#{ } for location, { } for joint). In the translator, each of these two vector types is considered an expression. Each expression-related command and manipulation (such as print commands, mathematical operators, etc.) can be applied for the joint and location vectors.
+
常量点是未定义机器人类型的位置或关节向量。常量点的子类型由括号的类型定义(#{}用于位置,{}用于关节)。在解释器中,这两个向量类型中的每一个被认为是一个表达式。 每个表达式相关的命令和操作(如打印命令,数学运算符等)可以应用于关节和位置向量。
  
While executing a vector expression, each vector element is pushed separately into the stack as a double type expression (by executing the left side of the JOINT or LOCATION node). Long type vector elements are converted to double type expressions (in the coordinate node) after the execution of the expression at the right side of each coordinate node).
+
在执行向量表达式时,每个向量元素作为双重表达式(通过执行JOINT或LOCATION节点的左侧)被单独地压入堆栈。在执行每个坐标节点右侧的表达式之后,Long类型向量元素将转换为double类型表达式(在坐标节点中)。
  
Execution of the right side of the JOINT or LOCATION node results in pushing the number of the vector elements into the stack (as a long type constant). The point’s subtype (determined by the shape of the vector’s brackets) is pushed to the stack (as a long type constant) by executing the third side of the JOINT/LOCATION node.
+
执行JOINT或LOCATION节点的右侧导致将向量元素的数量推入堆栈(作为Long型常量)。通过执行JOINT / LOCATION节点的第三侧,将点的子类型(由向量括号的类型确定)推送到堆栈(作为Long型常量)。
  
== Vectors ==
+
== 向量 ==
Vectors are actually constant points, at which a list of 2 to 10 coordinates is written between curly brackets {}. In location vectors, the curly brackets are preceded by the # sign. A coordinate can be any type of expression (constant, variable, mathematical expression, function call, etc.) of long or double type. Long type coordinates are automatically converted to doubles. Unlike point variables, vectors are not related to robot types, and characterized merely by their size (number of coordinates).
+
向量实际上是常数点,其中2到10个坐标的列表写在大括号{}之间。 在位置向量中,大括号前面加上#号。坐标可以是long或double类型的任何类型的表达式(常量,变量,数学表达式,函数调用等)。Long型坐标自动转换为double,与点变量不同,向量与机器人类型无关,仅由其大小(坐标数)表征。
  
<nowiki>{<</nowiki>''expression_1''<nowiki>>, …, <</nowiki>''expression_n''>} ‘ Joint vector
+
<nowiki>{<</nowiki>''expression_1''<nowiki>>, …, <</nowiki>''expression_n''>} ‘ 关节向量
  
<nowiki>#{<</nowiki>''expression_1''<nowiki>>, …, <</nowiki>''expression_n''>} ‘ Location vector
+
<nowiki>#{<</nowiki>''expression_1''<nowiki>>, …, <</nowiki>''expression_n''>} ‘位置向量
  
Point variables and vectors appearing in the same expression must match in type (joint or location) and size.
+
出现在相同表达式中的点变量和向量必须与类型(关节或位置)和数目相匹配匹配。
 
<pre>
 
<pre>
 
Common Shared JointXYZ As Joint Of XYZ  
 
Common Shared JointXYZ As Joint Of XYZ  
JointXYZ = #{1.5, 2.8, 3} -->  Error type mismatch
+
JointXYZ = #{1.5, 2.8, 3} -->  错误 类型不匹配
PRINT {20, 6.7, 23} + #{8.43, 2, 0} --> Error type mismatch
+
PRINT {20, 6.7, 23} + #{8.43, 2, 0} --> 错误 类型不匹配
  
JointXYZ = {2, 6} -->  Error size mismatch
+
JointXYZ = {2, 6} -->  错误 数目不匹配
PRINT {20, 6.7, 23} - {5, 4, 22.9, 31} --> Error size mismatch
+
PRINT {20, 6.7, 23} - {5, 4, 22.9, 31} --> 错误 数目不匹配
 
</pre>
 
</pre>
  
== Properties ==
+
== 属性 ==
Some group properties are points. There are several read-only properties of joint- ('''VELOCITYFEEDBACK''', '''POSITIONCOMMAND''', '''DEST_JOINT'''), and location-type ('''DEST''', '''HERE''', '''SETPOIN'''T). There are also some location-type read-write properties, like '''TOOL''', '''BASE''', etc.
+
一些组属性是点。 有一些关节只读属性('''VELOCITYFEEDBACK''', '''POSITIONCOMMAND''', '''DEST_JOINT'''), 和位置类型('''DEST''', '''HERE''', '''SETPOIN'''T). 还有一些位置类型的读写属性,如 '''TOOL''', '''BASE'''等。
  
As in point variables, the robot type also characterizes point properties.Point properties appearing in expressions in a mixture with other points must match in type and robot type to point properties and variables, or in type and size to vectors.
+
与点变量一样,机器人类型也点属性的特征。出现在表达式中,与其他点混合在一起的点属性必须在类型和机器人类型中指向属性和变量,或者与向量的类型和数目相匹配。
 
<pre>
 
<pre>
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
 
Common Shared PointXYZR As Joint Of XYZR
 
Common Shared PointXYZR As Joint Of XYZR
 
Dim Shared PointXYZ As Joint Of XYZ
 
Dim Shared PointXYZ As Joint Of XYZ
PointXYZR = SCARA.SetPoint --> Error type mismatch (Setpoint returns a location)
+
PointXYZR = SCARA.SetPoint --> 错误 类型不匹配 (Setpoint returns a location)
PointXYZ = SCARA.VelocityFeedback --> Error robot type mismatch
+
PointXYZ = SCARA.VelocityFeedback --> 错误 机器人类型不匹配
SCARA.Base = #{56.5, -104.7, -90.5} --> Error size mismatch
+
SCARA.Base = #{56.5, -104.7, -90.5} --> 错误 数目不匹配
 
</pre>
 
</pre>
  
== Point Dimension ==
+
== 点维度 ==
You do not define the size of the vector data type at the declaration of it, but you define the type of robot related to the point. This gives the point a dimension.
+
您在声明时未定义向量数据类型的数目,但您可以定义与该点相关的机器人的类型。 这给出了一个维度。
  
== Point Assignment ==
+
== 点分配 ==
Point assignment uses the following syntax:
+
点分配使用以下格式:
  
 
<nowiki><</nowiki>''variable_name''<nowiki>> = (<</nowiki>''expr1''<nowiki>>,<</nowiki>''expr2''<nowiki>>,<</nowiki>''expr3''<nowiki>>,…,<</nowiki>''expr''n>)() = #{} for location() = {} for joint
 
<nowiki><</nowiki>''variable_name''<nowiki>> = (<</nowiki>''expr1''<nowiki>>,<</nowiki>''expr2''<nowiki>>,<</nowiki>''expr3''<nowiki>>,…,<</nowiki>''expr''n>)() = #{} for location() = {} for joint
  
The expression can be a constant or other vector variable of the same robot type, but the size of the right side of the expression must equal the left side. If you try to assign a point with a point of other robot type, an error is received.
+
表达式可以是同一机器人类型的常量或其他向量变量,但表达式右侧的大小必须等于左侧。 如果您尝试使用其他机器人类型的点来分配点,则会收到错误。
  
== Single Coordinate Point Assignment ==
+
== 单个坐标点分配 ==
The syntax for assigning a single coordinate of a point is:
+
分配点的单个坐标的格式:
  
 
<nowiki><</nowiki>''variable_name''<nowiki>>{<</nowiki>''expression''<nowiki>>} = <</nowiki>''expression''>
 
<nowiki><</nowiki>''variable_name''<nowiki>>{<</nowiki>''expression''<nowiki>>} = <</nowiki>''expression''>
  
== Point Query ==
+
== 点查询 ==
The syntax for querying a point is:
+
点查询的格式是:
  
 
<nowiki>?<</nowiki>''variable_name''>
 
<nowiki>?<</nowiki>''variable_name''>
  
== Single Coordinate Point Query ==
+
== 单坐标点查询 ==
The syntax for querying a single coordinate of a point:
+
用于查询点的单个坐标的格式:
  
 
<nowiki>?<</nowiki>''variable_name''<nowiki>>{<</nowiki>''expression''>}
 
<nowiki>?<</nowiki>''variable_name''<nowiki>>{<</nowiki>''expression''>}
  
'''Example 1'''
+
'''示例 1'''
 
<pre>
 
<pre>
Common shared P1 as location of XYZR 'declaration of a vector (global)
+
Common shared P1 as location of XYZR '声明向量 (全局)
P1 = #{1,2,3,4} 'assign the whole vector
+
P1 = #{1,2,3,4} '分配整个向量
P1 = #{1,2} 'return a translation error
+
P1 = #{1,2} '返回解析错误
?P1 'read the whole vector
+
?P1 '读整个向量
?P1{2} 'read the second coordinate of the vector
+
?P1{2} '读取向量的第二个坐标
 
</pre>
 
</pre>
  
'''Example 2'''
+
'''示例 2'''
 
<pre>
 
<pre>
<nowiki>Common shared P2[5] as location </nowiki>XYZ 'declare a global array of vectors
+
<nowiki>Common shared P2[5] as location </nowiki>XYZ '声明全局数组向量
<nowiki>P2[1] = #{1,2,3} </nowiki>'assign the whole vector
+
<nowiki>P2[1] = #{1,2,3} </nowiki>'分配整个向量
<nowiki>P2[2] = #{5,2} </nowiki>'return a translation error
+
<nowiki>P2[2] = #{5,2} </nowiki>'返回解析错误
<nowiki>?P2[1] </nowiki>'read the whole vector
+
<nowiki>?P2[1] </nowiki>'读整个向量
<nowiki>?P2[2]{2} </nowiki>'read the second value of the vector
+
<nowiki>?P2[2]{2} </nowiki>'读取向量的第二个坐标
 
</pre>
 
</pre>
  
== Operators ==
+
== 操作 ==
Like any other data type, you can use operators for points. The system only defines the equal operator (plus, minus, multiplication and division). Operations between points can only be performed between points of the same type and robot type (or size). All operations can also be performed between points and long or double type expressions.
+
像任何其他数据类型一样,点可以使用运算符。 系统只定义相等运算符(加,减,乘除)。点之间的操作只能在相同类型和机器人类型(或大小)的点之间执行。所有操作也可以在点和long或double类型表达式之间执行。
  
=== Assignment ===
+
=== 分配 ===
Point variables and read-write properties can be assigned by point variables, vectors and point properties compatible in type and size (or robot type).
+
点变量和读写属性可以通过类型和大小(或机器人类型)兼容的点变量,向量和点属性来分配。
  
=== Query ===
+
=== 查询 ===
Point variables, properties and vectors return a value, so they can all be queried through printing or assignment into a compatible point variable or read-write property.
+
点变量,属性和向量返回一个值,因此它们都可以通过打印或赋值到兼容点变量或读写属性来查询。
 
<pre>
 
<pre>
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
Line 418: Line 423:
 
</pre>
 
</pre>
  
=== Plus ===
+
=== ===
The point plus operator is used like any other data type. It adds each element of the first point with each element of the second point. The result is a point.
+
点加运算符像任何其他数据类型一样使用。它将第一个点的每个元素与第二个点的每个元素相加。 结果是一个点。
 
<pre>
 
<pre>
 
?{1,2}+{2,4}
 
?{1,2}+{2,4}
Line 425: Line 430:
 
</pre>
 
</pre>
  
=== Minus ===
+
=== ===
The point minus operator is used like any other data type. It subtracts each element of the first point with each element of the second point. The result is a point.
+
点减运算符像任何其他数据类型一样使用。 它用第二个点的每个元素减去第一个点的每个元素。 结果是一个点。
 
<pre>
 
<pre>
 
?{1,2}-{2,4}  
 
?{1,2}-{2,4}  
Line 432: Line 437:
 
</pre>
 
</pre>
  
=== Multiplication ===
+
=== ===
The point multiplication operator is used like any other data type. It multiplies each element of the first point with a number. You can only multiply a point with a single number (one-dimensional number). The result is a point.
+
点乘法运算符像任何其他数据类型一样使用。 它将第一个点的每个元素与一个数字相乘。 您只能将点乘以单个数字(一维数字)。 结果是一个点。
 
<pre>
 
<pre>
 
?2*{2,4}  
 
?2*{2,4}  
Line 439: Line 444:
 
</pre>
 
</pre>
  
=== Division ===
+
=== ===
The point division operator is used like any other data type. It divides each element of the first point with a number. You can only divide a point with a single number (one-dimensional number). The result is a point.
+
点除运算符像任何其他数据类型一样使用。 它将第一个点的每个元素除以一个数字。 您只能用一个数字(一维数字)来划分一个点。 结果是一个点。
 
<pre>
 
<pre>
 
?{2,4}/2  
 
?{2,4}/2  
Line 448: Line 453:
 
</pre>
 
</pre>
  
=== Compound (:) ===
+
=== 复合 (:) ===
Is an operator specific for points, which should be operated between two locations of the same size (or robot type).
+
是一个特定于点的操作,它应该在相同大小的两个位置点(或机器人类型)之间操作。
 
<pre>
 
<pre>
 
? #{-56.5 , -104.7 , 89.5} : #{ 0.0, -104.7 , -0.5}
 
? #{-56.5 , -104.7 , 89.5} : #{ 0.0, -104.7 , -0.5}
Line 455: Line 460:
 
</pre>
 
</pre>
  
=== Limitations ===
+
=== 限制 ===
MOD (modulus), ^ (power), logic and bitwise operators cannot be used for points.
+
MOD (模数), ^ (), 逻辑和按位运算符不能用于点。
  
Points cannot be used as condition in flow control statements and event definitions.
+
点不能用作流控制语句和事件定义中的条件。
  
Points cannot be recorded.
+
点无法记录。
  
== Points in Functions ==
+
== 函数中的点 ==
Point variables can be passed to functions and subroutines both by reference and by value. An entire array of points can also be passed (by reference) to a function or subroutine. On the other hand, point properties and vectors can only be passed by value. Points can also serve as return values of functions. However, the point type and size (or robot type) of an argument or a return value must match function declaration.
+
点变量可以通过引用和值传递给函数和子程序。整个点数组也可以被传递(通过引用)到一个函数或子程序。另一方面,点属性和向量只能通过值传递。点也可以作为函数的返回值。但是,参数或返回值的点类型和大小(或机器人类型)必须与函数声明相匹配。
  
=== Passing By Value And Reference ===
+
=== 值传递和引用 ===
A point can be passed by value and by reference like any other data type. For example:
+
点可以像任何其他数据类型一样通过值和引用传递。 例如:
 
<pre>
 
<pre>
 
Program
 
Program
Line 478: Line 483:
 
</pre>
 
</pre>
  
This program assigns P1 to {1, 2, 3, 4} and prints {1, 2, 3, 4} as output. When a point is passed by reference or value, you can only pass a point of the same robot type to ''X''. Otherwise, you receive a translation error.
+
该程序将{1,2,3,4}分配给P1并打印{1,2,3,4}作为输出。 当一个点通过引用或值传递时,您只能将相同机器人类型的点传递到''X''。否则,您会收到一个解析错误。
  
'''Example 1'''
+
'''示例 1'''
 
<pre>
 
<pre>
 
Program
 
Program
Line 492: Line 497:
 
</pre>
 
</pre>
  
'''Example 2'''
+
'''示例 2'''
 
<pre>
 
<pre>
 
Program
 
Program
Line 504: Line 509:
 
</pre>
 
</pre>
  
=== Returning Point From Function ===
+
=== 函数返回点 ===
A function can return a point variable like any other data type. For example:
+
函数可以像任何其他数据类型一样返回点变量。例如:
 
<pre>
 
<pre>
 
Dim A as location of XYZR
 
Dim A as location of XYZR
 
Program
 
Program
 
Move G1 MyFunc(1) vcruise=299
 
Move G1 MyFunc(1) vcruise=299
     --> this will be OK if G1 is of XYZR robot type.
+
     --> 如果G1是XYZR机器人类型,这将是正确的
 
End Program
 
End Program
  
Line 518: Line 523:
 
</pre>
 
</pre>
  
== Motion Commands ==
+
== 运动命令 ==
Some motion commands use point nodal parameters when applied on groups. For example: '''CIRCLE''', '''MOVE''' and '''MOVES'''.
+
一些运动命令在组上应用时使用点的节点参数。例如: '''CIRCLE''', '''MOVE''' and '''MOVES'''.
  
Some nodal parameters can be assigned with both point types (LOCATION and JOINT), like '''CIRCLECENTER''', '''CIRCLEPOINT''' and the target positions of '''MOVE '''and '''MOVES'''. Other nodal parameters can accept only location points, like TOOL, BASE, etc. Assign all nodal parameters with points compatible in robot type or size to the group.
+
一些节点参数可以分配两种点类型(LOCATION and JOINT),'''CIRCLECENTER''', '''CIRCLEPOINT'''以及'''MOVE ''''''MOVES'''的目标位置。其他节点参数只能接受位置点,如TOOL,BASE等。将所有节点参数与机器人类型或大小兼容的点分配给组。
 
<pre>
 
<pre>
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
 
Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
 
Common Shared JointXYZ As Joint Of XYZ
 
Common Shared JointXYZ As Joint Of XYZ
MOVE SCARA JointXYZ    --> Error robot type mismatch
+
MOVE SCARA JointXYZ    --> 错误 机器人类型不匹配
 
CIRCLE SCARA Angle = 180 CircleCenter = #{350, 500, -80}
 
CIRCLE SCARA Angle = 180 CircleCenter = #{350, 500, -80}
  --> Error size mismatch
+
  --> 错误 数目不匹配
 
MOVES SCARA #{-22, 503.8, -8.3, 149} Base = SCARA.Dest_Joint
 
MOVES SCARA #{-22, 503.8, -8.3, 149} Base = SCARA.Dest_Joint
  --> Error – type mismatch
+
  --> 错误 –类型不匹配
 
</pre>
 
</pre>
  
  
== Point As An Expression ==
+
== 点作为表达式 ==
Points properties can be stored as a point or can be compared as a point. For example:
+
点属性可以存储为一个点或者作为一个点进行比较。 例如:
 
<pre>
 
<pre>
 
Dim A as Joint of XYZR
 
Dim A as Joint of XYZR
 
A = {1,2,3,4}
 
A = {1,2,3,4}
 
A = G1.Pcmd
 
A = G1.Pcmd
A = G2.Pcmd --> returns a translation error if G2 is not of XYZR type.
+
A = G2.Pcmd --> 如果G2不是XYZR类型,则返回翻译错误。
 
</pre>
 
</pre>
  
=== Functions ===
+
=== 函数 ===
The following functions are defined:
+
定义了以下函数:
 
<pre>
 
<pre>
 
<nowiki><</nowiki>XYZR location<nowiki>> = TOCart (<</nowiki>group<nowiki>>, <</nowiki>XYZR JOINT>)
 
<nowiki><</nowiki>XYZR location<nowiki>> = TOCart (<</nowiki>group<nowiki>>, <</nowiki>XYZR JOINT>)
Line 551: Line 556:
 
</pre>
 
</pre>
  
Where for TOJOINT instruction the number and type of configuration flags depend on each robot type. Note that robot properties ARMCMD, ECMD, WCMD have all three values(0,1,2) where 0 is reserved for AUTO option. The configuration bits however have only two values (0,1).
+
在TOJOINT指令中,配置标志的数量和类型取决于每种机器人类型。注意,机器人属性ARMCMD,ECMD,WCMD都有三个值(0,1,2),其中0被保留用于AUTO选项。但是配置位只有两个值(0,1)。
  
for SCARA robot : Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1- Righty(armcmd = 2)
+
对SCARA机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1- Righty(armcmd = 2)
  
for PUMA robot : Arm ( Bit 0): value = 0 - Lefty(armcd = 1) value = 1 - Righty(armcmd = 2)
+
对PUMA机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1) value = 1 - Righty(armcmd = 2)
  
 
Elbow ( Bit 1):value = 0 - Below(ecmd = 1) value = 1 - Above(ecmd = 2)
 
Elbow ( Bit 1):value = 0 - Below(ecmd = 1) value = 1 - Above(ecmd = 2)
Line 561: Line 566:
 
Wrist ( Bit 2): value = 0 - Noflip (wcmd = 1)  value = 1 - Flip (wcmd = 2)
 
Wrist ( Bit 2): value = 0 - Noflip (wcmd = 1)  value = 1 - Flip (wcmd = 2)
  
for TRAVERSE-ARM robot: Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1 - Righty(armcmd = 2)
+
对TRAVERSE-ARM机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1 - Righty(armcmd = 2)
  
for DELTA, SCISSORS, … and other robots that have no configuration flags these fields are not used.  
+
对于没有配置标志的DELTA,SCISSORS,...和其他机器人,这些字段不被使用。
  
The configuration flag argument of the tojoint is defined as:
+
tojoint的配置标志参数定义为:
  
 
<math>\mathit{cfg}=\sum_{i=0,1,2} \left (value_{i} - 1 \right )\cdot 2^{i}</math>
 
<math>\mathit{cfg}=\sum_{i=0,1,2} \left (value_{i} - 1 \right )\cdot 2^{i}</math>
  
=== SAVE/LOAD ===
+
=== 加载/保存 ===
Each global variable can be stored in a file. The variable and its value are stored in same syntax as it is defined in the program. You can select a data-type to be stored. If a data-type is selected, the SAVE command stores only global variables of that data type. If file with same name already exist its extension is renamed to *.bak and new file is created. Loading the file overwrites the values of the saved global variables. You can save all the points related to some type of robot. For example:
+
每个全局变量都可以存储在一个文件中。变量及其值与程序中定义的格式相同。 您可以选择要存储的数据类型。 如果选择了数据类型,则SAVE命令仅存储该数据类型的全局变量。如果具有相同名称的文件已存在,则其扩展名将重命名为* .bak,并创建新文件。加载文件将覆盖保存的全局变量的值。 您可以保存与某些类型的机器人相关的所有点。例如:
 
<pre>
 
<pre>
 
SAVE file = "Myfile.prg" type = location robottype = xyzr
 
SAVE file = "Myfile.prg" type = location robottype = xyzr
Line 577: Line 582:
 
</pre>
 
</pre>
  
= Refer to =
+
= 参考 =
 
* [[PUMA THETA Parameters|PUMA DH Parameters]]
 
* [[PUMA THETA Parameters|PUMA DH Parameters]]
 
* [[SCARA J1 range|SCARA J1 Range]]
 
* [[SCARA J1 range|SCARA J1 Range]]

Latest revision as of 13:06, 13 September 2017

语言: English  • 中文(简体)‎

TOP2.png

介绍

多个轴可以组合并运动。 有:

  • 简单组((无模型,可以是相同类型或不同类型)
  • 笛卡尔组(每个轴的作用被严格定义,例如:XYZ,XYZR,...)
  • 机器人(应用特定机器人模型(SCARA,PUMA,...)


组是数据对象(运动元素),使我们能够将其轴同步移动。如果所有的轴都是相同类型(全部是线性轴或全部旋转轴),它们的速度,加速度和加加速度值可以组合起来(使用平方和的平方根),运动参数将具有物理意义。 我们称这些类型的组为homogeneous groups

Non-homogeneous groups由旋转轴和线性轴两种轴组成。增加了一个特征来支持非同类型组速度的定义。 在设置中,声明旋转轴和线性轴。 系统确定它是线性还是旋转主导组。例如,在SCARA机器人中,有两个旋转轴用于第一和第二个关节,另一个旋转轴用于最后一个关节(旋转)。 只有一个线性轴(Z轴)。这种系统是旋转主导的。 另一个例子是XYZ-Roll系统。 这里,只有一个旋转轴(旋转)有两个线性(X和Y)轴和另一个线性(Z轴)。 在这种情况下,系统是线性主导的。 轴设置定义组的行为。每个轴必须声明是线性轴或旋转轴,通过设置 POSITIONROLLOVERENABLE 为线性轴(0)或旋转轴(1)。

在非同类型组中, 根据组的主导类型(参考: DOMINANCEMODE)总是给出联合插补运动(MOVE)命令速度。如果该组是线性优势的,速度(VCRUISE, VFINAL)为线性单位(mm / sec)。 在运动的准备阶段检查其他非线性轴。 这些轴的速度不能超过最大值。 如果是这样,总体(组)速度就会降低。

这个规则只有一个例外。这是当一个组运动只发出一个运动轴并且其他轴停止时。然后,给定速度的单位直接取决于该轴的单位。 例如,SCARA机器人的第三轴上具有运动,速度值以mm / sec为单位。

对于组内插补运动的加速度和加加速度值也是如此。

如果非同类型组中的设置不正确,即有不同类型的轴但是但所有轴的POSITIONROLLOVERENABLE都设置为相同的值。运动组仍然会运动,但是组中速度/加速度/加加速度值将不再具有物理意义。如果轴之间的数值显着不同,则系统可能有线。?

NOTE-Info.svgNOTE
上述讨论仅适用于组的简单联合插值运动(请参阅Move or Circle)。 笛卡尔组中MovesCircle使用VtranVrot参数。

坐标系

世界坐标系

具有不同的世界和关节坐标使机器人运动学独一无二 。世界坐标通常被认为是应用程序的工作坐标。通常基于机器人基座的笛卡尔坐标系有一些其他的形式。

另外一种是在终端执行器(比如夹爪等)的方向添加另一组坐标。刚体在空间中的方位通常用三个角度描述。根据自由度的数量(电机用来驱动关节角度),它们可能不相等。在大多数情况下,世界空间坐标由其位置部分(X,XY或XYZ元组)给出。 一般来说,它可以是从球坐标到圆柱坐标的任何东西。 方向组件可以使用许多形式来描述方向。大多数使用的方向角坐标系是欧拉角:偏航,俯仰和滚转。理论上,欧拉角有12种不同的表现形式,根据大多数机器人模型中使用Z-Y-Z顺序的方向顺序。

关节坐标系

机器人的关节空间是一个相对简单的概念。关节坐标是唯一描述机器人相对于先前的位置的数字。 如果连接节段的关节是旋转的,则关节坐标为旋转角度。 如果是线性的,则关节坐标是线性位移(毫米)。


点数据类型

关节坐标的概念是一个n元组数。 每个数字表示特定关节的坐标。 世界坐标由描述每个不同世界空间表示的不同内置类型(XY,XYZ,XYZR)支持。 对于相同(或相同维度)的世界坐标,可以有不同的世界空间描述。 每个机器人都有其默认的世界空间类型。 不同的机器人可以具有相同的世界空间类型,只要它们具有相同数量的自由度(NDOF)。 例如,xy平台世界空间具有XY世界空间描述符。SCARA机器人有用于垂直运动的Z轴和用于定向的转动轴,使用由由X,Y,Z和转动或XYZR描述组成的世界坐标系。

不同的坐标系被实现为不同数据类型的变量。 通常,坐标系中的一个点被定义为点数据类型。 根据是否是关节空间或世界空间,点的子类型不同。 点数据类型有两个子类型: JOINTLOCATION。两者都有一个世界空间描述符,可以区分相同的子类型。 世界空间坐标存储在变量中,定义为:

DIM A AS LOCATION OF XYZR

关节空间是:

DIM A AS JOINT OF XYZR

具有两个子类型(LOCATION和JOINT)和世界空间描述符(XY,XYZ,XYZR等)的点数据类型涵盖了所有可能的机器人空间变化。这些变量与机器人无关,可以在系统中未定义机器人的情况下使用。当它们与机器人或组的连接使用时,世界子类型必须相等。

该点可以使用所有可用的算术运算(+ - * /)作为数值数据类型进行操作。 操作被定义为逐个坐标操作。只有相同子类型和相同世界空间的点可以组合。

用于点常数的语法: 用方括号({})内的命令分隔的值列表表示点。 如果它之前是井号(#),它是一个位置:

DIM C AS LOCATION OF XYZR
C = #{0,0,0,0}

DIM I AS JOINT OF XYZR
I = {0,0,0,0}

用户单位

softMC可以让您自由地更改和选择不同的单位。机器人模型具有较小的灵活性。由于关节和世界空间之间的紧密关系,您必须以毫米或度数定义关节位置单位,以秒为单位定义所有时间单位,以便世界空间和关节间隔都是兼容单位。世界空间的单位自动设置为毫米-度-秒。

每个轴都有四个缩放因子: PFAC,VFAC, AFAC, and JFAC。这些将编码器计数和旋转计数转换为用户位置单位(英寸,毫米或圈)。它们还指定在位置求导中使用什么时间单位(VEL, ACC, JERK)。由于位置因子定义了计数和用户位置单位之间的比例,其余因子定义了毫秒和用户时间单位之间的比率。 通常有:

<axis>.pfac = <number of counts per user position units>
<axis>.vfac = pfac/1000 (if in seconds) 
<axis>.afac = vfac/1000 (if in seconds) 
<axis>.jfac = afac/1000 (if in seconds) 

所有轴都设置完毕后,组包含这些轴。 所有轴上必须具有相同的用户单位。 设置组缩放因子 组没有位置因子! 相反, 使用每个轴的 PFAC

MOVE g1 {1,2,3} vcruise = 10

目标坐标被给予每个轴,并且转换成使用每个轴的PFAC编码器/解析器计数。 VCRUISE与任何轴无关。 使用组因子, VFAC, AFACJFAC。 组速度以用户单位/秒表示。

要使系统单元正常工作, 请将每个轴的单位因子 (PFAC, VFAC, AFAC and JFAC)设置为毫米-度-秒并将组单位设置为秒:

<group>.vfac = 1/1000
<group>.afac = vfac/1000
<group>.jfac = afac/1000

耦合

在许多机器人应用中,机械结构引入轴之间的机械耦合。在这种情况下,两个或多个电机只移动一个关节。 因此,仅激活一个电机会导致两个轴(关节)的运动。有很多这样的机械设置的例子。通常当电机移动关节时,它们正在启动。 当电机在第一关节之前时移动第二关节时,第二关节通过第一和第二电机的运动而移动。这种应用的典型实例是移动机械手臂(PUMA)的电机通过链条或皮带移动机器人手臂。最后一个机器人部件上的差速齿轮传动从末端执行器移动最后一个电机(转动),第五和第六个电机引入第六个关节的运动(Staubli RX系列)。


WRIST CPLG.PNG

Staubli RX 手腕 – 对轴 a5 ,a6:

j6.pcmd = a6.pcmd – a5.pcmd

BOSCH – SCARA – 对轴 a3,a4:

j3.pcmd = a3.pcmd + 18.3*a4.pcmd.

PUMA – a2,a3 and a4:

j4.pcmd=a2.pcmd+a3.pcmd+a4.pcmd.

缩放和旋转:

j1 = 707.1*a1.pcmd + 707.1*a2.pcmd
j2 = 707.1*a1.pcmd + 707.1*a2.pcmd

正交校正:

j1 =10000*a1.pcmd
j2 = 2.91*a1.pcmd + 10000*a2.pcmd

组关节是softMC固件的标准配置,涵盖上面给出的耦合示例。

运动元素

softMC是一个多轴和多组系统。在许多方面,组和轴是相同的。例如,它们都具有以下属性: AMAX', VMAX, VCRUISE。另一个相同的方面是两者的运动。虽然运动命令有仅组(CIRCLE, MOVES) 或仅轴(JOG),但单独移动轴时,不可能移动包含相同轴的组,反之亦然。轴在组中有效。 ATTACH''DETACH的工作方式相同,当轴的组已经关联时,轴不能再关联。 因此,我们可以使用一个术语motion-element来表示轴和组。

有一些是仅属于轴或仅属于组的属性。例如DRIVEADDRESS是一个仅属于轴的属性。

MOVE包含两种不同的命令特性,Move-Group和Move-Axis。Move-Group将全部组一起移动。组内的所有轴在同一时间开始和结束运动。Move-Group保持在组和轴的运动学限制 (VELOCITYACCELERATION,JERK)。组的限制被执行并施加组运动上(集合,空间XY,XYZ)。轴限制仅与轴运动与整个组运动的比例成比例的执行。如果轴X向Y轴一半移动,则只能使用一半的极限值。运动的总时间是最慢轴完成运动所需的时间。这里,最慢的轴是具有最大路径/速度比的轴,并且不需要具有最小最大速度的轴(因为如果这样的轴没有运动,则不是最慢的轴)。另一方面,Move-Axis仅检查指定轴的极限,并且与使用该轴的任何组的极限无关。

分析器的准备可以额外减少运动参数。这是典型的短暂的运动,由于ACCELERATIONJERK的现有限制,给定的巡航速度无法达到。

关节

关节是虚拟轴。 无论从语言的角度看,还是耦合轴的物理运动,关节只给出一个轴的错觉,关节类似于轴,关节表示为J1,J2等

根据给定的耦合矩阵,每个关节实际上表示该组的一个或多个轴。如果组没有定义耦合矩阵,则关节是组中相同序数的轴作为关节索引的直接表示。 为了引入另一个术语,关节的"影轴"是组中与关节索引具有相同序数的轴。 例如,如果一组由轴A2,A3,A4组成,则关节J1的影轴为A2。

通常,所有关节属性都是影轴属性的直接表示(具有相同的值),与是否定义了耦合矩阵无关。唯一的例外是与关节位置相关的属性: PCMD, PFB, VCMD, VFB, CCMD, CFB, PMAXPMIN,这些是每个关节独有的。

根据给定的耦合矩阵获得当前位置和速度。每次发出这些值的查询(PCMD, PFB,等)时都会计算它们。它们是只读的,不表示任何特定的内部变量。从组(?g1.PCMD)查询时,对称地具有相同的属性,根据耦合矩阵返回关节属性值的列表。 组运动的运动的目标位置(MOVE or CIRCLE)类似(耦合矩阵)处理。

另一方面,关节的位置限制(PMAXPMIN) 被添加到关节中。 关节的位置限制和影轴的位置限制不相关,与是否定义耦合矩阵无关。当定义耦合矩阵(COUPLED = 1)时,总是使用关节位置限制。 在这种情况下,不会使用影轴限制。 这只适用于关节和组运动。单轴运动(例如,MOVE A1 100)仅受轴限制的限制,与耦合无关。

关节代表一组中的几个轴。 关节运动实际上是组运动:

Move-Group = Move-Joint

关节运动给出移动一个物理轴(MOVE J1 100)的错觉,尽管有几台电机可以在一起移动。根据指定的关节运动参数执行运动。 例如:

A1.Acc = 100
MOVE A1 50

类似于:

J1.Acc = 100
MOVE J1 50

Move-Joint模拟通过参数和物理运动移动单个关节来移动单个轴的行为。唯一的区别是几台电机正在移动而不是一个电机。关节移动时,检查每个组轴内的所有电机限位。关节运动是一组关节坐标与从影轴复制的组运动参数的组运动。下面的转换规则为真:

MOVE J1 10  <=>  MOVE {10,0,0,0} abs = J1.abs vcruise = J1.vcruise acc = J1.acc 

机器人模型

机器人被定义为具有特殊型号类型的组 (请参阅当前可用的机器人型号列表: robot_model_table)

例如:

COMMON SHARED scara AS GROUP AxNm = a1 AxNm = a2 AxNm = a3 AxNm = a4 Model = '''4'''

机器人设置

这将自动定义具有SCARA运动学模型的机器人。与仅需要使能轴的通用组相反,必须设置机器人参数并对其进行配置。 不同的机器人需要设置的参数不同。对SCARA机器人, 这些是:

  • 使用所有标准运动学参数设置所有轴
  • 定义转属性
  • 设置整个组的所有用户单位因子: VFAC, AFAC, JFAC
  • 设置每个机械臂链接的连杆长度和关节角度
  • 设定通用组的运动学 (VELOCITY, ACCELERATION, JERK, etc.)
  • 设定笛卡尔运动的运动学 (VTRAN,VROT, etc.)

只有在设置好所有这些并且成功执行CONFIGGROUP之后,机器人才能运动。否则返回错误,表示该组未配置。常规组(默认模型值1)与机器人之间的重要区别是执行CONFIGGROUP的必要性。 在机器人组中,机器人在配置之前不允许运动。

模型值自动定义默认机器人世界空间描述符。 对于模型4(SCARA),选择XYZR(x-y-z-roll)世界空间。

在有定义的机器人模型(模型> 1)的组中,关节和世界空间之间不是简单的转换。将“关节坐标转换为世界坐标是用TOCART来实现的,它将机器人和给定的关节坐标(位置变量)同时作为输入参数。其输出是与给定关节位置对应的世界坐标。

另一个方向更复杂。 通过TOJOINT 接收三个输入参数来实现:机器人,给定的笛卡尔点和配置标志。

配置标志用于在两个翻译功能之间进行选择。在大多数机器人模型中,对于相同的世界空间位置,有多个关节坐标描述。不同的机器人配置可以产生有不同关节空间值但是有相同的世界空间位置。不同的机器人配置不同,在 在SCARA中,只有两个配置:lefty(第二个关节坐标是负的)和righty(第二个关节坐标是正的)。

插补

对于有机器人型号(型号> 1)的组,还有一个额外的运动类型:MOVES。运动从起始位置到世界空间中给定的目标位置是一条直线。平直度与工作空间紧密相关。 相同的路径在笛卡尔工作空间(XYZ)中可以是直的,但在关节空间中弯曲,反之亦然。 MOVES 仅用于机器人类型的组,不能在通用组中使用。

直线运动是指在世界空间中是直线的运动。在没有机器人模型(模型= 1)的组中,使用MOVES生成的所有运动是关节空间中的直线运动。在通用的线性主导组中,它们的大多数轴是线性的。由于世界空间和关节空间是相同的, MOVES在关节空间和世界空间中执行一条直线。目标位置可以在世界和关节空间坐标中给出。运动与关节插值(MOVE)不同。 使不是用常规组中使用的关节空间运动学参数,而是使用速度,加速度和加加速度的世界空间参数。这些参数有两种形式:一种用于运动的平移部分,另一种用于旋转部分(方向)。

当世界空间具有位置和方向分量时,直线运动包括位置和方向上的插值。 因为这两个在本质上不同的对象,所以需要两个不同的参数:一个用于平移(纯位置插值): VELOCITYTRANS, ACCELERATIONTRANS, JERKTRANS; 另一个用于旋转(旋转插值): VELOCITYROT, ACCLERATIONROT, JERKROT. 这些参数仅用于笛卡尔插值(MOVES and CIRCLE)。这些参数对关节插值MOVE)没有影响,因为它不是世界空间插值。

两组参数定义了直线运动。 哪个参数是运动的主要因素取决于运动。 如果大部分运动都处于平移位置的变化,方向的变化要小得多,则平移部分被采用。 相反,旋转参数定义直线运动。


下图显示了在关节空间中显示的MOVES
caption

下图显示了在世界空间中显示的MOVES
caption

下图显示了关节空间中显示的MOVES
caption

下图显示了世界空间中显示的MOVES
caption


有四个命令用于在机器人组中进行点对点移动。由两个命令用于插值运动(MOVEMOVES) ,两个命令来定义目标点(JOINTLOCATION). 它们的总体组合提供了四个选项。

位置目标 关节目标
笛卡尔插值 MOVES #{400,400,0,0} MOVES {45,45,0,0}
关节插值 MOVE #{400,400,0,0} MOVE {45,45,0,0}


等值线

轮廓通过为每个运动定义“最终速度”“来连接不同的运动。 这样,运动不会在线段停止,继续下一个运动。 该方法适用于单轴应用,但在多轴应用中具有几个缺点:

  • 运动方向之间的角度必须为零。 否则,会发生速度跳跃。
  • 不能在没有加速度跳跃的情况下将圆弧与线性段连接.
  • 您必须计算每个段上可达到的最终速度,以在最后一段之后停止.

工作包络

机器人工作空间由每个关节的位置限制决定。工作空间(所有可达到的位置)受到机器人工作范围的限制。从外侧,受到完全伸展臂(j2.pcmd = 0)后第一关节旋转的弧限制。 这是可达点的最大半径(RMAX)。 它是每次配置机器人时计算的内部值 (CONFIGGROUP)。在该半径之外给出的点将被错误消息拒绝, Point Too Far.

另一个极限是半径为(RMIN)的小圆。 通过以最大折叠的第二关节(不超过180度)后旋转第一关节来获得该圆。另外该半径由机器人的基座尺寸和连接的末端执行器机构进一步扩大,以防止机器人自身发生碰撞。 最小工作包络半径(RMIN)可供用户使用(与 RMAX相反)。建议根据机器人的物理设置为每个应用程序设置此值。如果在RMIN中给出了一个点,则返回错误信息。 例如:

caption

Program
 attach
 move {j1.pmin,j2.pmin,0,0}
 while ismoving
  sleep 1
 End While
 Print "Plotting the workspace"
 move {j1.pmin,0,0,0}
 move {j1.pmax,0,0,0}
 move {j1.pmax,j2.pmax,0,0}
 detach
End Program

机器人配置

在机器人模型中,对每个位置点有几个关节点可以表示相同的机器人末端执行器位置。要在不同的关节坐标之间进行唯一选择,要有配置标志。

对SCARA机器人运动学,只有一个配置标志可用,机械臂标志。它表示lefty (1) (j2.pcmd > 0)或 righty (2) (j2.pcmd > 0)。 值为1(lefty)表示具有正值的第二关节的关节坐标被用于表示给定位置。 ARMFBK返回机器人的当前配置。该值可以是1或2 ,取决于第二关节的位置反馈值。ARMFBK决定运动的目标位置。它可以是自动(0),lefty(1)或righty(2。当给出了具有笛卡尔目标位置的运动时,根据 ARMFBK选择目标位置的关节坐标。 如果为零(自动),则使用当前的机器人配置(ARMFBK)。

PUMA模型习惯上使用三个配置标志(手臂,肘和腕 - ACMD, ECMD, WCMD)。

另一种使用配置标志的是转换功能TOJOINT。 该功能将给定的位置点转换为关节点。 它接收两个参数。 第一个是位置变量,第二个是配置标志。

一个点是用于存储变量中双精度列表的数据类型。 点的主要优点是您可以直接调用整个向量,而无需访问它的每个元素。 点数据类型有两个子类型:LOCATION和JOINT。 在同一表达式中使用两个点类型会导致类型不匹配转换错误。 点类型之间的类型转换需要使用特定的系统函数TOJOINTTOCART

声明

必须先声明点然后才能使用它。点的声明根据机器人的类型(XYZR,XYZ等)定义。softMC启用了点变量的声明,可以是标量或数组。 点数组最多可以有10个维度。点变量被设计为保存2到10个双类型坐标的列表。点变量的声明与机器人类型有关。因此,声明点变量必须包含有效的机器人类型名称。点的维数与机器人类型的维数相同。格式是:

(COMMON SHARED|DIM {SHARED}) <variable_name> AS JOINT OF <robot_type>(COMMON SHARED|DIM {SHARED}) <variable_name> AS LOCATION OF <robot_type>

<robot_type> 可以是:

XYZR – Three cartesian axes + rollXY – two axes XY tableXYZ – three axes XYZ system

例子:

Common Shared JointXYZ As Joint Of XYZ 
Common Shared JointXYZR As Joint Of XYZR
Common Shared LocXYZ As Location Of XYZ
JointXYZ = LocXYZ  --> Error – type mismatch

变量

在点变量的解释器中定义了两个新的变量类型: LOCATION 和JOINT。对转换,点变量仅由它的类型,不同于任何其他类型的变量(Long, Double等)。 点变量作为变量叶插入到表达式树中。变量叶保留与点变量相关的数据,包括其上下文(系统,程序或本地),其偏移(取自符号表)及其类型(LOCATION或JOINT,也取自符号表)。

声明

当声明一个点变量时,对应于该变量的数据被输入到正确的符号表中(取决于它是系统变量,程序变量还是局部变量)。点变量在符号表中由其名称,其类型(LOCATION或JOINT)和数据段的偏移量定义。数据段的每个偏移对应于点变量的地址。 机器人类型字符串被发送到特殊的函数,这个函数给出机器人类型值和坐标数量。

常量点

常量点是未定义机器人类型的位置或关节向量。常量点的子类型由括号的类型定义(#{}用于位置,{}用于关节)。在解释器中,这两个向量类型中的每一个被认为是一个表达式。 每个表达式相关的命令和操作(如打印命令,数学运算符等)可以应用于关节和位置向量。

在执行向量表达式时,每个向量元素作为双重表达式(通过执行JOINT或LOCATION节点的左侧)被单独地压入堆栈。在执行每个坐标节点右侧的表达式之后,Long类型向量元素将转换为double类型表达式(在坐标节点中)。

执行JOINT或LOCATION节点的右侧导致将向量元素的数量推入堆栈(作为Long型常量)。通过执行JOINT / LOCATION节点的第三侧,将点的子类型(由向量括号的类型确定)推送到堆栈(作为Long型常量)。

向量

向量实际上是常数点,其中2到10个坐标的列表写在大括号{}之间。 在位置向量中,大括号前面加上#号。坐标可以是long或double类型的任何类型的表达式(常量,变量,数学表达式,函数调用等)。Long型坐标自动转换为double,与点变量不同,向量与机器人类型无关,仅由其大小(坐标数)表征。

{<expression_1>, …, <expression_n>} ‘ 关节向量

#{<expression_1>, …, <expression_n>} ‘位置向量

出现在相同表达式中的点变量和向量必须与类型(关节或位置)和数目相匹配匹配。

Common Shared JointXYZ As Joint Of XYZ 
JointXYZ = #{1.5, 2.8, 3} -->  错误 – 类型不匹配
PRINT {20, 6.7, 23} + #{8.43, 2, 0} --> 错误 – 类型不匹配 

JointXYZ = {2, 6} -->  错误 – 数目不匹配
PRINT {20, 6.7, 23} - {5, 4, 22.9, 31} --> 错误 – 数目不匹配 

属性

一些组属性是点。 有一些关节只读属性(VELOCITYFEEDBACK, POSITIONCOMMAND, DEST_JOINT), 和位置类型(DEST, HERE, SETPOINT). 还有一些位置类型的读写属性,如 TOOL, BASE等。

与点变量一样,机器人类型也点属性的特征。出现在表达式中,与其他点混合在一起的点属性必须在类型和机器人类型中指向属性和变量,或者与向量的类型和数目相匹配。

Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
Common Shared PointXYZR As Joint Of XYZR
Dim Shared PointXYZ As Joint Of XYZ
PointXYZR = SCARA.SetPoint --> 错误 – 类型不匹配 (Setpoint returns a location)
PointXYZ = SCARA.VelocityFeedback --> 错误 – 机器人类型不匹配
SCARA.Base = #{56.5, -104.7, -90.5} --> 错误 – 数目不匹配

点维度

您在声明时未定义向量数据类型的数目,但您可以定义与该点相关的机器人的类型。 这给出了一个维度。

点分配

点分配使用以下格式:

<variable_name> = (<expr1>,<expr2>,<expr3>,…,<exprn>)() = #{} for location() = {} for joint

表达式可以是同一机器人类型的常量或其他向量变量,但表达式右侧的大小必须等于左侧。 如果您尝试使用其他机器人类型的点来分配点,则会收到错误。

单个坐标点分配

分配点的单个坐标的格式:

<variable_name>{<expression>} = <expression>

点查询

点查询的格式是:

?<variable_name>

单坐标点查询

用于查询点的单个坐标的格式:

?<variable_name>{<expression>}

示例 1

Common shared P1 as location of XYZR '声明向量 (全局)
P1 = #{1,2,3,4} '分配整个向量
P1 = #{1,2} '返回解析错误
?P1 '读整个向量
?P1{2} '读取向量的第二个坐标

示例 2

Common shared P2[5] as location XYZ '声明全局数组向量
P2[1] = #{1,2,3} '分配整个向量
P2[2] = #{5,2} '返回解析错误
?P2[1] '读整个向量
?P2[2]{2} '读取向量的第二个坐标

操作

像任何其他数据类型一样,点可以使用运算符。 系统只定义相等运算符(加,减,乘除)。点之间的操作只能在相同类型和机器人类型(或大小)的点之间执行。所有操作也可以在点和long或double类型表达式之间执行。

分配

点变量和读写属性可以通过类型和大小(或机器人类型)兼容的点变量,向量和点属性来分配。

查询

点变量,属性和向量返回一个值,因此它们都可以通过打印或赋值到兼容点变量或读写属性来查询。

Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
Common Shared PointVar1 As Joint Of XYZR
Dim Shared PointVar2 As Joint Of XYZ
Dim PointArr[4] As Joint Of XYZR
PointVar1 = PointArr[2]
PointVar2 = {23.4, 60, 42}
PointArr[1] = SCARA.PositionCommand
SCARA.Tool = #{10, 20,30, 0}
PRINT PointVar2, SCARA.Tool, {100.3, 20}
 --> {23.4 , 60 , 42} #{10 , 20 , 30 , 0} {100.3 , 20}

点加运算符像任何其他数据类型一样使用。它将第一个点的每个元素与第二个点的每个元素相加。 结果是一个点。

?{1,2}+{2,4}
--> {3,6}

点减运算符像任何其他数据类型一样使用。 它用第二个点的每个元素减去第一个点的每个元素。 结果是一个点。

?{1,2}-{2,4} 
--> {-1,-2}

点乘法运算符像任何其他数据类型一样使用。 它将第一个点的每个元素与一个数字相乘。 您只能将点乘以单个数字(一维数字)。 结果是一个点。

?2*{2,4} 
--> {4,8}

点除运算符像任何其他数据类型一样使用。 它将第一个点的每个元素除以一个数字。 您只能用一个数字(一维数字)来划分一个点。 结果是一个点。

?{2,4}/2 
--> {1,2}
?2/{2,4} 
--> {1,0,5}

复合 (:)

是一个特定于点的操作,它应该在相同大小的两个位置点(或机器人类型)之间操作。

? #{-56.5 , -104.7 , 89.5} : #{ 0.0, -104.7 , -0.5}
--> #{-56.5 , -209.4 , 89}

限制

MOD (模数), ^ (幂), 逻辑和按位运算符不能用于点。

点不能用作流控制语句和事件定义中的条件。

点无法记录。

函数中的点

点变量可以通过引用和值传递给函数和子程序。整个点数组也可以被传递(通过引用)到一个函数或子程序。另一方面,点属性和向量只能通过值传递。点也可以作为函数的返回值。但是,参数或返回值的点类型和大小(或机器人类型)必须与函数声明相匹配。

值传递和引用

点可以像任何其他数据类型一样通过值和引用传递。 例如:

Program
Dim p1 as joint of XYZR
Call Sub1(P1)
?p1
End program
Sub Sub1(X as joint of XYZR)
X = {1,2,3,4}
End Sub

该程序将{1,2,3,4}分配给P1并打印{1,2,3,4}作为输出。 当一个点通过引用或值传递时,您只能将相同机器人类型的点传递到X。否则,您会收到一个解析错误。

示例 1

Program
Dim p1 as location of XYZR
Call Sub1(P1     --> TRANSLATION ERROR !!!
?p1
End program
Sub Sub1(X as location of XYZ)
X = #{1,2,3,4}
End Sub

示例 2

Program
Dim p1 as joint of XYZR
Call Sub1(P1)     --> TRANSLATION ERROR !!!
?p1
End program
Sub Sub1 (ByVal X as joint of XYZ)
X = {1,2,3,4}
End Sub

函数返回点

函数可以像任何其他数据类型一样返回点变量。例如:

Dim A as location of XYZR
Program
Move G1 MyFunc(1) vcruise=299
    --> 如果G1是XYZR机器人类型,这将是正确的
End Program

Function MyFunc(i1 as long) as location of XYZR
MyFunc = #{1,2,3,4}
End Function

运动命令

一些运动命令在组上应用时使用点的节点参数。例如: CIRCLE, MOVE and MOVES.

一些节点参数可以分配两种点类型(LOCATION and JOINT),如CIRCLECENTER, CIRCLEPOINT以及MOVE MOVES的目标位置。其他节点参数只能接受位置点,如TOOL,BASE等。将所有节点参数与机器人类型或大小兼容的点分配给组。

Common Shared SCARA As Group Axnm = A1 Axnm = A2 Axnm = A3 Axnm = A4 Model = 4
Common Shared JointXYZ As Joint Of XYZ
MOVE SCARA JointXYZ    --> 错误 – 机器人类型不匹配
CIRCLE SCARA Angle = 180 CircleCenter = #{350, 500, -80}
 --> 错误 – 数目不匹配
MOVES SCARA #{-22, 503.8, -8.3, 149} Base = SCARA.Dest_Joint
 --> 错误 –类型不匹配


点作为表达式

点属性可以存储为一个点或者作为一个点进行比较。 例如:

Dim A as Joint of XYZR
A = {1,2,3,4}
A = G1.Pcmd
A = G2.Pcmd --> 如果G2不是XYZR类型,则返回翻译错误。

函数

定义了以下函数:

<XYZR location> = TOCart (<group>, <XYZR JOINT>)
<XYZR Joint> = ToJoint(<group>,<XYZR LOCATION>,<configuration-flag:integer>)
<double> distl(<location>,<location>) Distance between points (length).
<double> distr(<location>,<location>) Distance between points (angle).

在TOJOINT指令中,配置标志的数量和类型取决于每种机器人类型。注意,机器人属性ARMCMD,ECMD,WCMD都有三个值(0,1,2),其中0被保留用于AUTO选项。但是配置位只有两个值(0,1)。

对SCARA机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1- Righty(armcmd = 2)

对PUMA机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1) value = 1 - Righty(armcmd = 2)

Elbow ( Bit 1):value = 0 - Below(ecmd = 1) value = 1 - Above(ecmd = 2)

Wrist ( Bit 2): value = 0 - Noflip (wcmd = 1) value = 1 - Flip (wcmd = 2)

对TRAVERSE-ARM机器人: Arm ( Bit 0): value = 0 - Lefty(armcd = 1)value = 1 - Righty(armcmd = 2)

对于没有配置标志的DELTA,SCISSORS,...和其他机器人,这些字段不被使用。

tojoint的配置标志参数定义为:

加载/保存

每个全局变量都可以存储在一个文件中。变量及其值与程序中定义的格式相同。 您可以选择要存储的数据类型。 如果选择了数据类型,则SAVE命令仅存储该数据类型的全局变量。如果具有相同名称的文件已存在,则其扩展名将重命名为* .bak,并创建新文件。加载文件将覆盖保存的全局变量的值。 您可以保存与某些类型的机器人相关的所有点。例如:

SAVE file = "Myfile.prg" type = location robottype = xyzr
SAVE file = "Myfile.prg" type = all
LOAD Myfile.prg

参考