Concept
Tool Gauge was supplying a customer with a fiberglass filled part with 10 nutplates installed. That amounted to 20 riveting operations in total. Initially, the customer planned to use 4 1/8” pop-rivets and 16 3/32” pop-rivets. To our team that was undesireable:
- Two different sized rivets means changing rivet guns or swapping out anvils mid-cycle
- Different fasteners increases the odds of mixing the hardware up mid-cycle We proposed a redesign using all 1/8” rivets. The customer opted for all 3/32”.
3/32” rivets are small. They are the smallest commercially available rivets I can find in distribution, smaller than any metric rivets in case you were curious. This would not be a problem except few manufacturers supply tools capable of using 3/32” rivets.
After some investigation, we were hoping to integrate a Gesipa GAV8000 into the end of arm tool for a UR3. The discussions for this are still ongoing as of time of writing so there is still the possibility this will be used at a later date. A GAV8000 would allow our team to install all rivets in nearly 60 seconds, a significant time in that parts could be assembled in cycle with the injection molding machine. Any longer would require assembly at a later date, increasing the overhead costs and lead-time.
Implementation
Tool Gauge has access to a few fun toys, some of which were unnecessary for this project specifically, but are underutilized and lessons here could enable ambitious designs at a later date.
CAD
A Milwaukee M12 Rivet Tool was being used to manually install rivets. It was scanned using a Faro Laser Line Scanner and uploaded into CATIA.
Using the point cloud as a reference, an end of arm tool was sketched and 3D printed within a day. The tool plus a force-torque sensor was then mounted to a UR3-CB3 , with an estimated end of arm tool mass right at the threshold of 3kg for that model.
Demo
After a week of troubleshooting, assembling, and reprinting some components in need of reinforcement, a reliable process was established:
Noteworthy Conclusions/Lessons for Future Projects
There are a few takeaways that stand out in this integration. Some on the hardware/CAD side and others on the robotic programming side.
- Hardware:
- 3D Scanning is a practical means to integrate hand-tools into robotic tooling
- Thoughtful 3D printing can enable tools that are both rigid and light
- Programming:
- Waypoints and Variables can have similar functions but are not interchangeable:
- Waypoints are easily defined manually. They can be taught through manual manipulation of the robot
- Variables can be manipulated by the software/programmer, but can only be defined in code. Variables cannot be defined through manual manipulation
- It kind of goes without saying (if you have programming experience), but variables can be integers, floats, and strings in addition to vectors.
- The universal robot ecosystem does not treat waypoints as variables. There is a workaround:
- Start the program with a list of waypoints hidden in an if: False statement.
- The if false loop will never be run within the program
- This allows you to register and save waypoints without ever sending the robot to those points
- This saves the waypoints at the top of the program, making them easier to find for any engineers who need to follow up on your work
- Assign the waypoints to similarly named variables
- I recommend assigning these as initialized variables (it’s a program option)
- These variables can be manipulated and changed programmatically
- Start the program with a list of waypoints hidden in an if: False statement.
- Mild in-process learning is possible: every cycle the machine compares the actual location it riveted to the programmed location and adjusts
- Some basic knowledge of the UR Scripting Language can enable shorter, more flexible code. The riveting program is a simple 20 part loop comprised of a few switch-case statements, an if statement to transition from top to front, and some tool point offsets using transforms.
- Waypoints and Variables can have similar functions but are not interchangeable: