This page is still under construction! For a more detailed description, see the whitepaper, particularly “Program Structure”


Program Structure

Graphical Overview of Autopilot Modules

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 gui to operate the system, manage Subject s and experimental protocols, and 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.


Protocol Structure

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

Module Tour


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. See setup_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