Robot, I command thee!

A principle challenge in any underwater swarm robotics project (CoCoRo) is collective motion – robots that lose one another can’t act as a swarm, robots that don’t move can’t explore their environments and, whilst not as much of an issue, robots that crash into each other simply don’t inspire confidence. This week Christoph Moeslinger (below left, unpacking boxes of robots in front of a pool), Tobias Dipper and myself met for a 3 day workshop in Graz, Austria, to address exactly this problem. I have simulated various robotic shoaling strategies over the last 6 months and believe that having robots communicate their headings with one another is essential to providing well-aligned shoals. Christoph has a different strategy that relies only on passive observation, and has used heuristic search to find parameters regarding reactions to observing particular relative orientations of neighbouring robots that provide shoaling. This too was in simulation.

The workshop’s purpose was to implement these algorithms on Lily AUVs. This was my first experience of programming actual robots, and it was quite an education. Far different from programming in simulation, programming robotic hardware is comparatively slow and tedious (though still entertaining, when not frustrating). It is difficult to bug check code, there is no convenient debug function for stepping through code and inspecting state. Retrieving debug information from the robots requires something like radio frequency communication, where the length of messages is limited, and where the robot’s ability to send can be interfered with by the very code you are attempting to test. In a word, it is much much harder to write code on a real robot than it is for a simulation. Part of our problem was that we were writing not only the algorithmic code we wished to run, but the operating system that the robot needed to run it! Calibrating bluelight sensor systems to filter out background light, creating controllers that let a robot hold a particular heading, writing code to compensate for magnetic fields within the robot that interfered with the compass when trying to determine a robot’s heading. This is largely taken for granted in simulation, where the environment and simulated hardware is free of noise unless you choose to simulate it. The real-world is a very different place.

The workshop was, sadly, only partially successful in achieving its goals – we were too ambitious in what could be accomplished in the time available. Both Christoph’s and my algorithms were able to provide robot aggregation (bring the robots together in one place). Better yet, our algorithms are compatible, a shoal comprised of robots running both succeeds in aggregating. Alas neither of us got proper shoaling working, that will have to be a workshop for another day‚Ķ Lastly, Graz university is gorgeous, this is their main building: