MORSE execution loop ==================== The following figure depicts the general behaviour of Morse: .. image:: ../../media/simulation_main_loop_overview.svg :class: full_image :width: 600 :align: center After the initialisation phase described :doc:`here `, the simulator goes in this big loop, including the execution of each sensor, each actuator (depending their frequencies), and the handling of services. It is important to understand that, during one loop execution, each sensor and actuator is called with the same graphic and physic context (robots positions, sensors position, ...). .. warning:: At the moment, the execution order between the different sensors and actuators of a scene is not defined. Do not rely on such order to guarantee the behaviour of your component. .. warning:: If the behaviour of one component takes too much time, it is the whole simulation loop which is slow down (including physics). Make sure your components are fast enough. It is possible to rewrite the logic in C if the python version is too slow. Behaviour of a sensor --------------------- When Blender calls the method :py:meth:`morse.core.sensor.Sensor.action`, the following things happen: #. update of the position of the sensor #. call overridden ``default_action`` #. apply in order each function of ``output_modifiers`` (modify the content of the sensor) #. apply in order each function of ``output_functions`` (output the content of the sensor to different clients) Behaviour of an actuator ------------------------ When Blender calls the method :py:meth:`morse.core.actuator.Actuator.action` the following things happen: #. apply in order each function of ``input_functions`` (receive input from different clients) #. apply in order each function of ``input_modifiers`` (if needed) #. call overridden ``default_action`` .. warning:: The mechanic allows to have multiples client for on actuator, but in practice, the behaviour is not well defined, so it is better to make sure that you have only one client for one actuator. Service handling ---------------- This part is explained with great details :doc:`here `.