Element Coordination/Absolute Movements During Conveyor Tracking/zh-hans

From SoftMC-Wiki
Jump to: navigation, search
语言: English  • 中文(简体)‎

传送带跟踪期间的绝对运动

介绍

定义术语"总机器人位置"来表示机器人的笛卡尔位置,当被转换为关节值时,它们表示实际发送到运动总线(例如SERCOS)上的驱动器的位置坐标。因此,传送带跟踪期间的总位置由两件事情组成:机器人运动和传送带运动。其中机器人运动是用户发出不同运动指令(MOVE / MOVES / ...)引起的坐标变化,传送带运动是传送带在不同阶段运动(同步,跟踪,去同步)。

基于轴运动参考系的情况:

如在以下公式中:

Total = Robot  +  Conveyor

IMPORTANT.svgIMPORTANT
请注意":"(复合)运算符和上述公式中的"+"运算符之间的差异。以与MOVES相同的方式,当运动是相对的(abs=0)时,这里也可以通过将位置与姿态分开来将位置添加到另一个位置,即:

c = a+b means:
c.position = a.position + b.position
c.orientation = a.orientation * b.orientation

其中:
+ - 是(x,y,z)向量的规则3维向量加法
* - 是四元数乘法。


传送带坐标为:

Conveyor(t) = AMV(t) - AMV(t0)其中t0是发出 "slave=5"的时刻

AMV是:

AMV(t) = (DownStream - UpStream)*(MasterAxis(t) - Trigger)/(DownMaster-UpMaster)

MasterAxis(t) - 传送带主轴在时刻t的位置。

Trigger - 当前使用的触发器值。

DownStream, Upstream, DownMaster, UpMaster - 传送带参数。

与MC-Basic语言变量的关系是显而易见的:

<mf>.here = AMV(t)

<mf>.zero = AMV(0) (参考MovingFrame.ZERO)

基于机器人运动参考系的情况:

同样的主要公式也在这里:

Total = Robot  +  Master

但主坐标是:

Master(t) = RMV(t) - RMV(t0) where t0 is the moment of issuing "slave=5"

RMV是:

RMV(t) = MS2MF( MF.base-1 : <master>.setpoint(t):MF.ObjectLoc )     (Or instead setpoint - here)
(参考Moving_Frame_Base_Offset)

与MC-Basic语言变量的关系是显而易见的:

<mf>.here = RMV(t)

<mf>.zero = RMV(0) (See MovingFrame.ZERO)


这背后的一般思路是什么?简单来说,开始跟踪的机器人的总机器人运动(slave=5,同步或不同步)与自由机器人(slave=0)的位置是相同的就好像传送带没有移动一样。 换句话说,如果您想在传送带上示教一些点,请停止传送带,并将机器人移动到传送带上的目的地。

机器人运动,即主要公式中的"机器人"变量是传送带跟踪期间的机器人绝对位置,它等于作为运动指令(MOVES / CIRCLE / ...)的目标点输入的位置。

一个运动参考系的案例

所以具有通用公式Total  = Robot + Conveyor,有趣的是看到不同的运动类型会发生什么。 首先,Total是机器人的笛卡尔点,其符合的关节点是:


Total = InverseKinematics(Total,cfg)

其中cfg是根据机器人模型(手臂,肘部,手腕,...)的当前命令的一组配置标志。


运动指令的概述

每个运动命令(MOVE,MOVES,CIRCLE,DELAY,...)由两对参数组成:笛卡尔和关节目标点和初始位置。目标位置是用户输入的位置,运动指令的参数,起始点是给定运动开始的位置。 我们将这些变量表示为:


Target = DirectKinemaitcs(target)

Start = DirectKinemaitcs(start)


很清楚,前面的运动指令(前一运动程序包)的目标位置是当前运动的初始(开始)位置,即:

starti = targeti-1

Starti = DirectKinemaitcs(starti) = DirectKinemaitcs(targeti-1)


上述公式对于任何类型的运动都是正确的,无论机器人是否在跟踪传送带的情况下。 如果目标点以笛卡尔方式或关节点给出,则只有微小的差异。 也就是说,如果我们使用正或逆运动学转换。 由于不同的工具坐标系设置(工具,基准,工件,工作台,...),我们总是从前一个运动的联合目标坐标得到运动的笛卡尔起始位置(起始):

Starti = DirectKinemaitcs(targeti-1)

MF跟踪期间的运动命令

上述描述一般运动命令的公式实际上定义了 机器人 指向(主传送带跟踪公式)的方式。 对于不同的运动类型,它是不同的:


运动类型 插值公式
MOVES Robot = Start + (Target-Start)*l
MOVE Robot = InverseKinemaitcs(start + (target-start)*l,cfg)
DELAY Robot = Target = Start
CIRCLE ....

其中 l是分析器路径变量,始终从0运行到路径的总长度L

在自由的机器人(意味着不跟踪任何传送带的机器人)的情况下,我们有:Total = Robot,因此:


Total = InverseKineamitcs(Robot,cfg)


这意味着笛卡尔点机器人必须在机器人的工作范围内,也就是说,在这一点上必须存在至少一个逆运动学问题的解决方案。


当机器人跟踪传送带时,这不一定为真,在这种情况下,我们进行总和的逆运动学变换:Robot+Conveyor,这意味着笛卡尔点"机器人"并不一定可以到达!这进一步意味着(内部运动包关系)的公式不再是真实的。 在这种情况下,我们有两个新的运动包变量,称为Offset_startOffset_base,它补偿(偏移)传送带运动:


