Geomatric operator in detail?

  • Hi,
    I read the geometric operator in kuka manual.


    As far us I Understood.
    1.Right side is the resultant.
    POS:FRAME=FRAME
    FRAME:POS=POS


    2.The right side will be destination with respect to left side. P1:P2. Robot goes to P2 in relative to P1's co-ordinates and orientation.


    3. (P1:P2)<>(P2:P1)



    Can you please tell me.


    1. Have I understood correctly. If not please correct me.


    2.For an example, I am having some pos and FRAME called


    POS ORGIN={X -1675.58,Y -1154.81,Z 1070.78,A 38.35,B 1.45,C 180.0}
    POS TESTPOS={X 0.0, Y 0.0, Z 30.0, A 0.0, B 0.0, C 0.0}


    FRAME TESTFRAME1={X 0.0, Y 0.0, Z 30.0, A 0.0, B 0.0, C 0.0}
    FRAME TESTFRAME2={X 0.0, Y 500.0, Z 0.0, A 0.0, B 0.0, C 0.0}


    Can you please tell me. What will happen?
    LIN ORGIN:TESTPOS ;??????
    LIN TESTPOS:ORGIN ;?????


    LIN ORGIN:TESTFRAME1 ;??????
    LIN TESTFRAME1:ORGIN ;?????


    LIN TESTFRAME1:TESTFRAME2 ;????????????
    LIN TESTFRAME2:TESTFRAME1 ;????????????



    Thanks in advance

  • AD
  • I think you got it correct, but just in case: Have you seen this post


    https://www.robot-forum.com/ro…-point/msg29249/#msg29249?


    Basically the ":" operator is a coordinate frame shifter. Whether it shifts the reference frame or the target frame depends on doing left or right multiplication.


    Esentially frameshifter:frame does a shift relative to the $BASE system and frame:frameshifter does a shift relative to the $TOOL system. Hence the result is basically the same as calling


    (S)PTP_REL/(S)LIN_REL frameshifter #base
    or
    (S)PTP_REL/(S)LIN_REL frameshifter #tool


    if your robot at position frame.


    Fubini

    Edited once, last by Fubini ().

  • Frame Apple


    Apple=BASE_DATA[8]:INV_POS($TOOL)
    Orange=BASE_DATA[8]:INV_POS(Tool_DATA[1])


    So, Apple will give the current tool pos with reference to base data8
    Organe will give Tool1 pos in reference to basedata8



    IS THIS CORRECT?


    Or have I understood it wrongly??

  • Got stucked....


    I need to create 32 boxes around the each base orgin and if the tool is inside the box then the signal is on. For. e.g.. If the tool is in base8 then the base8 box must be true.


    Since we need around 32 boxed. I can't use workspace because its limited.


    The problem is. When the robot is travelling with with base zero then its working fine.


    But not when rob travelling with other bases . ??? ??? :wallbash: :wallbash: Also tried with pos_act_mes the concept is not working :wallbash: :wallbash: :wallbash:


    Can you please tell me why. my brains out .... plz help :help:
    I wrote a subprogram


    GLOBAL DEF BoxWithBase(Dummy1pos:IN,BoxRefpos:IN,BaseNumber:in,Result:OUT)

    E6POS Currentpos,Dummy1pos,d
    FRAME BoxRefpos
    BOOL Xinrange,Yinrange,Zinrange,DefRangefromTeachedPos, Result
    INT BaseNumber

    Xinrange= FALSE
    Yinrange= FALSE
    Zinrange= FALSE


    ZplusFromTeached=900
    XplusFromTeached=400
    YplusFromTeached=400


    YMinusFromTeached=50
    XMinusFromTeached=100
    ZMinusFromTeached=50


    ;;;;;;;;Dummy1.pos = is POS_ACT
    ;;;;;;;;Boxrefpos is the base number
    If ($ACT_TOOL<>-1) AND ($ACT_BASE<>-1) THEN

    IF $act_base==0 THEN
    if ((Dummy1pos.z < (BoxRefpos.z + ZplusFromTeached)) AND (Dummy1pos.z > (BoxRefpos.z - ZminusFromTeached))) then
    Zinrange=TRUE
    ELSE
    Zinrange= FALSE
    endif

    if ((Dummy1pos.y < (BoxRefpos.y + YplusFromTeached)) AND (Dummy1pos.y > (BoxRefpos.y - YminusFromTeached))) then
    Yinrange=TRUE
    ELSE
    Yinrange= FALSE
    endif
    if ((Dummy1pos.x < (BoxRefpos.x + XplusFromTeached)) AND (Dummy1pos.x > (BoxRefpos.x - XminusFromTeached))) then
    Xinrange=TRUE
    ELSE
    Xinrange= FALSE
    endif

    ENDIF


    IF ($ACT_BASE<>0) THEN
    if (((BoxRefpos.z +$POS_ACT.z) < ( BoxRefpos.z + ZplusFromTeached)) AND ((BoxRefpos.z + $POS_ACT.Z) > ( BoxRefpos.Z - ZminusFromTeached))) then
    Zinrange=TRUE
    ELSE
    Zinrange= FALSE
    endif

    if (((BoxRefpos.Y +$POS_ACT.Y) < ( BoxRefpos.Y + YplusFromTeached)) AND ((BoxRefpos.Y + $POS_ACT.Y) > ( BoxRefpos.Y - YminusFromTeached))) then
    Yinrange=TRUE
    ELSE
    Yinrange= FALSE
    endif

    ;if (((BoxRefpos.x + $POS_ACT.X) < ( BoxRefpos.x + XplusFromTeached)) AND ((BoxRefpos.x +$POS_ACT.X) > ( BoxRefpos.x - XminusFromTeached))) then
    Xinrange=TRUE
    ELSE
    Xinrange= FALSE
    endif

  • Details?


    You say "it doesn't work," but provide ZERO DETAILS about what, exactly, is not working.
    You provide ZERO DETAILS about the relationship between the "From Teached" positions, and their relationship with the BoxRef positions, or what Bases those various points are taught in.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now