Fractal Robots

Back in the late 1990s, Roy needed a way to generate test cases for a new dynamics algorithm he was developing: the divide-and-conquer algorithm.  His solution to this problem was fractal robots, which he defined to be any rigid-body system in which at least one of the following was fractal in nature: the connectivity, the geometry, or the configuration.  Some of these mechanisms turned out to be quite pretty, as you can see from the pictures below.  You can click on any fractal image to see the full-size version.

Tetra

small picture of Tetra in a flat configuration
625-link Tetra in a
flat configuration
small picture of Tetra in a linear configuration
625-link Tetra in a
linear configuration
diagram showing how Tetra is constructed
construction rule
for making Tetra
diagram showing how Tetra is constructed
construction rule
for making Tetra

This robot is an unbranched chain having both a fractal geometry and a fractal configuration.  It is constructed according to the rule shown in the diagram.  Starting with a line segment of length L, divide it into three equal portions, remove the middle portion, and replace it with a chain of three line segments that take the long way round a regular tetrahedron placed with one edge on the missing middle portion.  After one application of this rule, we have a chain of five line segments, each of length L/3.  A second application produces a chain of 25 segments of length L/9; and after two more applications we arrive at a chain of 625 segments of length L/81, which is the robot shown in the pictures above.

To complete the definition of this robot, we replace the line segments with rigid bodies (called links), and connect them together with revolute joints.  We then pull the chain out into a straight line, and call this configuration the robot's home position.  Every joint angle is zero in this position.  Finally, we work out where the joint axes have to be in order for the robot to be able to fold from its home position into its fractal shape.  This last step reveals two facts about the robot.

  1. The robot has two types of link: one with a skew angle of +α from the inboard to the outboard joint axis, and one with a skew angle of −α.  So they are mirror images of each other.  The two types are coloured different shades of blue in the pictures above; and in the diagram it is the middle link (coloured light blue) that is the mirror image of the other four.
  2. The joints divide into two groups.  Every joint in one group bends to an angle of θ1, while those in the other group bend to θ2.  We therefore define this robot to have a two-dimensional configuration space in which these two angles define the configuration.

So where is the fractal?  Did you spot it?  The fractal lies in the sequence.  In particular, it is the sequence in which the two types of link appear along the chain that follows a fractal pattern and gives the robot a fractal geometry; while the sequence of the two joint angles gives it a fractal configuration.

This robot is very pretty, and Roy had lots of fun finding visually attractive configurations, but in the end it was not used for algorithm testing.

Ball

small picture of Ball robot in crystalline configuration
2187-link Ball robot
in a crystalline
configuration
small picture of Ball robot in compact configuration
2187-link Ball robot
in a compact ball
configuration

This robot is a simple chain of identical links connected by revolute joints.  Thus, there is nothing about the robot itself that is fractal.  However, the configuration is fractal, and is defined as follows: let θ1 and θ2 be the two angles that define the configuration, then the joint angles are set according to the sequence θ1, θ2, something, θ1, θ2, something, θ1, θ2, something, and so on, where the 'something's follow the exact same pattern (i.e., θ1, θ2, something, θ1, θ2, something, etc., recursively).  The two pictures above differ only in the values of θ1 and θ2.  The ball-shaped configuration gives the robot its name, and is the configuration used as a test case in DCA part 2.

Dill

small picture of a robot called Dill in a general configuration

This is a branched tree containing links of different sizes, all connected by revolute joints.  It is defined as follows: dill(n,α) is obtained by extending the first link of a dill(n−1,α) to accommodate one more joint, and attaching another dill(n−1,α) to that link.  α is the skew angle between successive joint axes along a link, and is a geometric parameter of the robot.  dill(1,α) contains only one link, so dill(n,α) contains 2n−1 links.  All joints have the same joint angle, so the configuration space is one-dimensional.  The picture shows a 1024-link Dill in a general configuration.  Roy is not sure if this robot meets the technical definition of a fractal.  Nevertheless, it has some interesting properties that are relevant to testing the divide-and-conquer algorithm, so it was used as a test case in DCA part 2.