This page is still under construction! For a more detailed description, see the whitepaper, particularly "Program Structure"
Autopilot performs experiments by distributing them over a network of desktop computers and Raspberry Pis. Each Computer or Pi runs an Autopilot agent, like the user-facing ~.Terminal
or a Raspberry Pi ~.Pilot
.
The .Terminal
agent provides a ~.core.gui
to operate the system, manage ~.subject.Subject
s and experimental protocols, and ~.core.plots
for visualizing data from ongoing experiments.
Each .Terminal
manages a swarm of .Pilot
s that actually perform the experiments. Each .Pilot
coordinates .hardware
and .stim
uli in a .Task
. .Pilot
s can, in turn, coordinate their own swarm of networked Children
that can manage additional hardware components -- allowing .Task
s to use effectively arbitrary numbers and combinations of hardware.
Behavioral experiments in Autopilot consist of .Task
s. Tasks define the parameters, coordinate the hardware, and perform the logic of an experiment.
Tasks may consist of one or multiple stages, completion of which constitutes a trial. Stages are analogous to states in a finite-state machine, but don't share their limitations: Tasks can use arbitrary transitions between stages and have computation or hardware operation persist between stages.
Multiple Tasks can be combined to make protocols, in which subjects move between different tasks according to .graduation
criteria like accuracy or number of trials. Protocols can thus be used to automate shaping routines that introduce a subject to the experimental apparatus and task structure.
For more details on tasks, see guide_task
A more comprehensive overview is forthcoming, but the documentation for the most important modules can be found in the API documentation. A short tour for now...
.Terminal
- user facing agent class used to control and configure program operation. Seesetup_terminal
and.setup.setup_terminal
.gui
- GUI classes built with PySide2/Qt5 used by the terminal.plots
- Classes to plot data from ongoing tasks.pilot
- Experimental agent that runs tasks on Raspberry Pis.networking
- Networking modules used for communication between agents, tasks, and hardware objects.subject
- Data and metadata storage.hardware
- Hardware objects that can be used in tasks.tasks
- Customizable and extendable Task templates.stim
- Stimulus generation & presentation, of which sound is currently the most heavily developed