Modular Robots

Tags: autonomous, distributed, modular, nasa, robots

When I first arrived at NASA I joined the Evolvable Systems Group, which focused on using genetic algorithms and other non-deterministic search methods to search in high-dimensional spaces for solutions to engineering problems.

Greg Hornby, one of the other members of the group, had a long-standing interest in robots and had received some funding to start a research project in automated deisgn of robot morphologies and controllers.  In order to make the problem tractable, he wanted to begin with a set of reconfigurable modules that could be assembled in a large but finite variety of ways. The idea was that he would build the optimization system and I would build prototype hardware modules that he could use to verify his designs.

This picture shows a simple quadrupedal walking robot assembled from the first-generation modules.  There are eight joint modules, two hub modules at the two ends, and one power module in the middle, along with four foot attachments.  The modules form an ad-hoc network, and the hub modules act as packet switches, learning the topology of the robot using a spanning-tree algorithm.  This allows for a variety of programming models, including pure peer-to-peer models and pure master-slave models.  The power module also has a RS-485 port that allows a computer to act as a node on the network.

This particular quadruped configuration was the subject of a simple study in optimization of the controller for a fixed morphology.  We published a CEC conference paper on the results.  As is often the case with GA-optimized systems, the results were a little surprising.  We optimized for gait efficiency, and the optimal gait turned out to be a highly-nonintuitive form of crab walking that exploited the slight asymmetry between the front and rear of the robot.  (Look closely again at the picture and you'll see what I mean.)  The first time that I tried to “clean up” the results of the optimization by hand it broke the gait entirely, because I'd accidentally removed the critical asymmetry!