.. index:: pair: page; Engine Plugin System .. _doxid-plugin_system: Engine Plugin System ==================== The :ref:`NRPCoreSim ` executable can load new engine types on startup. The names of additional Engine libraries can be supplied via a "-p" parameter, followed by a comma separated list of engines to load. This gives users the ability to add their own engines on startup and create new simulation configurations with them. The NRPCoreSim loads one instance of :ref:`EnginePluginManager ` on startup, and fills it with a set of predefined search directories. Should a user request an additional engine library be loaded, it will iterate over these locations until if finds a library file matching the requested string. The user can request both a relative as well as an absolute path, both will be searched. If :ref:`NRPCoreSim ` is started without the "-p" parameter, i.e. without a list of Engine libraries to be loaded, it will load all the engines specified in the NRP_ENGINE_LAUNCHERS variable, which is compiled during the cmake configuration step. Currently all the Engines compiled with nrp-core are added to this variable. In summary, users can choose between loading a list of Engine plugins by passing a "-p" parameter to NRPCoreSim or loading all the default Engines by omitting it. Creating C plugins is relatively straightforward. We have provided a macro to help developers create new engine libraries. The macro is defined in ``nrp_general_library/plugin_system/plugin.h`` as :ref:`CREATE_NRP_ENGINE_LAUNCHER(...) `. It takes the EngineLauncher of the loaded Engine as parameter. One library can only include one engine. For example: .. ref-code-block:: cpp :ref:`CREATE_NRP_ENGINE_LAUNCHER `(GazeboEngineJSONNRPClient::EngineLauncher<"gazebo_json">) A more detailed description of EngineLaunchers can be found :ref:`here `. Once a plugin has been loaded, the NRPCoreSim will add the newly loaded launcher to the running :ref:`EngineLauncherManager `, making it available for Engine creation.