Calculating the workspace of a robot arm
After people ask “what good is a robot arm like Sixi?” the next question is always “how strong is it and how far can it reach?” To answer the reach question visually, I wanted to calculate the boundaries of the Sixi robot’s workspace.
What is a robot workspace?
What tools do we have to calculate the workspace?
Here’s a paper I found about an analytical method that starts with the Jacobian of a robot and goes from there: https://pdfs.semanticscholar.org/e5f8/d98ce96b1dfcce05966bed52a85a215cf0a9.pdf
Here’s another locked behind a paywall: https://www.semanticscholar.org/paper/Calculation-of-the-Boundaries-and-Barriers-of-the-a-Peidro-Reinoso/58ebab14786596a892eccf07f9a8750d40fa0a78
Looking closer at the abstract for each paper I find, there doesn’t seem to be a consensus on the best way to find the workspace boundary. Some even call for Monte Carlo methods (eg some fuzzy guesswork). A large part of the problem seems to be that the boundary is a concave hull, possibly even with unreachable interior pockets (like a donut hole). These are much harder to compute than a convex hull.
I have Robot Overlord and its IK/FK solutions. I could move the arm through the entire workspace on the planes I care about and plot points in a giant table of data, then feed that to something like MATLAB and ask it to generate the best-fitting outer perimeter. MATLAB has a boundary() method that should work pretty good.
While waiting for MATLAB to install, I generated the XZ and XY plots.
The XY workspace plot
For the XY plot I made the arm stretch out as far as possible, turned it around the base, then reach in as close as possible and turn the other way. That meant turning the anchor, the shoulder, and the elbow. This was all done with Forward Kinematics, which can easily calculate the position of the robot’s hand. I swept through the range, moving 1 degree at a time, and dumped the hand positions into a CSV file, which I then graphed in OpenOffice Calc. The result looks like a Pacman.
The XZ workspace plot
For the XZ workspace plot I repeated the process by turning the shoulder, the elbow, and the wrist.
MATLAB was crazy slow and not needed for the plot I wanted. I guess it would be good if I was drawing a 3D envelope? But I’m not, so it’s overkill.
You can find the code to generate the plots in https://github.com/MarginallyClever/Robot-Overlord-App/blob/master/src/test/java/com/marginallyclever/robotOverlord/MiscTests.java. There is a plotXZ() and a plotXY() that generate the CSV files needed for each graph.