starti = targeti-1

Starti = DirectKinemaitcs(starti) + Offset_basei - Offset_starti

并且运动的目标点是,如果由用户给定为笛卡尔点:

Target = TargetU + Offet_base

target = InverseKineamitcs(Target)

其中TargetU是用户给定的笛卡尔目标点。 在目标点由用户以关节坐标给出的情况下:

Target =DirectKineamatics(target)

TargetU=DirectKineamatics(target) - Offet_base

与目标点一样,起点也有用户描述和内部值。 虽然这里的术语"用户描述"不准确,因为该值不是由用户给出,而是定义为:

StartU = Start - Offset_base

or:

StartU = DirectKinemaitcs(start)- Offset_start


总而言之,所有这一切将是用户给定的目标点被偏移以获得运动学可达的笛卡尔点(具有可解的逆运动学的点)。 所使用的Offset_base是在发出运动命令时由传送带运动引入的当前偏移量,而另一个偏移量变量Offset_start只是Offset_base的先前值:


MOVES & CIRCLE:

Offset_basei = Conveyor(t)

其中t是运动发出的时刻

Offset_starti = Offset_basei-1

MOVE & DWELL:

Offset_basei = Offset_basei-1

Offset_starti = Offset_basei-1

这里我们将前一个运动的Offset_base转发到下一个!


不同运动类型的插值现在看起来为:


Motion Type Interpolation Formula
MOVES Robot = Start + (Target-Start)*l  - Offset_base
MOVE Robot = InverseKinemaitcs(start + (target-start)*l,cfg)  - Offset_start
DELAY Robot = Target = Start
CIRCLE ....

 

我们使用零运动(目标点等于起点的运动)检查上述设置:


对MOVES:

Robot = Start - Offset_base = StartU = DirectKinemaitcs(start)- Offset_start 

如果这是接触传送带后的第一个运动,则Offset_start为零,因此:

Robot = DirectKinemaitcs(start)

目标点也很简单

Robot = Target - Offset_base = TargetU

表示,   "机器人" 笛卡尔点将获得用户输入的目标值。 


第二MOVES运动平滑地连续:

Robot = Start - Offset_base = StartU = DirectKinemaitcs(start) - Offset_start  = DirectKinemaitcs(targetprev) - Offset_baseprev 

because:

start  = targetprev 

Offset_start  = Offset_baseprev 

as defined.

 

切换为关节插值运动有点棘手:

Robot =  DirectKinemaitcs(start) - Offset_start  = DirectKinemaitcs(targetprev) - Offset_baseprev 

在MOVES中也是一样,但目标是:

Robot =  DirectKinemaitcs(target)  - Offset_start 

根据在跟踪中的插值公式(使用Offset_start,而不是Offset_base)。 因此:

Robot = TargetU =DirectKineamatics(target)   - Offet_base

传送带去同步(虚拟停止)

      根据<robot> .AccelerationDesync和<robot> .JerkDesync参数,当传送带与机器人分离时,它执行虚拟停止配置文件。 初始速度取为分离开始时的传送带速度。 传送带执行向零速度的运动曲线时,同时从脱离开始的时刻与实际主源断开连接。

 

  

两个传送带的情况

 

切换到另一台传送带时会发生什么? 然后,我们有一个传送带去同步,并在同一时间另一个传送带同步:

Total = Robot + Conveyor1 + Conveyor2

Where:

Conveyor1(t) = AMV1(t) - AMV1(t01)

And

Conveyor2(t) = AMV2(t) - AMV2(t02)

其中t02是发出"masterframe = cnv2"的时刻,t01是通过发出"slave=5" 或通过在<robot> .slave为 "5"时设置"masterframe = cnv1来使用第一个传送带的时刻。


当<robot> .IMFS标志等于-2时,可以检测到这种情况。当机器人不与任何传送带接合时或者当它同步到一个时,IMFS标志为零,当机器人同步到传送带时等于1,当与机器人脱离传送带时,不在任何其他输送机上使用时等于-1。


很明显,在某个时刻"ts1",第一台传送带将完成其虚拟减速,我们将转向单个传送带状态:

Total = Robot + Conveyor2

为了保证机器人运动的连续性,我们必须保证没有跳跃,即:


Total*(ts1) = Total(ts1)=> Robot*(ts1) + Conveyer2(ts1) = Robot(ts1) + Conveyor1(ts1) + Conveyor2(ts1)

从这里:

Robot*(ts1) = Robot(ts1) + Conveyor1(ts1)

表示在两台传送带之间切换的时刻(更准确地说在机器人只使用第二个传送带时),我们根据以下原则对机器人的当前运动包位置进行了更正:


start = start - Offset_base + Conveyor1(ts1) = startU + Conveyor1(ts1)

target = target - Offset_base + Conveyor1(ts1) = targetU + Conveyor1(ts1)

Offset_base = 0

Offset_start = 0

where Conveyor1(ts1) = CNV1(ts1) - CNV1(t01) (实际上第一个传送带虚拟停止位置)

当机器人与传送带脱离使用时,会发生相同的变换。

结论

在传送带跟踪过程中,机器人的笛卡尔坐标全部由两部分组成,第一部分是机器人的绝对位置,第二部分是当前传送带从零(<cnv> .zero)开始的相对位置。 这两个部分是叠加的。当传送带与机器人分离时,其相对停止位置被添加到绝对机器人位置,并成为新的总机器人位置。