Moving ABB robot, creating a workobject to reference program points location

  • Hello,


    New here to the forum and new to ABB robots. Have used FANUC in the past, but still an amateur in the field. Here is my problem:


    We are moving a robot at work that performs grit blast, the programs have all been taught using a work object called wobj_spindle. This work object was created a long time ago and nobody knows what it was based off of. I have a tool that locks into the spindle and has two metal tips in the X direction to teach X1 and X2 and a third metal tip to teach the Y direction.


    If I teach a new work object with this tool, lets call it wobj_NEW, can I use this as a reference frame for all of my old points that used wobj_spindle and keep the original points in the same location in space? The goal would be to teach the wobj_NEW over again with the tool after the robot and machine have moved so that the rest of the points do not need to be touched up individually.


    Is this possible? I know if I change the work object from wobj_spindle to wobj_NEW in my program, the robot DOES NOT go to the same location, or anywhere close. Luckily I planned that would happen and stepped though slowly!


    Thanks for any help!

  • You can do it, but you must install RobotStudio in order to recalculate the points using the new workobject.


    The process it's simple (if using an irc5 controller) but in order to work correctly you must define the new workobject and ensure that you don't use any "offset" instruction inside your program if the workobject orientation doesn't match (ex: an offset to X if the new workobject has the X 90dg rotated... if you use offsets only on Z direction and the Z match with the new wobj then no problem)


    You must install RobotStudio, connect to the controller, request write access and then right click on the module and click on the "recalc robtarget" option. It will ask the new and old wobj, check the update instruction checkbox and apply. Apply changes and test your program. You must do this peocedure for every module that contains movement instructions using the old wobj (you can comment the old wobj and apply to see if there are errors, if you are not using the old wobj anymore then it should give no errors)


    Take care if you are recalculating points on a wobj that its connected to a mechanical unit, the new wobj must be connected to the same mech unit in order to recalculate the robtargets correctly.

  • If you switch workobjects in the jogging window to wobj_spindle (plus make sure you have the right tool selected) then try and jog the robot to 0,0,0 in XYZ - this is your zero point (duh) or X1 when your work object is taught.
    You can then lock each axis X/Y and visually try and get an idea on what the guy before you used as reference points when he/she thought the workobject originally.

  • Thank you guys so much for the quick responses.


    I am using an IRC5 controller, and do have a laptop that I can hook up to the controller with RobotStudio.


    My problem I am seeing after what you had informed me is that I am using offsets on almost all of my points in the program. Does this make this procedure impossible to do, or just potentially more complicated. They are simple offsets that just step 5mm at a time in either the X or Z direction.


    I plan to head down to the robot and try to find the (0,0,0) location of the old wobj_spindle to see where they might have taught this from. I suspect it will be in a different orientation, most likely rotated about 90 degrees. If I can find out per say that their wobj is rotated 90 degrees on the X axis, will i be able to offset my new wobj by 90 degrees to match up to the point locations in space?

  • Yes, there is an external axis. When I was teaching my wobj_NEW I rotated the spindle that the tool sat in so that it was perpindicular to the robot at 90 degrees, as if the robot was tracing a frame on a wall in front of itself.


    I used a digital protractor to get the angle right at 90 degrees and plan to use this protractor again when we move the machine, to assure the tool is in the same orientation when sitting in the spindle.

  • I went down and checked the declaration for wobj spindle.


    Scope=Global
    Storage Type=Persistent
    Task=T_ROB1
    Module=MainModule


    I assigned the same declaration values to my wobj_NEW.


    I also looked into the directional differences between the two wobj.


    If the robot is looking at the wall, in wobj_spindle X+ moves the robot back towards itslef, Y+ moves the robot to the left, and Z+ moves the robot down toward the ground.


    When in my new wobj_NEW, X+ moves the robot down, Y+ moves the robot to the left, and Z+ moves the robot forward towards the wall.


    So essentially from wobj_spindle to wobj_NEW there is a 90 degree rotation about the Y axis(had to right hand rule this one for a few minutes to figure it out).


    When I jogged to wobj_spindle (0,0,0) location and checked the value switching to wobj_NEW it showed the coordinates (-62.6,4.5,53.0).


    Would that value be an offset amount I can make to wobj_NEW to use the new frame but retain the old locations?

  • I think what SAABoholic is getting at when he asked about your declaration is this: FALSE,FALSE,"MTT180". The first parts of the workobject declaration in which the mechanical unit which can move the workobject is in quotes. That would be very important to know if your original was programmed as such.

  • Of course, sorry about that.


    It shows:


    robhold: FALSE
    ufprog: TRUE
    ufmec: " "


    This is what you are referring to correct?


    That is the same for the original wobj_spindle and my wobj_NEW

  • Okay, so since the wobj was not taught with moving the mechanical unit, and neither is my new wobj, what would be the easiest way to implement the new wobj into my old programs so that I have a stable frame to reference when the robot is moved, but also keep my positions in the same spot.


    Would this only be able to be done with RobotStudio recalculating the robtargets like mentioned earlier in the thread?


    Thanks for the help guys.

  • One more question, does it merely rotate or does it also have a tilt axis? What I would probably do is copy the quaternions from the original to new, to retain the correct orientations, jogging directions. The x, y and z values could be copied over into the oframe to shift it back the same. Might have to invert the signs, just play around with it to see what it takes.

  • Thanks Lemster,


    I will play around with those combinations and report back with what I found to be successful in case anyone else stumbles upon this situation themselves.


  • When I jogged to wobj_spindle (0,0,0) location and checked the value switching to wobj_NEW it showed the coordinates (-62.6,4.5,53.0).


    When you had it at 0,0,0 did the position at which the robot tool pointed at make any sense at all ?
    i.e. did it seem to point at something or was it just a random point in space ?


    Sometimes people use a dedicated pointers to teach things in which case you're kind of SOL if you have no reference at all.


    In that case you're stuck with three options:
    Robot Studio - by far the fastest / easiest method.
    conversion in Rapid (not rapid at all) - i've done it in the past when RS wasn't as evolved (and I think I've explained how on the forum) and it works great but it's not worth it these days since you can install Robot Studio on a random PC, run it as a trial and get done what you need to do in much shorter time.


    3rd do what you're trying to do which in the end most likely will result in re-teaching everything because while you're going to get close you're probably not going to get close enough.

  • Update:


    Yesterday I messed around with the robot and the work objects. What I ended up trying was going to a known point in my program that referenced wobj_spindle. Checked what the values were in jog mode referencing wobj_spindle (74.3,118.7,43.7).
    I then changed the wobj in the program to wobj_NEW and moved back to the same point I referenced the first time. Went back to the jogging screen and looked at the value again referencing the wobj_spindle (127.3,115,106.4).
    Found the difference of these values to be (-53,3.7,-62.7).


    I went into my program data screen and opened up the wobj_NEW and matched the user frame quaternion values to be the same as wobj_spindle and then assigned (-53,3.7,-62.7) to my XYZ object frame values.


    I then ran my program with points referencing wobj_spindle and wobj_NEW sprinkled in throughout the code and everything ran like it used to and the points were where I expected them to be, as well as the offsets moving the correct direction.


    So by matching the quaternion values does this actually nullify the wobj_NEW frame reference I made using my tool? Or is this what I needed to do and this will work? My locations are correct and movements are the same, but I don't know if this will allow me to simply reteach the wobj_NEW with my tool after the robot is moved and I'm good to go without touching up points.


    Thanks for all the help guys, this forum is very helpful!

  • By matching the quaternion and applying an "offset" you have in essence made your workobject the same as wobj_spindle - so it should work or there would be something seriously wrong with your setup :winking_face:



    When you measure a workobject your:
    X1 is your origo / 0-position
    X2 is the direction of your X-axis
    Y1 sets the direction of Y and the "rotation" around the X-axis


    The combination of X2 and Y1 is what end up being your quaternion (related to your world-coordinate system).
    X2 and Y1 is not critical when it comes to how far out on the axis they are (since they're only used for directional purposes), that said, the further out you are the less impact a slight error would have on the overall calculation.

  • I'm sorry if I was unclear, my point was that nothing has changed... by changing the quaternions and applying an offset to your wobj you made your own measurements null and void. i.e. if you do this after moving it your points will be off just as much as they would using the original spindle wobj.


  • I'm sorry if I was unclear, my point was that nothing has changed... by changing the quaternions and applying an offset to your wobj you made your own measurements null and void. i.e. if you do this after moving it your points will be off just as much as they would using the original spindle wobj.


    This is correct. But, if you know what the difference is now before moving, then after the move reteach and see what the difference is then, you can make another adjustment based upon the difference.

Advertising from our partners