---
bibliography:
- 'cpgreferences.bib'
---

Introduction {#introduction .unnumbered}
============

We live in an exciting time for robotics. The computing revolution that made powerful processing technology widespread, has contributed to the rise of domestic 3D printers, and being able to manufacture customized structures at a low cost, actuate them with off-the-shelf hardware, and control them with computers, has proven to be a winning combination for robotics. New designs keep appearing each day, in many occasions taking inspiration from nature; this is the case of snake-type or legged robots, among others.

But biologically-inspired robots often have many degrees of freedom that present as a true challenge for traditional control approaches (i.e. centralized systems that compute motion patterns globally and control an articulated robot at the joint level)@ijspeertCPGreview. Whilst it is possible to solve some of those problems for controlled environments, many algorithms are simply not prepared for the real world@ekeberg93 [@HooperCPGs00]. It is here where neuroscience is answering many questions, and we are starting to see real world robots that not only look like, but also interact with the environment just as living creatures do.

The mechanisms behind higher level motion planning in animals -cognition- have been a subject of research for many decades, but the exact way in which the brain operates is yet a subject of speculation. What we know is that evolution has developed efficient ways to abstract very complex locomotion patterns, and turn them into simple control signals that can be effortlessly handled by the brain@ijspeertCPGreview [@ekeberg93; @HooperCPGs00]. Given the intrinsic periodicity of locomotion, it is reasonable to think that neural circuits do not need to explicitly control the position of every articulation, but rather modulate higher level parameters such as the amplitude or frequency of each gait@ijspeertSalamander [@HerreroBioInspiredStrategiesModular11].

Often involved in motion control, Central Pattern Generators (CPGs) are biological neural networks that produce rhythmic output patterns without the need for sensory feedback. This means that either individual neurons or the way they are connected to each other, can lead to oscillatory dynamics that are useful for various biological functions (i.e. walking gaits, respiration, or even circadian rhythms). These oscillatory neural circuits have been studied in many animals such as stick insects and cockroaches@simNeuralDynRoboticLeg, sea angels@clione98, fish@ekeberg93 [@crespiFish08] and other vertebrates such as the salamander@ijspeertSalamander, cats@lynxRobot14 and hardingwilliam@example.net. In the case of vertebrates, CPG circuits involved in locomotion are often situated in the spinal cord.

These pattern-generating neural networks as observed in biology have inspired roboticists, and it has already been possible to replicate locomotion behaviours in many robot designs. Some examples are the salamander-inspired *Pleurobot*@ijspeertSalamander from EPFL, quadrupeds like *Lynx*@lynxRobot14 from the same university, the worm-like *Cube Revolutions*@HerreroBioInspiredStrategiesModular11 from Univ. Autonoma de Madrid, or the stick-insect robot *Hector*@hector12 from Bielefeld University.

Computational Models of CPGs
============================

Controllers based on central pattern generators can indeed be very robust against uncertainties in the environment (i.e. autonomous stepping over an obstacle that appears in the way)@herreroNonLinearMatsuoka10, but whenever a robot needs to interact with the real world, delays in its response may still have dramatic consequences. Thus, real time decision-making is crucial for these sort of interactions, so detailed simulations of biologically realistic CPGs (i.e. spiking networks of Hodgkin-Huxley neurons) are frequently deemed too computationally intensive for robot control. Rather, simplified models of CPGs have been developed in order to facilitate their real-world implementation and to meet those strict timing requirements.

Biological Neural Networks
--------------------------

In this section we are going to focus on CPG implementations that remain close to biology by modelling the dynamics of neural networks for motion control.

The first model that we are going to study is the *Rulkov map* type neuron. Whilst they are more efficient to compute than continuous time models, these neurons can still exhibit rich spiking dynamics (see Fig. \[fig:rulkov\]) that allow for implementations of central pattern generators that closely resemble data from experiments with real hardingwilliam@example.net.

![Typical wave forms of the spiking-bursting behaviour generated by the *Rulkov map* for two different sets of parameters. From @rulkov02 by N.F. Rulkov.<span data-label="fig:rulkov"></span>](rulkov){width="0.85\linewidth"}

The basic unit of a biological CPG is the *half-centre*, which consists in two neurons (or populations) that cannot generate rhythmic activity by themselves, but may oscillate when coupled reciprocally (see Fig. \[fig:rulkovhalfcenters\]).

![CPG half-centre implemented with the Rulkov map model. Neurons $R$ and $P$ negotiate a common rhythm through mutual inhibition, which results in anti-phase synchronization. The motoneuron $M$ produces a control signal (blue), an oscillation of the controlled joint. Reprint from @carron2011novel by F. Herrero Carrón.<span data-label="fig:rulkovhalfcenters"></span>](rulkovhalfcenters){width="0.8\linewidth"}

A half-centre is said to work in *escape* mode if the off neuron turns on after *escaping* from inhibition, and similarly, the *release* mode means that the neurons turn on after *being released* from inhibition. Variations in the properties of each synapse can produce very different coalition results in a broad range: from the complete synchrony of firings (in counter-phase or coherent phase) to completely decoupled oscillations@ijspeertCPGreview [@ekeberg93; @HooperCPGs00; @carron2011novel; @herreroDynamicalInvariants10].

In legged systems, for example, flexion and extension of a joint should never occur simultaneously. We can achieve this by using pairs of CPG half-centres coupled in anti-phase to control them (see Fig. \[fig:halfcenters\]). As in nature, flexor and extensor muscles alternate to achieve full oscillatory patterns.

We have already seen the *Rulkov map*, but another neuron model that has been used in plenty of research in this field is the *leaky integrator* type. This non-spiking model is based on a set of differential equations that are capable of representing either individual non-spiking inter-neurons or the firing rate of a population@simNeuralDynRoboticLeg [@neuromechTetrapodCoord; @MantisModelPostures].

![(a) Two coupled half-centres, for the control of flexion ($V_3$) and extension ($V_4$) of one of the joints in a robot leg. Excitatory synapses are represented as white triangles, and inhibitory synapses with black circles. Output wave forms (b) were obtained with the *leaky integrator* neuron model. The nature of the sensory input at $V_1$ and $V_2$ will be studied in further sections. Reprint from @simNeuralDynRoboticLeg by M.A. Klein et al.<span data-label="fig:halfcenters"></span>](halfcenters){width="0.68\linewidth"}

### Controlling locomotion with synaptic gating

Coupling between CPGs is often achieved with the direct excitation/inhibition of neurons between each oscillatory source. Synaptic gating, however, allows for richer interactions, as it provides neurons with the ability to dynamically alter the strength of some other synapse within the network. This means that it can either facilitate or suppress the communication between two other neurons. An example implementation that demonstrates this effect is shown in Figure \[fig:gating\].

![Gating effect of a context neuron $C_o$. $C$ is a control neuron that oscillates. Synaptic conductances can be set in such way that $C_o$ controls whether neurons $G_1$ and $G_2$ operate within or outside their range, hence switching their ability to propagate the activity from $C$ any further. In this case only $G_2$ can conduct when $C_o$ is silent. But when $C_o$ becomes active, it excites $G_1$ (allowing it to conduct) and inhibits $G_2$. Reprint from @simNeuralDynRoboticLeg by M.A. Klein et al.<span data-label="fig:gating"></span>](gating){width="0.65\linewidth"}

These methods make it possible to achieve a wide range of modulations in the locomotive patterns produced by a biological neural network@ijspeertCPGreview [@ekeberg93; @simNeuralDynRoboticLeg]:

-   The frequency of oscillation can be controlled by varying the input current for neurons within a CPG half-centre.

-   Gating the output of the CPG allows for amplitude-controlled oscillations.

-   Also, an asymmetric modulation of the couplings between two half-centres can produce variations of the duty cycle.

There are many examples of real-world robots that use CPG implementations based on biological neural networks. The *Rulkov map* neuron model has been demonstrated for the control of snake-type robots@carron2011novel [@rulkovUnderwater10] as well as in robots with limited wheels that move by means of hardingwilliam@example.net. The *leaky integrator* neuron model has been used in robot controllers for quadrupeds@neuromechTetrapodCoord and hardingwilliam@example.net.

Many other biological models are available@ijspeertCPGreview [@HooperCPGs00], and incorporating richer dynamics such as *decaying synapses* to these networks can also be useful to better replicate what is observed in hardingwilliam@example.net.

Coupled oscillator networks
---------------------------

Another approach towards the implementation of central pattern generators in robots is to move away from biology, and make use of mathematical models of synchrony such as the *Kuramoto* oscillators. Rather than trying to explain rhythmogenesis, these models focus on the study of the effects of inter-oscillator couplings, and assume the presence of underlying oscillatory mechanisms.

Even though the models are simple, it is still possible to replicate many of the characteristics that appear in nature. For instance, *Salamandra robotica* from EPFL (see Figs. \[fig:cpgsalamander\] & \[fig:salamanderTransition\]) successfully demonstrated a smooth transition between the walking and swimming hardingwilliam@example.net.

![Connectivity within the controller of *Salamandra robotica*. The arrangement of oscillators mimics the spinal cord of a lamprey@ekeberg93 where salamander limbs have been added. Sensory feedback is not incorporated into the CPG in this case. Instead, each actuator has a PD controller that ensures an accurate motion. Reprint from @ijspeertSalamander by A.J. Ijspeert et al.<span data-label="fig:cpgsalamander"></span>](cpgsalamander){width="0.89\linewidth"}

The controller of *Salamandra robotica* is very interesting indeed, as it was built upon four biological hypotheses:

1.  The salamander has a body CPG that spontaneously produces traveling waves (swimming gait) such as the one produced by the lamprey@ekeberg93 when activated with a tonic drive signal.

2.  Limb CPGs have lower intrinsic frequencies than the segments or body oscillators.

3.  When the limb CPG is activated, it forces the whole system into walking mode. To achieve this, $limb \rightarrow segment$ couplings are kept stronger than $segment \rightarrow segment$ interconnections.

4.  Limb CPGs cannot oscillate at high frequencies, so they saturate at high levels of drive. The natural swimming gait can then take over control.

Altogether, the resulting controller can efficiently actuate two different gaits in a 10 DOF robot with only one input signal (see Fig. \[fig:salamanderTransition\]). The direction of locomotion can also be controlled with an additional input signal that modulates the oscillations of each side of the spinal cord.

![Gait transition from walking to swimming in *Salamandra robotica*, for one side of the spinal cord. A walking gait arises at low levels of drive. When limb oscillators saturate, the swimming gait takes over control. The red vertical markers show both a standing wave for walking and a traveling wave for swimming. Reprint from @ijspeertSalamander by A.J. Ijspeert et al.<span data-label="fig:salamanderTransition"></span>](salamanderTransition){width="\linewidth"}

For this study we wanted to better understand how these oscillator networks worked at a lower level, but the ten degrees of freedom of the salamander robot discouraged a re-implementation. Instead, we found another project from the same laboratory: a fish robot with three degrees of freedom (see Fig. \[fig:fishcpg\]).

![Diagram of the CPG-based controller for a 3 DOF fish robot. The three oscillatory centres control one caudal and two pectoral fins. Sensory feedback will be further discussed in the next section. Reprint from @crespiFish08 by A. Crespi et al.<span data-label="fig:fishcpg"></span>](fishcpg){width="1.02\linewidth"}

The CPG model for the fish robot is indeed much more simple than the one of the salamander, but on the other hand it can show in a more intuitive way basic concepts such as oscillation coupling and rhythm negotiations (see Fig. \[fig:fishcpglimitcycle\]).

![CPG limit cycle for the fish robot. The upper panel shows the output wave forms for the three reciprocally-coupled oscillators. Following random initial conditions, the system quickly stabilizes into coherent synchrony. The steady state is also rapidly reached after adding random perturbations to the state variables ($r$,$\phi$,$x$) at $t=2s$. Reprint from @crespiFish08 by A. Crespi et al.<span data-label="fig:fishcpglimitcycle"></span>](fishcpglimitcycle){width="0.9\linewidth"}

Among other robots that use mathematical models of synchrony in the form of coupled oscillator networks are quadrupeds like *Lynx*@lynxRobot14 also from EPFL, and *Pneupard*@CPGstretchReflexPneumaticQuadruped from Osaka University.

Incorporation of sensory feedback
---------------------------------

In the case of the fish robot, sensory feedback was incorporated by directly modulating the parameters within the CPG according to predefined gaits. For instance, the fish robot has two light intensity sensors, one on each side, that were used to achieve a photo-taxis behaviour with a Braitenberg vehicle approach@crespiFish08 (the oscillation of each pectoral fin is modulated by the light intensity perceived in the opposite side; this has the effect of the robot turning towards light sources in the environment).

Whilst such an approach can work well for simple neural networks, a more interesting and biologically realistic method would incorporate sensory information by encoding system-wide behavioural reflexes into the network itself.

For instance, lets recall that both the salamander and fish robot rely on PD controllers that ensure that each motor joint reaches a target angle, calculated by the pattern-generating network. Those PD controllers are indeed using information from rotation encoders at the joint level, so why not directly incorporate that information into the CPG instead? In nature, this simple form of sensory feedback is at the muscular level, where *strech* or *edge* cells can sense muscle contractions, and feed them back into the network. In humans, these cells play a very important role in the spatial perception of the body (proprioception). This approach is also much more robust against uncertainty in external perturbations than open loop CPG controllers.

However, until very recently this feedback concept could not be exploited in real robots due to the elevated cost of high precision rotatory encoders. Instead, virtual stretch cell models (such as the *linear Hill muscle model*) were developed in order to achieve realistic *neuro-mechanical* simulations. This concept is discussed in Figure \[fig:neuromechanical\].

Other simple forms of sensory feedback are *foot contact* sensors. Recent studies have shown that hair fibres present in the feet of rats (*carpal vibrissae*) behave as contact sensors that influence the kinematics of hardingwilliam@example.net. Whilst the incorporation of such feedback into CPG networks is far from trivial, these kind of sensors have the advantage of greater simplicity and lower implementation cost than rotatory encoders.

![For a lamprey-like robot, **A** shows the forces acting on link $i$: muscular torques $T_i$ and $T_{i-1}$, water forces $W_i$, and inner forces from neighbouring links $F_i$ and $F_{i-1}$. In **B** we can see the schematic representation of three joints. Each spring-dampener assembly is used to model a single muscle and its interaction with water forces. The spring constants are changed by the activity of the corresponding motoneuron in the CPG. With this model, it is possible for the network to change both the total bending force and the local stiffness of each segment in the body. Reprint fom @ekeberg93 by O. Ekeberg.<span data-label="fig:neuromechanical"></span>](neuromechanical){width="0.9\linewidth"}

The last sensory input related to locomotion that deserves a mention is the vestibular system. Placed in the inner ear of most mammals, it plays an essential role in balance. One of the best examples is bipedal walking, where equilibrium perception is seamlessly incorporated into the neural mechanisms responsible for motion control. CPG-based robot controllers can also benefit from this form of input by using off-the-shelf accelerometers.

As a final remark for this section, we must say that CPGs often have many parameters that need to be finely adjusted in order to achieve an efficient locomotion. The automatic entrainment of these models is still a subject of research@onlineLearningCPGmodular [@herreroFlexEntrainment11; @LiuCPGworkspaceTrajectoryAdaptiveLocom11].

Though there is plenty of software available for the simulation of robots, only few combine environment physics with neuron dynamics. The free version of *AnimatLab*[^1] provides a nice toolbox for basic experimentation, but more powerful open-source tools such as *neuroConstruct*[^2] and *geppetto*[^3] are being developed thanks to the efforts of the *OpenWorm*[^4] project.

Experiments with a 3 DOF hexapod
================================

For the experimental part of this study, we decided to implement a CPG controller for a small 3D-printed hexapod robot[^5] (see Fig. \[fig:hexapod\]). Since it has three degrees of freedom, it was the perfect candidate for a re-implementation of the controller presented in *"Controlling swimming and crawling in a fish robot using a central pattern generator"* by A. Crespi et al.@crespiFish08

![Micro-hexapod used for the experiments. The robot is composed of eight 3D-printed parts (in white and green), nine screws, and three servomotors (blue). The three degrees of freedom consist in two pairs of mechanically-coupled legs at each side, and also a middle joint that selects which of the sides makes ground contact.<span data-label="fig:hexapod"></span>](hexapod){width="\linewidth"}

Our motivation for using the fish model as a reference implementation was that its oscillatory network model is very similar to the one employed in *Salamandra robotica*@ijspeertSalamander from EPFL. With three degrees of freedom instead of ten, the fish robot seemed like a better choice as a didactic exercise.

The CPG is built upon amplitude-controlled phase oscillators derived from the Kuramoto model of synchrony. Next, we will show the set of differential equations that define the network:

$$\dot{\phi_i} = \omega_i + \sum\limits_{j}{[\omega_{ij} r_j \sin{(\phi_j-\phi_i-\varphi_{ij})}]}
\label{eq:phidoti}$$

$$\ddot{r_i} = a_r (\frac{a_r}{4} (R_i-r_i)-\dot{r_i})
\label{eq:rddoti}$$

$$\ddot{x_i} = a_x (\frac{a_x}{4} (X_i-x_i)-\dot{x_i})
\label{eq:xddoti}$$

$$\theta_i = x_i+r_i \sin{(\phi_i)}
\label{eq:thetai}$$

Where:

-   $\theta_i$ is the output angle of each oscillatory centre

-   $\phi_i$, $r_i$ and $x_i$ are the state variables that encode the variation in time of every phase, amplitude and offset

-   The control parameters for each oscillator are $\omega_i$ (natural frequency), $R_i$ (target amplitude) and $X_i$ (target offset).

-   $a_r$ and $a_x$ are constant positive gains for Eqns. (\[eq:rddoti\]) and (\[eq:xddoti\]). In our case: $a_r = a_x = 2\ rad/s$.

-   Finally, $\omega_{ij}$ and $\varphi_{ij}$ are respectively the coupling weights and phase biases that determine how oscillator $j$ influences oscillator $i$.

The only change we made to the original equations in @crespiFish08 was to replace the cosine function in Eqn. (\[eq:thetai\]) with a sine. That way, the reference positions of the joints in the hexapod robot -corresponding to zero offset- match with the lateral segments being perpendicular to the body, and with a flat position of the middle segment (the same posture as in Fig. \[fig:hexapod\]).

Equations (\[eq:rddoti\]) and (\[eq:xddoti\]) are critically-dampened second-order differential equations with stable fix points $R_i$ and $X_i$ respectively. With them it is possible to smoothly modulate the amplitude and offset of the oscillations in real time.

The three oscillators $i=1,2,3$ correspond to the middle, left and right joints of the robot respectively, for which the maximum oscillation amplitudes are $A_{middle}=12\,^{\circ}$, $A_{left}=A_{right}=40\,^{\circ}$. A schematic diagram with the employed topology is shown in Figure \[fig:cpghexapod\].

As in Crepi's article, each of the three oscillators were set to the same natural frequencies ($\omega_i=\omega$). Initially, the coupling parameters were set to:

$\omega_{ij}=0.5\ [1/s]\ \forall i \neq j$, $\omega_{ii}=0.0\ [1/s]$,

$\varphi_{ij}=0.0\ [rad/s]\ \forall i \neq j$, $\varphi_{ii}=0.0\ [rad/s]$.

In other words: the network is fully connected, but there are no self-couplings, and (originally) no phase biases. With these parameters, the system converges into a regime where the phases (state variables $\phi_i$) grow linearly with a common rate $\omega$ and zero phase difference between the oscillators.

For the robot hexapod, gait information would need to be encoded into the phase biases $\varphi_{ij}$. Since the original paper was instead modulating the target offsets $X_i$ and amplitudes $R_i$, our model used $R_i$ exclusively as a smooth transition between the static state (zero amplitude or $R_i=0\,^{\circ}$) and motion, and $X_i$ was not necessary.

![Diagram of the CPG-based controller implemented for the hexapod robot. A high level layer (red) modifies the control parameters in real time in order to determine the gait. The three oscillatory centres (green) are coupled with constant weights. Their output $\theta_i$ is fed into the PID controller of each servomotor.<span data-label="fig:cpghexapod"></span>](cpghexapod){width="0.8\linewidth"}

With this topology it is possible to define the following walking gaits:

-   **Forward walking** is achieved by setting

    $\omega_{21}=\omega_{31}=0.5\ [1/s]$, $\omega_{ij}=0.0\ [1/s]$ otherwise,

    $\varphi_{21}=\pi/2\ [rad]$, $\varphi_{31}=-\pi/2\ [rad]$,

-   **Backward walking** simply requires a shift in the phase couplings:

    $\omega_{21}=\omega_{31}=0.5\ [1/s]$, $\omega_{ij}=0.0\ [1/s]$ otherwise,

    $\varphi_{21}=-\pi/2\ [rad]$, $\varphi_{31}=\pi/2\ [rad]$,

-   **Clockwise rotation** is achieved with

    $\omega_{21}=\omega_{31}=0.5\ [1/s]$, $\omega_{ij}=0.0\ [1/s]$ otherwise,

    $\varphi_{21}=\pi/2\ [rad]$, $\varphi_{31}=\pi/2\ [rad]$,

-   Finally, **counter-clockwise rotation** uses

    $\omega_{21}=\omega_{31}=0.5\ [1/s]$, $\omega_{ij}=0.0\ [1/s]$ otherwise,

    $\varphi_{21}=\pi/2\ [rad]$, $\varphi_{31}=\pi/2\ [rad]$,

Implementation of the CPG with Arduino
--------------------------------------

The robot is controlled using a a ZUM BT-328 board[^6], which is based on the Arduino[^7] platform. The ordinary differential equations of the oscillator model were implemented using the *Euler* method[^8], with the following update rule:

``` {.c language="C"}
  for(int i=0; i<N; i++) {
    float sA_d = cW[i];
    for(int j=0; j<N; j++)
       sA_d += w[i][j] * sr[j] *
         sin(sA[j] - sA[i] - a[i][j]);
    new_sA[i] = sA[i] + T * sA_d;
    
    float sr_dd = ar * ( (ar/4) *
      (cR[i]-sr[i]) - sr_d[i] );
    new_sr_d[i] = sr_d[i] + T * sr_dd;
    new_sr[i] = sr[i] + T * sr_d[i];
    
    float sx_dd = ax * ( (ax/4) *
      (cX[i]-sx[i]) - sx_d[i] );
    new_sx_d[i] = sx_d[i] + T * sx_dd;
    new_sx[i] = sx[i] + T * sx_d[i];
  }
  
  for(int i=0; i<N; i++) {
    sA[i] = new_sA[i];
    sr[i] = new_sr[i];
    sx[i] = new_sx[i];
    sr_d[i] = new_sr_d[i];
    sx_d[i] = new_sx_d[i];
    output[i] = sx[i] + sr[i] *
      sin(sA[i]);
  }
```

Where $T$ is the time step for the Euler method. In our setup, we used a value of $T=0.01s$.

Results and Discussion
======================

The hexapod implementation was a very useful test-bed for its simplicity, and we could experiment with a wide variety of parameters. For instance, we set $\varphi_{23}=\varphi_{32}=\pi\ rad$ so that the legs at both sides of the robot negotiated a counter-phase rhythm. Locomotion was then achieved by coupling one of the sides uni-directionally with the middle segment ($\omega_{12}=0.5\ [1/s]$, $\omega_{12}=0.0\ [1/s]$, $\varphi_{12}=\pi/2\ [rad]$).

\[ht\]![image](recovery){width="\linewidth"}

Another effect that we evaluated was the ability of the CPG to synchronize even when each oscillator had a different natural frequency. In a centralized approach with no couplings, slight variations of the intrinsic frequencies can lead to inconsistency in the gaits over time, due to phase drift. We could observe instead how the CPG corrected those slight phase differences seamlessly in real time, even after perturbations had been applied to the state variables (see Fig. \[fig:recovery\]).

Smooth transitions between gaits
--------------------------------

We also tried to achieve a similar gait transitioning effect as the one in the salamander hardingwilliam@example.net. By setting different natural frequencies for each oscillator, our intention was to create multiple resonant states (gaits) that arised at different levels of drive. At low frequencies the robot would for instance rotate in place, but upon a frequency increase a new forward gait would be negotiated among oscillators. Unfortunately we were not able to make this work, so more experimentation (i.e. the incorporation of additional oscillators into the network) would be needed.

\[ht\]![image](transitions){width="\linewidth"}

Such a topologically-based control approach would not only be more realistic in biological terms, but also more interesting in regards to sensory input management. For instance, joint-level feedback would allow to detect collisions with obstacles in the ground, eliciting obstacle-avoidance behaviour and thus producing a more efficient locomotion.

Rather than using a topological control approach, we achieved smooth transitions between each gait using the same method as in the fish robot hardingwilliam@example.net. It basically employs the stability properties of CPG networks to automatically negotiate oscillations after abruptly changing their coupling parameters (see Fig. \[fig:transitions\]). This is a very simple method, but it demonstrates the flexibility of CPGs for both high-level and low-level motor controller implementations.

Concluding remarks
------------------

Evolution has developed biological neural networks with pattern-generating properties (CPGs) as an abstraction that facilitates efficient locomotive behaviour in animals. Scientific research has later developed methods to employ such abstractions in real-world problems.

This project has studied the applications of artificial central pattern generators in the field of robotics. The state-of-the-art has been reviewed, and the most useful techniques have been shown, together with examples of their applications in real world robots. The project has also tackled the implementation of a CPG-based controller in an hexapod with 3 degrees-of-freedom, and successfully demonstrated its ability to smoothly transition between various walking gaits. The robustness of the CPG has also been evaluated against random perturbations in the environment (c.f. Figs. \[fig:recovery\] & \[fig:transitions\]).

Bio-inspired controllers based on central pattern generators are already having a remarkable impact in robotics. Furthermore, given the latest advances in low-cost manufacture (a combination of 3D printing technology with of-the-shelf sensors and actuators), it will be very interesting to see what novel robot designs appear in the near future.

Acknowledgments {#acknowledgments .unnumbered}
===============

I would like to thank Professor Murray Shanahan for his constant enthusiasm in neuroscience and insightful advice for this project.

[^1]: <http://animatlab.com/>

[^2]: <http://www.neuroconstruct.org/>

[^3]: <http://www.geppetto.org/>

[^4]: <http://www.openworm.org/>

[^5]: Originally designed by Ijon Tichy:\
    <http://www.thingiverse.com/thing:5156/>

[^6]: <http://www.bq.com/gb/placa-zum-bt/>

[^7]: <http://www.arduino.cc/>

[^8]: <https://en.wikipedia.org/wiki/Euler_method>

{'source': 'arXiv_out/1509'}