Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

How to configure KUKA external axes

After finally getting a simple toolpath to work from Fusion360 to RoboDK using the plugins, the rotation of the turntable is forcing a rotation of the spindle. Changing the reference from "Part Base" which is bound to the synchronized mechanism flange, to "(Origin) Robot Base 2" which is in the same position as "Part Base," but not bound to the mechanism flange (it doesn't rotate with turntable) does not seem to help.

Putting "Allow a tool Z rotation of +/- (0) gives me the error that the robot cannot reach all targets.
Selecting minimum tool orientation change and teaching the robot position does not resolve it.
Selecting "Move External Axis" or "Prioritize External Axis" did not resolve it.

When I had a "working" program (got a green check mark, but the robot was rotating the head around and crashing through the table and part), I clicked "Keep pos." to try and lock the head down close to the robot. Got the red X [The Robot cannot reach all targets in the path], then unclicked "keep pos." and now even the "working" program I just had is giving me the same red X cannot reach targets error. All I did was check, then uncheck keep pos. What else does it think changed?

All I am trying to do is position the head on the -Y side of the part at a 90deg angle, and allow the turntable to rotate around so the spindle only needs to raise and lower in Robot Base ref Z.


I made an example reference to try and better communicate the problem. I hit my limit of posts today, and can only attach 7 items.
Attached you will see the Cartesian coordinates change in the X, Y, and A,  with just the rotation of the turntable. It behaves like my reference frame with respect to robot base is the turntable flange. It would make sense if that were the case. But no matter what I make my reference frame, the turntable flange reference overrides it. This behavior manifests in the program also, causing the toolhead to rotate about in ludicrous directions, causing collisions.

Whatever else you need from me to better communicate this issue, please let me know. I have been tackling this issue for over a month now, with no support. I just want to move forward. We have a professional license, and have paid for 1 year of maintenance. I have called, emailed, and posted in the forum, and utilized the "help>Request Support" option in RoboDK.

Thank you,

- Peter Shryock, (Jon Shryock, LLC / Shryock Fabrications)

Attached Files Thumbnail(s)

.rdk   JARVIS ES915 SPINDLE STATION Charlie Forum share 2.rdk (Size: 21.18 MB / Downloads: 228)
.rdk   JARVIS ES915 SPINDLE STATION Charlie Forum share.rdk (Size: 21.2 MB / Downloads: 200)
I'm sorry we took so long to get back to you. Sending us an email is best if you own a Professional license.

I believe you are looking for the option "Auto Comp". Activating this option in the Turntable optimization settings prevents the strange rotation around the tool Z axis you see in the projects you shared.
With this option activated, you mainly have to adjust these 2 settings:
  1. Shift turn (inside Turntable optimization, currently 180 deg) allows you to control the angle with respect to the XZ plane of the turntable root frame.
  2. Path to tool offset allows you to control the rotation around the Z axis of the tool. A Z rotation of zero will be vertical up (tool X axis pointing up). Also, selecting the +Z is important and makes the tool behave this way (you already had selected or was probably the default setting with your turntable setup).
See the attached image and your project with my edits.

I recommend you to set the "Allow a tool Z rotation of +/-" to 0 deg and I don't recommend you to use the "Smart Optimization" because it will take longer to calculate. The settings mentioned above should allow you to have full control about how you want to manage the turntable and give you fast results (for example if you are using +1M points).

Attached Files
.rdk   JARVIS ES915 SPINDLE STATION Charlie Forum share v3.rdk (Size: 20.76 MB / Downloads: 211)
Another important point I missed:

When you use a synchronized turntable with a robot machining project you should select the reference where your object is attached or a reference attached to your turntable (a reference frame that moves with your turntable). This image shows the correct settings. The previous project I provided you is not optimal for program generation.

The root point of the turntable is the position of the turntable reference when the axis of the turntable is set to 0 deg (E1). This needs to be configured properly on the robot controller (by calibrating the root point of your turntable) and properly imported in RoboDK (update the "My Mechanism Base" reference in your RoboDK project).

Then, when you generate the KUKA SRC code you should then see that A and E1 values are in sync to maintain the tool orientation static (A tool orientation compensates for the E1 turntable movement).

Also it is important to properly define your $BASE frame. When you generate programs for KUKA robots and you have synchronized axes you'll see the following code:
; ---- Setting reference (Base) ----
; Using external axes
; $ACT_EX_AX= 1
$BASE = {FRAME: X 0.000,Y 0.000,Z 130.175,A 0.000,B 0.000,C 0.000}
; --------------------------

You may need to configure the post processor to output the base definition inline, use the EK function (as shown in the output comments) or link to an existing BASE_LIST definition. We can help you with that if you have sample programs that show how your turntable was configured.

If you can share your Machine.DAT file we may be able to help you better (we are not KUKA experts but we may be able to help you troubleshoot).

Attached Files
.rdk   JARVIS ES915 SPINDLE STATION Charlie Forum share v4.rdk (Size: 20.76 MB / Downloads: 218)
Wow! So I never knew what the EK command was. But after reading your explanation, and doing research on it, I was able to make my robot do exactly what the simulation showed. We had been struggling with this for over a month, so I appreciate it a whole lot!

I went into my KRC2 controller, accessed my measurements folder and discovered some external axis information. 
I changed my root and offset data, and made sure RoboDk had the same references.
Afterwards, I went into the code and put a ";" in front of my $Base {frame} code to block it, then removed the ";" from the $Base EK line of code. 

Now it works! Thanks again.
Excellent! Thank you for your feedback. I just sent you an email with more information.

Let us know if you need help customizing the post processor to make sure the integration is properly done.
(10-07-2022, 11:08 AM)Albert Wrote: Excellent! Thank you for your feedback. I just sent you an email with more information.

Let us know if you need help customizing the post processor to make sure the integration is properly done.

Great timing on this post, I'm doing the same thing with our Kuka. Ours was setup through Sprutcam without using the EK base, now it looks like I'll have to change it over to an EK to use our calibration filter. Albert, is there some basic info you have for proper cell setup? I'll start hammering away at it this week either way. 

You don't need to use the EK function in your generated SRC files if your controller has been properly configured to use your external axes. If so, the default post processor of RoboDK should generate valid code for your setup and the $BASE is defined as the position of your fixture with respect to the turntable reference (the moving reference).

The following 3 files from your KUKA robot controller can help understand how the system is built or it allows you to customize your KUKA system/workspace to be used with your external axes:
  • KRC\R1\System\$config.dat
  • KRC\R1\System\bas.src
  • KRC\R1\Mada\$machine.dat
For example, the root position of your turntable should be in the MACHINE_DEF section of your config.dat file and look like this:
MACHINE_DEF[2]={NAME[] "DKP-400_1_40A_400V 1",COOP_KRC_INDEX 1,PARENT[] "WORLD",ROOT {X 1890.59399,Y 2672.26392,Z 2.61580,A -0.157900,B 0.0605000,C -0.128300},MECH_TYPE #EASYS,GEOMETRY[] "ObjectId = -2108611977"}
The index 2 of the machine definition (MACHINE_DEF) can be hardcoded in the bas.src file when you call this function:
BAS(#ex_BASE, 9)
The first index means you are setting up the base with external axes, the second index means what coordinate system you are using from the BASE_DATA. And this is how it is automatically setup by calling the BAS function:
        EX_BASE (REAL_PAR, 2 )

Therefore, you simply need to setup the base frame in your BASE_DATA[index] and call BAS(#EX_BASE, index).

The reason why the system would use this root point is a bit tricky as there could be many "machine def"s and many root points defined. 

This is the way I understand it works to find or modify the correct settings for your setup:
  • When  you do this in your SRC file:
    You are telling you want to use index 9 of your  MACHINE_FRAME_DAT
  • If you look at this MACHINE_FRAME_DAT you may see:
    MACHINE_FRAME_DAT[9]={MACH_DEF_INDEX 2,PARENT[] "DKP-400_1_40A_400V 1",GEOMETRY[] "ObjectId = -474606353"}
  • The MACH_DEF_INDEX  2 is saying that it is using MACHINE_DEF[2] (line above).
  • Finally, BASE_DATA[9] or $BASE definition in your SRC file could be just the offset of your fixture mounted on your turntable.
In short, BAS functions are setup functions that build the whole system based on these indexes with just one line. If you don't call the BAS function for your BASE I understand there is a default system index that is used.

Summarizing, you should do this in your post processor (assuming BASE_DATA[9] is the coordinate system you want to use and you want to use the machine definition number 2):
; you can use the following 2 lines to setup your system with external axes and your base frame:
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
BAS(#ex_BASE, 9)

; Alternatively, the following code would be equivalent in this example if EX_BASE is pointing to machine definition number 2:
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}

An important detail regarding the driver
If you want to make the KUKA driver work with your external axes system you should replace the $BASE definition by using the following lines:
  ; Edits to the robodksynch KUKA driver work with external axes:
  ; $BASE = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
  BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
Okay, so I imagine I should be able to put anything into BAS(#BASE, [number]) in RoboDK, and it would assume I have the settings correct on the robot to match that. Since it's been running Sprutcam for 2 years let's look at RoboDK first.

I replaced "BASE=BASE_DATA[1]" with "BAS(#ex_BASE,2)" to match my config.dat, but with no luck. I tried BAS(#BASE,2) as well - same results: importing "failed to compute nominal inverse kinematics" repeatedly. Double clicking on various MoveL commands says the targets are not reachable. Even the first MoveJ isn't reachable.

Is there a config.dat type of file inside RoboDK that I need to edit?

Here are my test .rdk and .src files.

Attached Files
.rdk   R2.rdk (Size: 1.56 MB / Downloads: 202)
.src   R2-5axis.src (Size: 2.8 MB / Downloads: 179)
I see a few details about how you built your cell that could be improved:
  1. You should add a coordinate system attached to your turntable and make it the Active Reference. This means it should be selected in your robot panel as the reference. I assumed it is at 0,0,0,0,0,0 location with respect to the root point (XYZABC).
  2. You should extend the joint limits of your turntable (E1, or joint 7 in RoboDK), so it accepts your working joints.
  3. I believe you wanted the rotation of your turntable to be swapped (joint sense was set to -1).
You can then import your SRC file (as pose targets) and you can make sure the movement it does is what you expect.

See attached file and image.

On the other hand, I would recommend you to import machining files as APT file.

Attached Files
.rdk   R2-v2.rdk (Size: 5.5 MB / Downloads: 234)
(11-02-2022, 03:17 PM)Albert Wrote: You can then import your SRC file (as pose targets) and you can make sure the movement it does is what you expect.
I'm able to import a SRC file as pose targets and simulate it as-is using the RDK file you attached, but the filtering doesn't work. I get a "can't filter target" on every single line (capture.png)
I can't export a useful APT file from sprutcam, so that doesn't seem to be an option. 

Also, in turntable parameters, if I select "use calibrate model" it says the robot is not calibrated - but the green dot is highlighted on the robot and the active reference frame as well. (capture2.png)

not sure why that posted, i had the wrong capture.png file. here is the error message when trying to generate a filtered program.


Users browsing this thread:
3 Guest(s)