Neural Networks, Robotics, Evolutionary Algorithms, Neural Science, Cool Stuff

Personal Website of Christian Rempis

Octavio SpinalCordManager

Control Software and Linux Kernel Driver for the 6-Legged Octavio Walking Machine

The Octavio robot is an autonomous walking machine with 6 to 8 legs. It was developed at the Osnabrück University between 2006 and 2010 in the Neurocybernetics groups of the Institute of Cognitive Science. Details on the machine and its contributons can be found at the Octavio homepage:

Octavio Homepage

To program, control, calibrate and maintain the robot with a PC, a software was needed that allows a real-time interaction with the firmware of the Octavio robot. For this, the SpinalCordManager and a corresponding Linux kernel driver have been implemented.

The Linux kernel driver (written in C) defines three new Linux character devices through which messages can be send via USB protocol between the robot and the control application. The three devices are for (1) commands to send, (2) messages to read and (3) the continuous data stream of the communication bus. Embedded to the Linux kernel space this driver is fast enough to reliably exchange information in real-time. The devices can be used to configure the distributed controllers on the legs of the Octavio robot, but also to monitor the full data on the data bus of the robot (called the Octavio Spinal Cord). This data can be piped into a file for later examination, or it can be passed to the SpinalCodeManager application to interact with the robot in real-time. This allows a Hardware-In-The-Loop setup, in which, for instance, the robot control can run on the PC for testing purposes. For this, the driver also provides an extension to execute neural networks directly in the USB driver, so that the networks can be executed without delays (as would occassionally happen in user space). This extension was implemented by Arndt von Twickel. The SpinalCordManager, on the other hand, is a Java application that provides a graphical user interface on top of these new devices. It allows to interact, observe and analyze the internal states of the robot without the need to work directly with the low-level data. The functions reach from recording of the communication of the processor boards in real-time, the later analysis of such recorded data streams, the control of the motors, the upload of neuro-controllers to the processor boards, debugging of the communication, calibration of the sensors, and much more.

  • SpinalCordManager Main Window:
    The table shows the content of the current frame of the spinal cord communication bus of the robot. The bus is made of master information (of the current, dynamically assigned master controller) and up to eight leg controllers. The source for this data can either be a previously recorded file or the USB data device connected to the physical robot. The data stream is automatically separated into complete frames, each representing the entire bus communication of a single communication frame. The content is shown in a table, whose entries have specific meaning, e.g. the status of the master controller (red, 1 byte), the status information of the legs (orange, 1 byte, for instance the current frame number, sync markers), sensor readings (yellow, 2 bytes) or neuron activations (bluw, 2 bytes). The view mode can be switched between raw bytes, hex, integers and interpreted tokens. The data streams are buffered in a large history, that can - at any time even during real-time observations - be played back, e.g. to isolate improper behavior. The data in the history hereby can be played back to replicate an observed behavior.
  • Raw Command Window:
    Allows to send raw binary commands to the robot. The command is enqueued in the linux driver and written to the communication bus at the correct time window, i.e. the time segment reserved for incoming commands.
  • Value Plotter Window: Creates time-series plots of all selected channels. The desired data channels can be selected by clicking on the corresponding fields in the table representing a communication frame.
  • Deployment Window: Can be used to read and write raw bytes or words to the EEPROM of the Octavio controllers. This can be used to persistently store configuration values, such as sensor mappings and processing modes.
  • Leg Control Panel: Allows the direct control of a single Octavio Leg when the robot is connected. The sliders are automatically converted to appropriate control commands and passed to the USB driver to be written on the communication bus. This window is primarily used to test the function of a leg.
  • Sensor Mapping Window: Provides mechanisms to calibrate the sensors so that their output is mapped to a desired range. This is necessary, when the sensors are misaligned, which can happen from time to time. The window also provides an automatic mapping procedure, where the minimal and maximal angle values are autonomously identified by driving the single joints slowly into their bed stops.
  • Raw Byte Observer: This panel is used to observe the reply channel of the robot, i.e. the data comming as reply from commands. This panel is merely used for debugging and to interpret error messages if set commands have failed.

Related Publications:

  • A. von Twickel, M. Hild, T. Siedel, V. Patel, and F. Pasemann, “Neural control of a modular multi-legged walking machine: Simulation and hardware”, Robotics and Autonomous Systems, vol. 60, no. 2, pp. 227 - 241, 2012.


  • DFG Project Octavio: Pa 480/6-1