Hi all -
Long time reader, first time poster. I am helping a friend prepare his robot for milling (information below). We are having an issue described in the subject line where the cartesian position of B=0, C=0 leads to a physically noticeable angle around C in the spindle. Most of my experience comes from having spent some time around a very talented milling integrator who set up the milling cell I work with on a day to day basis along with a lot of independent research and trial and error. I am much more a programmer than anything else so some of the finer details are new to me.
Robot Model: KR200/3 COMP
KRC2 KSS 5.6.10
Absolute Accuracy Robot - system variable has been disabled, first mastering, load correction all carried out
HSD Spindle mounted at an approximately 45 degree angle with a bracket and adapter plate
Here's what we've done so far.
Using RoboDK we took two TCPs with 12 points each, one with a short probe (78.8 mm) and a long probe (212 mm). I know this difference probably isn't large enough but it had to suffice until better probes could be purchased. Using Powermill and a matrix calculator developed by the aforementioned talented friend I calculated the TCP (short probe) to be the following:
{X 109.726, Y 13.007, Z 442.489, A -180.0, B -44.599, C 176.004}
This value was entered into Tool 1 in the controller. Base 1 was then measured with this TCP.
The main part of the program declares all the relevant motion variables, sets to the base to 1, the tool to 1 and sets up a frame that transforms the tool 1 along Z by a value equivalent to the difference between the length of the actual tool in the TCP. This program structure has worked perfectly on multiple other robots. I've put a sample of the points below. As you can see the B and C values are zero since this is a 3 axis move.
PTP $AXIS_ACT
$ADVANCE = 3
;FOLD PNTS
$VEL.CP = 2
LIN {X 606.937,Y 1411.258,Z 337.532,A 67.1197,B 0.0000,C 0.0000} C_DIS
LIN {X 606.937,Y 1411.258,Z 332.500,A 67.3559,B 0.0000,C 0.0000} C_DIS
$VEL.CP = 1
LIN {X 606.937,Y 1411.258,Z 327.567,A 67.5794,B 0.0000,C 0.0000} C_DIS
LIN {X 606.937,Y 1411.258,Z 317.606,A 68.0369,B 0.0000,C 0.0000} C_DIS
LIN {X 606.937,Y 1411.258,Z 307.666,A 68.4890,B 0.0000,C 0.0000} C_DIS
Display More
The program runs in the correct X, Y, Z location relative to the base but the spindle is angled several degrees around the C axis. When physically bring the spindle into a vertical position by jogging the robot, the Cartesian position reads B - 0.29, C -7.01. He had attached a different spindle to this machine at a 90 degree angle several weeks ago, taking a TCP with the 4 point method in the controller and this also lead to the spindle rotated slightly around the C axis. He had been compensating for the rotation by adding a 3 degree rotation to the TCP definition which I suppose did the job when the spindle was at 90 but at 45 degrees this compensation becomes way too complicated to adjust by hard coding in a rotation.
As mentioned above, first mastering was performed, absolute accuracy deactivated, and load data set for the spindle and adapter. I'm now comparing the values in machine.dat between his machine and mine (KR210 with KRC2). The thing that stands out the most to me is the difference between the $COUP_COMP values for each machine. Mine are all positive ratios while his [4,5] and [4,6] values are negative but with similar absolute values (see below). From other posts and the Kuka docs I understand that these are basically compensation values between the different axes of the wrist.
My hunch was originally that maybe these negative values are meant for a ceiling mounted robot rather than a floor mounted one but the robots plate specifically says "FLOOR" and the previous owner did not seem to think it was ever mounted on the ceiling.
Any input or suggestions are welcome. I am pretty stumped at this point. We are trying to get an original machine.dat file from the previous owner but beyond that I am out of ideas. Certainly have learned a lot looking into this though.
Thanks in advance for your time.