Bodies and interaction
A body closes a reservoir through a world. It owns the sensorimotor organisation while the reservoir remains task-agnostic.
Component path
world sample → sensor → encoder → receptor frame(s) → reservoir step(s) → readout → effector values → actuator → typed command → dynamicsAbstractBody is the dispatch boundary. Embodiment is the generic composed body.
Geometry, sensors, encoders, readout, actuators, dynamics, and optional physiology use
stable component IDs.
portspec(body)BrainlessLab.component_slots(body)n_receptors(body)n_effectors(body)Port widths must match the reservoir before tick zero. Stable EntityID, ObjectID, and
component IDs preserve identity when runtime order changes.
Interaction timing
InteractionCycle defines neural frames within one world step. FixedRateCycle(K) samples
the world once, runs K neural frames, and emits one command through the selected readout.
This timing does not define repeated research trials.
All agents observe the same pre-action world state. The runtime then applies complete command frames and world effects. An agent cannot observe another agent’s action from the same tick.
Physical interpretation
Component presets are simplified compositions. Names such as insect, robot, or aircraft do not establish fidelity. Inspect sensor geometry, noise, actuator limits, dynamics, and physiology before making a physical or biological claim.
Source: src/core/Interfaces.jl, src/world/Embodiment.jl, src/world/Ensemble.jl.