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:

Here’s another locked behind a paywall:

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.

plot of sixi xy workspace
Dimensions in centimeters. Click for the full image.

The XZ workspace plot

For the XZ workspace plot I repeated the process by turning the shoulder, the elbow, and the wrist.

Dimensions in centimeters. Click for the full image.


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 There is a plotXZ() and a plotXY() that generate the CSV files needed for each graph.