Query for Operating in Tool Coordinates - Fanuc 200ic

  • Hi All,

    Newbie question, so I hope you don't mind and thank you in advance for your help.

    We are using a teach pendant to program a 200ic robot. On the end we have a simple spray gun, the TCP for which is offset 150 mm to the left of the centre of the attachment plate. We are trying to spray paint a spinning hemisphere directly in front of the robot.

    Using the TP I can easily program forward/back, left/right, up/down movements when the tool coordinate system is pointing in exactly the same direction as the world Coordinate System. However, to avoid singularities I have to angle the spray gun to spray at an angle of around 20 degrees to the WCS i.e. slightly from the side. I angle the spray gun by defining a change in (ya)W in the taught positions. However, I now need my x and y translations to have rotated with the Tool coordinate system, but when I program the same simple orthogonal movements as before my x, y and z translations are still moving in the WCS directions as before (or I suppose the User Frame as this is still defined as matching the WCS). They have not rotated with the Tool System as I would expect.

    I don't understand why the program movements have not rotated with W. I have defined the Tool Coordinate system as the relevant system but it appears to still be using WCS or a related system. I do not want to redefine the User coordinate system as every time I add or subtract yaw from the spray gun I would have to redefine the UCS.

    On a kawasaki I simply program in AS and it takes 2 minutes, but using the TP on the Fanuc I'm pulling my hair out as it strikes me I'm missing something very simple.:thinking_face:

    How do I ensure that the robot uses Tool coordinates? The manual does not cover this, describing only user and world. When I teach points I can only teach in User or world. Is there a way of linking a user frame to the tool frame so that it automatically rotates with the tool head at all times


  • Place your Ad here!
  • Hi All, Me again.

    Thanks pdl for your help, but unfortunately we're still struggling!

    When using the tool offset, we got very strange results, suggesting that the robot is not using the coordinate system we think it is. When we define a PR, we get the following screen, e.g.

    I think I have a misunderstanding of exactly what is what.

    UF:0 - This means I am using the zeroth User Frame, which is the same as the world frame by default.

    UT:1 - This means I am using the first Tool Frame, which has been defined, or may be at the centre of the mounting plate if not.

    How can a point with a unique definition of X, Y, Z, W, P, R be in two frames at once as the frames do not have the same origin or orientation? Which frame is actually being used here and why are two defined?

    CONF:FT - What does this mean? I cannot find a definition in the manual!

    I'm really struggling to understand why the robot can not simply move in the tool coordinate system. We've rotated the tool by 20 degrees, so the tool frame should have rotated with it. Therefore, a programmed x-movement specified in the tool frame should still be along the tool x-axis, but in our case it appears to remain along the world x-axis. Surely the point of the Tool Frame is that when rotation is needed, the programmed x,y,and z instructions rotate with the tool and the exact program can be run again a a different angle? Why can we not just tell the robot to move in the Tool Frame (if we can - how do we do this as what we are trying is not working?

    In terms that a newbie like me might understand, what is the tool offset actually doing, and why can't I simply move the robot in the x-direction of the tool? If I can do the latter without using tool offset, how do I do it?!

    Many Thanks again for your help (and apologies again for the stupid questions).

  • Quote

    How can a point with a unique definition of X, Y, Z, W, P, R be in two frames at once as the frames do not have the same origin or orientation? Which frame is actually being used here and why are two defined?

    The tool frame defines the location of the tool center point (TCP) relative to the center of the faceplate. The user frame defines your coordinate system relative to the world frame. When you teach a point, what is recorded is the TCP location relative to the UF origin. There's a more thorough description of frames in this training guide: A Free Open-Source E-Book for HandlingTool TeachPendant Programming


    CONF:FT - What does this mean? I cannot find a definition in the manual!

    This is the configuration string. This video mentioned here (Linear Motion Configuration in Fanuc Robot R2000-2101f) does a good job explaining it.

    If you are wanting to move the robot in tool frame in order to teach your points, hit the "coord" button until it says "tool" and you'll be able to jog the robot relative to the tool. If you want to programmatically move in the tool frame, use the tool_offset command that PDL mentioned.

  • The position that you show is a "P" point, not a position register (PR). A "P" point is a local point that is exclusive to the program that you teach it in. It has a user frame and a user tool associated with it. A "PR" is a global point that can be used in any program and will not have a user frame or a user tool associated with it.

    Note the UF:F and UT:F.

    The "CONF:FT" is the configuration. Configuration only applies to points or position registers stored in Cartesian format; configuration does not apply to positions stored as joint angles. Since the same Cartesian position can be reached with the arm at different joint angles, the configuration of the arm must also be stored. There are several very in-depth post covering this topic, so I'll let you search for those.

    Now, onto the real meat of your question, "what is the tool offset actually doing?"

    First, you need to have a properly defined UTOOL. You mentioned that your specific tool is offset from the face-plate by twenty degrees, that means that you have either a value of 20 in either ya"W" or "P"itch. To verify that this is correct, once you have the tool defined and selected as such (ignore the fact that my tool does not have a twenty degree offset):

    Place the jog coordinate mode into "TOOL" (ignore that my robot says "S/TOOL"), now jog the robot in +Z and -Z. If your tool frame is correctly defined, you will observe that the tool will move in and out in the direction of the tool, in my case a spray gun. E.G. when I jog, in tool frame, with my spray gun selected (in my case UTOOL=15), my spray gun will move in and out from the part that I am facing, no matter the orientation. I can point to my part from the top, the side, or the bottom, and when I jog + or - Z in tool mode, the gun will always move closer or further from the part, ALWAYS. If your tool is not properly setup, it will move some other way.

    Alright, alright, alright. Now that we have a properly defined tool that has been verified with the actual robot (sorry RoboGuide, I don't trust myself to get it correct 100% of the time in simulation...), we can properly use this command:

    :L P[13:          ] 140.0inch/min CNT100 EV100% Tool_Offset,PR[1:Spray Offset]    ;

    Lets break this down:

    :L P[13: ] 140.0inch/min CNT100 EV100% Tool_Offset,PR[1:Spray Offset] ;

    This is the standard part, if you don't understand this one, you have a little further to go (there's a wonderful sticky to a wiki style manual n the "Manuals, Software and Tools for Fanuc Robots" section"). This part of the instruction will move to "P" point 13 at 140 ipm with a CNT100 termination.

    :L P[13: ] 140.0inch/min CNT100 EV100% Tool_Offset,PR[1:Spray Offset] ;

    The robot I pulled this code from has 2 extended axes, this code just tell them to run at full steam ahead.

    :L P[13: ] 140.0inch/min CNT100 EV100% Tool_Offset,PR[1:Spray Offset] ;

    Now the fun part, without this one, I would just move to P[13]. However, since I have syntactically invoked a tool offset, the robot will now move to P[13] with a two inch negative Z tool offset. Essentially, it would be identical to stepping through a program to "P" point thirteen and then jogging in tool frame in the negative Z direction.

    I hope this explains tool offsets, if not let me know.


    {This concludes Philly's Fun Fact of the Day for this beautiful Thursday morning down at NASA's wonderful Michoud Assembly Facility in the heart of New Orleans East. AD ASTRA PER ASPERA!}

    Edited once, last by pdl: grammatical error fixed ().

  • Teach your base point (with no offsets) how you want the robot to be oriented. Then add a Tool Offset. In the Tool Offset PR, you can set x,y, and z values to move the robot relative to the current tool orientation. Once you understand how it works it only takes a couple minutes, just like you mentioned with your Kawasaki.

    A point is always using both the User and Tool frame. The point is going to define where the TCP (Tool Frame) is located and Oriented in the user frame.

    All Cartesian robot movements are relative to the active user frame. Except for Tool Offsets.

  • To all who have provided excellent information - thank you! Your explanations will (i'm sure) help immensely, once I have time to process them.

    If you ever find yourself in the sleepy Peak District of the UK, I'll buy you a drink :thumbs_up:

  • I can concur here with PGUK, (I too am a newbie to Fanuc) in terms of just how different Fanuc are in comparison and at the same time kudos for TitusLepic, pdl and HawkME for expanding on this subject and PGUK for asking...…….:top:

    (not meaning to highjack this thread).

    From my understanding now would the following be a correct summation:

    PR[] locations are the difference between the selected tool referenced to the world frame or as Joint angles (dependent on interpolation mode used to teach).

    P[] locations are the difference between the selected tool, selected user frame referenced to the world frame.

    In Fanuc ONLY a PR[] can be taught as either Joint angle or transform, but a P[] is always a transform.

    The configuration is used to set/ensure robot posture for the P[] transform.

    If the PR[] is taught as a joint angle, no offset could be applied to it.

  • P and PR's can both either be taught as Cartesian or Joint representation. The biggest difference is that P points are local to a program and have both a user frame and a user tool associated with them, while PR's do not.

    I did not think it would work, but yes you can apply a Cartesian offset to a position that was recorded in joint representation.

    Also, I did not mention this before, but offsets can be applied to both P points as well as PR's. Both of these are valid:

    L P[85:] R[32:S180 Spray Speed]inch/min CNT100 EV100% Tool_Offset, PR[1:Spray Offset];
    L PR[10: Master Taught Point] R[32:S180 Spray Speed]inch/min CNT100 EV100% Tool_Offset, PR[1:Spray Offset];

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

Advertising from our partners