Autopilot is a Python framework to perform behavioral experiments with one or many Raspberry Pis.

Its distributed structure allows arbitrary numbers and combinations of hardware components to be used in an experiment, allowing users to perform complex, hardware-intensive experiments at scale.

Autopilot integrates every part of your experiment, including hardware operation, task logic, stimulus delivery, data management, and visualization of task progress – making experiments in behavioral neuroscience replicable from a single file.

For a detailed overview of Autopilot’s motivation, design, and structure, see our whitepaper.

What’s New (v0.3.0)

  • Autopilot has moved to Python 3!! (Tested on 3.6-3.8, but 3.7 is currently required because the Spinnaker SDK currently only has armhf binaries released for 3.7)

  • Capturing video with OpenCV and the Spinnaker SDK is now supported (See autopilot.hardware.cameras)

  • An I2C_9DOF motion sensor and the MLX90640 temperature sensor are now supported.

  • Timestamps from GPIO events are now microsecond-precise thanks to some modifications to the pigpio library

  • GPIO output timing is also microsecond-precise thanks to the use of pigpio scripts, so you can deliver exactly the reward volumes you intend <3

  • Hardware modules have been refactored into their own module, and have been almost wholly rebuilt to have sensible inheritance structure.

  • Networking modules are more efficient and automatically compress arrays (like video frames!) on transmission. Streaming is also easier now, check out Net_Node.get_stream() !

  • We now have a detailed development roadmap , so you can see the magnificent future we have planned.

  • We have created the autopilot-users discussion board for troubleshooting & coordinating community development :)

This documentation is very young and is very much a work in progress! Please submit an issue with any incompletenesses, confusion, or errors!

Indices and tables