moving to a goal position received from an external program

  • Hi all,

    I am using Roboguide, and working with fanuc robots.

    I have small experience building TP programs. I need some pointers in the following scenario.

    Imagine that a program external to the robot and controller wants to send some target positions for the robot to move to. This position can be a Cartesian position (i.e., x, y, z), and in the world frame. I have some idea how to define position registers ( or points ) within the program where the arm can move to when the program is put to run.

    Here is what are my thoughts,

    I can use SNPX communication enabled, and I use some registers and DOs. Then, I can create a ModbusTcpClient and connect to the controller (virtual controller in this case inside the Roboguide). When, I need to send some target position ( 6-tuple, x, y, z, roll, pitch, yaw), I write 6 registers, and as well, turn ON a DO.

    I write a background program, that is always running. And, whenever it sees the particular DO in ON, it will read those registers and assign these to a particular position register and call the TP program which is responsible to move the robotic arm to that position.

    I am not certain if the above makes sense within fanuc, and within TP programs.

    Secondly, the robotic arm can be at any arbitrary position. How do we make sure that from there, it can actually go to the position that we have specified. How does it actually, interpolate the remaining trajectory points, from the current position until the goal position (if it can actually make that movement).

    Please, what is the better way to achieve the above task.



  • AD
  • What you are describing will work. However, I would question why you want to do it? Why does the position need to come from an external source. Do all the positions need to come externally or just in certain situations? You obviously want to protect the robot from going to a bad position so it would be good to know what your end goal is so we can give the best advice.

  • thanks HawkME,

    so basically, there is a vision system, that records the position of the manipulation object

    s (objects to be picked), and then sends the target position for the robotic arm to move to. After the robotic arm has moved to that position, gripper will hold the object, and later, the vision system will send another position where the object will be placed, and this position will also be sent via an external source. And the robotic arm has to move in response.

  • I think your solution will be fine. I would only use the external positions for those moves that need it and also have some logic to validate it isn't sending values out of a realistic range that could crash the robot.

  • Wouldn't do it this way, mean the background process, if it's not absolutely necessary.

    Would create a main loop in normal TP process, that watches the DO (think it is a DI on the robot coming from external system), then read the values, and decide which program has to be used to do the specific task depending on the range of coordinates received from the external system.

    If you don't have multiple external systems that can send coordinates asynchronous, in my opinion it's not necessary to use asynchronous background process. Background process makes things more complicated, and are not that easy to debug.


  • I have a related question that I hinted at in my first post.

    At a given moment, robotic arm is at an arbitrary location. And, then we specify a target position for it to move to. How does it interpolate the trajectory between the start and the end. What safety concerns arise ? I worked a bit in ROS, where, firstly planning happens (finding a path from start to goal) that generates a trajectory and then the execution occurs.

    So far, I have only made very simple TP programs, within Roboguide. I jogged the robot to different locations, recorded the points, and then visualize the movements along those points.

    thanks for your time.


  • ZA

    If it is possible, you can pre determine "good points" . These points should be the master point of one area, so in you case,

    j master area 1


    j master area 1

    j master area 5


    j master area 5

    master area 1 take care of points where (for example) x is between 56 and 82 and y is between 5 and 73

    same idea with all the other points.

    To complicate your life, you can use master of masters

    The trick is to be able to go from any of your master point to another master point

    I used to do this on waterjet where I had to cut many shapes but there were different combinations of shapes on the fixture. I had to be able to cut one shape , move up and be able to go to any other shape

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