In this project we use a Kuka KR10 R1100 sixx to 3D print using PLA with an E3D Titan Aero extruder end effector.
Kuka KR10 R1100 sixx
E3D Titan Aero extruder
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Mounting the End Effector
The flange of the robotic arm allows for mounting end effectors through the use of seven metric caphead screws. As the Titan does not have this kind of interface, a mount was designed and 3d printed to allow it to be attached to an adapter as shown above. The mount was designed to hold a fan in place and redirect some air directly on to the end of the extruder hotend.
Step 2: Mounting and Configuring the Smoothieboard
The extruder must be connected to a control panel that processes the G-Code and sends the extruder its commands. Due to the range of motion of the robot, the Smoothieboard was attached onto the robot rather than on a table. The mount for the smoothieboard and the Extruder were designed to be easily removable to cut down on the amount of time spent changing end effectors. Configuring the smoothieboard was done using the default values for the Titan Aero.
Step 3: Preparing RoboDK
RoboDK is the intermediary between the Robot, the Extruder, and the G-code. In order to get Robodk working with the robot, we installed the RoboDK driver for Kuka robots which can be found in this link https://robodk.com/doc/en/Robots-KUKA-RoboDK-driver-KUKA.html. Once that has been setup, commands can be sent to robot through RoboDK by running the RoboDKsynch program on the teach pendant. In the RoboDK application itself, a new project must be created and the robot being used must be selected from the online library under file. Right-clicking the robot in the project window will bring up the option "Connect to robot". Once that has been selected, the IP and port of the robot must be entered and a connection will be made between the robot and the computer.
Step 4: Creating a 3D Print Project
Now that commands can be sent to the robot through RoboDK, we can start getting it to 3D print. Under the Utilities tab, the option to create a 3D print project appears. There are two ways to go about creating a print project, one method is to slice your 3D model in whichever slicer you prefer and to export it as a gcode file. This file can be used to create the project by changing the path input to NC File. The other option is to add the 3D model directly into robodk and having it slice it for you by using the path input 3D print object. We went with NC File option in order to have more control over the quality of the print.
In the top left of the Print Project window, it asks for the Robot, Reference Frame, and Tool. We have already added the robot, now we have to add the tool and reference frame. The reference frame is the surface of the table and getting it to the right location was done by jogging the robot into place and using the "Connect to robot" window to have the robot in the simulation copy the pose of the actual robot. The tool is created by right clicking the robot in the project window and selecting "Add Tool (TCP)". Right clicking the newly created tool in the hierarchy and selecting option will allow us to move the tool TCP so it accurately represents how far it is from the flange of the robot. A big part of configuring the tool is making sure it is rotated the same amount as the actual extruder. This means that the X axis of the Tool should be parallel to the actual extruder.
Back in the 3D project window, we have now filled out the Robot, Reference Frame, Tool, and Path input windows. Now, selecting update will have RoboDK check if it is possible to make this print. We had to do multiple attempts of changing the location of the reference frame and changing the path to tool offset before RoboDK would declare the project a success. The largest change that was required was changing the path to tool offset to ABB/KUKA/Nachi and setting the Second Rotation to -90. This moved the flange in a way that the extruder was facing the correct direction.
Once the update has succeeded, a 3D print program is created and testing the printing can begin.
Step 5: Extruder Script
After attempting to run the newly created 3D print program, repeated errors that "Program Extruder() does not exist". This error occured because we had created a link between RoboDK and the robot but there was no software connection between the Extruder and either the robot or RoboDK. After doing some research, we ruled out directly connecting the extruder to the robot due to the memory issues that the robot has. Therefore our only option left was to connect the Extruder to Robodk. The smoothieboard is able to receive gcode commands through telnet and Robodk is attempting to pass the amount of filament to be extruded to the extruder. Using these two pieces of information, a python script was created called Extruder that accepted the amount of filament to be extruded and then used that number to send a line of command to the smoothieboard. This script was then added to the hierarchy window and solved the error. A supplementary script was later created called M_RunCode to handle the commands to turn off and on the fans.
Step 6: Configuration
Once a 3D print project was able to be successfully run, it was time to begin configuring the settings of the print and the setup of the environment. Changing the print settings ran into the issue of under and over extruding that is likely a result of the lack of communication between the robot and the extruder. During testing, we do not run the robot at full speed but the extruder is being sent commands that assume that the robot is moving a full speed. This meant that the script had to be changed after every change in speed. The other contributor to the uneven prints was the table being used to print on. RoboDK assumes that the table is flat and sends instructions under that assumption but the table was not flat. This meant the robot dragged the extruder across the table and ruined the print. Printing at a higher distance off the table stopped the dragging but decreased the quality of the print. We were able to get a relatively flat surface through the use of a table that could be leveled and a plank of wood but this decreased the size of the bed considerable.
Besides these problems, we addressed issues in temperature and fan speed by creating a python script to handle them and changing the position of the extruder during the print was handled by changing the settings in Preferred joints under the 3D print project window.