I’m running into an issue with an ABB robotic milling setup and I’m hoping someone may have seen something similar.
To verify my TCP and WorkObject calibration, I machined a test cube. The starting stock was 306 × 306 × 155 mm, and I milled it down using a 19.05 mm square end mill to 300 × 300 × 150 mm. The cube dimensions came out very accurate, which led me to believe my TCP and Wobj definitions were correct.
After that, I switched to a 19.05 mm ball end mill to verify that the tool could follow the same surfaces accurately.
When the tool is vertical, the ball nose appears to be very accurate in Z. However, when I rotate the tool so that the tool axis is normal to the side faces of the cube (so only the tip should just touch the machined surface), the tool wants to gouge into the part.
What’s confusing is that the amount of gouge is not consistent across the four sides of the cube. I’m seeing variations ranging roughly from about 2 mm to 4 mm depending on the side.
To rule out the ball tool, I also repeated the same test with the square end mill oriented normal to the side faces, and it behaves the same way — it also wants to gouge when commanded to be at zero offset. However, the square end mill remains very accurate when cutting with the tool vertical.
So in summary:
-
Vertical machining appears accurate.
-
When the tool is rotated 90° and normal to the side faces, both tools gouge.
-
The amount of error varies by about .5–2 mm depending on which face is tested.
Has anyone run into something like this before? I’m trying to determine whether this is more likely related to TCP definition, WorkObject orientation, robot calibration/mastering, or something else.
Any suggestions or troubleshooting ideas would be greatly appreciated — I’ve been chasing this for quite a while and I’m starting to run out of ideas.
How did you obtain the TCP? From CAD data or was it taught?
I actually tested both methods. The TCP calculated by the controller produced slightly worse results—about 1 mm more error.
I also created a tool using the TCP from the CAD model and rotated it around a fixed point to check how accurately it maintained that point in space. The results were not very good.
Based on those tests, it seems that the learned TCP from the robot calibration process is the more reliable option, and that’s the one I plan to use for all operations.
OK. Let’s get some of the basic setup things checked: Do the calibration offsets match the sticker on the arm or cabinet? How do all the zero alignment marks line up? Use a MoveAbsJ to a jointtarget with all zeros.
The witness marks look accurate after moving the robot into the home position. I found the calibration sticker, but I am unsure of where to check that the offsets are correct on my IRC5 teach pendent. Under “calibration” I can run a routine called CALPEND, but I cannot find a read out of the current offsets
This should help guide you:
I see that this robot has absolute accuracy, you should ensure that it is activated. Also, this is related, what is the payload of the EAOT? Your milling head.
Thank you, yes I have found the offset values by checking the backup and searching Moc.cfg.
They are correct.
—————————————————-
The payload of my EOAT is 68.7 kg. I use this load data for all of my tools, assuming that the mill bit is negligable. Here is an example of my tool data
PERS tooldata BrubakerRound:=[TRUE,[[185.633,-36.8432,558.521],[0.864199,0.0856186,0.493396,-0.048882]],[68.7,[-4.4,9.5,160.4],[1,0,0,0],4.403,5.82,1.968]];
—————————————–
Absolute accuracy does not appear in my calibration menu, but you can see below that it appears to be active
Please check for this:
ROBOT:
-name "ROB_1" -use_robot_serial_number "rob_1"\
-use_robot_type "ROB1_6640_2.75_205" -use_robot_calib "r1_calib"\
-use_joint_0 "rob1_1" -use_joint_1 "rob1_2" -use_joint_2 "rob1_3"\
And not like this:
ROBOT:
-name "ROB_1" -use_robot_serial_number "rob_1"\
-use_robot_type "ROB1_4600_2.05_45" -use_robot_calib "r1_uncalib"\
-use_joint_0 "rob1_1" -use_joint_1 "rob1_2" -use_joint_2 "rob1_3"\
Also and maybe finally, are there any loads mounted on any other robot axes?
Tip
To verify that Absolute Accuracy is active, look at the Jogging window on the FlexPendant. When Absolute Accuracy is active, the text “Absolute Accuracy On” is shown in the left window. In a MultiMove system, check this status for all mechanical units.
Hey Lemster,
Sorry for the wait, I had to run a print with the system. (LFAM)
I have absolute accuracy active on the arm, but the track and rotary table have it switched off.
I have no other loads on the arm.
No problem. Absolute accuracy only applies to the robot arm only anyway. Now I am beginning to be at somewhat of a loss. One thing, does your workobject reference a mechanical unit/s? In the MOC does either of them specify “allow move of user frame”?
Lemster is much more knowledgeable than me and this may not be related, but I’m just wondering how well you taught the TCP. Unfortunately there is no way to see the TCP error calculated at the time the TCP was taught. It isn’t stored. But you could teach it again and see what is reported back. After you enter the points, you’ll be shown this screen:
If you are connected to the controller you can grab a screenshot from within RobotStudio or just write the error numbers down.
You can use more points to improve the error. You want to vary the joints positions a lot for each point.
Did you use tools that come to a point when teaching the TCP?
This is my (low tech) setup:
Once you get close, switch jog mode to small.
It’s tedious. If you don’t have any pointed tools damencnc sells some specifically for this.
For your tool load data, did you run the LoadIdentify service routine?
I followed your guidance here as I had something similar in mind already. Thank you for your input. I have new indexable tools I needed to calibrate anyway. I added an extra point, and used extreme angles to calibrate. I have yet to be able to move through a full cube test, as I had to move to other work, but hopefully next week I will have time to do further testing
I did not run the loadidentify service routine! I will check that.
lemster, I will get back to you on this