NRP Core

The neurorobotics platform core (referred throughout this document as NRP-core) is the mechanism through which NRP users can implement simulations whereby multiple pieces of simulation software can coexist, synchronize their execution and exchange data in tightly ordered fashion. In previous versions of the NRP, NRP-core was referred to as the “Closed Loop Engine” (CLE), the task of which was to orchestrate the dialogue between the Gazebo robotic simulator and brain models implemented in NEST, Nengo, etc. For those of our users familiar with the CLE, NRP-core is a generalization of the latter, with new generic mechanisms provided to users who want to integrate new simulation engines into their NRP simulations. NRP-core is still built on the so-called Transfer Function framework, although the latter was adapted and renamed Transceiver Functions framework. This renaming is not only cosmetic: users familiar with the NRP up to v3.2 should indeed remain aware of some limited but meaningful evolutions between these two frameworks.

NRP-core is mostly written in C++, with the Transceiver Function framework relying on Python for better usability. It guarantees a fully deterministic execution of the simulation, provided every simulator used is itself deterministic, and works on the basis of controlled progression through time steps. Users should thus take note that event-based simulators may not be suitable for integration in NRP-core (to be analyzed on a case-by-case basis). Communications to and from NRP-core are indeed synchronous, and function calls are blocking; as such, the actual execution time of a simulation based on NRP-core will critically depend on the slowest simulator integrated therein.

To understand how to use and operate NRP-core, it is essential to be aware of some terminology used in the rest of this documentation. NRP-core communicates with other simulators or control processes by managing them as simulation engines. The term “engine” refers to an abstraction of the client-server architecture that is implemented for control and communication between NRP-core and every simulator (or process, or module, etc.) that is integrated into a given simulation. These engines exchange data in a standardised way, through objects that we refer to as datapacks. Defining the proper datapack for a given simulator in a given simulation is one of the most important steps in using the NRP with NRP-core. It is thus recommended that users take some time to familiarize themselves with this concept before using NRP-core and NRP versions built thereupon.

The documentation is organized in the following sections:

  • Getting started : installation guide and walk-through of some simple experiments

  • Architecture overview : description of the main components and concepts involved in the framework and how they interact with each other

  • Simulation Configuration : this section offer details on how experiments in NRP-core are configured

  • Engines: list of supported engines as well as their configuration details

  • Guides : guides to create your own experiments, integrate new engines or extend the existing ones and other things

Acknowledgments This work has received funding from the European Union’s Horizon 2020 Framework Programme for Research and Innovation under the Specific Grant Agreement No. 785907 (Human Brain Project SGA2) and under the Specific Grant Agreement No. 945539 (Human Brain Project SGA3).

License This work is licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at:

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

The first version of NRP-Core was written by Michael Zechmair, and was later refactored and expanded by Eloy Retamino and Krzysztof Lebioda. Additional inputs were provided by Fabrice O. Morin, Ugo Albanese and Yuhong Huang.

Related Pages:

Related Pages:

Reference and Index: