autopilot

Distributed behavioral experiments

https://github.com/auto-pi-lot/autopilot

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 2 DOI reference(s) in README
  • Academic publication links
    Links to: biorxiv.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.0%) to scientific vocabulary

Keywords

behavioral-neuroscience neuroscience python
Last synced: 6 months ago · JSON representation ·

Repository

Distributed behavioral experiments

Basic Info
  • Host: GitHub
  • Owner: auto-pi-lot
  • License: mpl-2.0
  • Language: Python
  • Default Branch: main
  • Homepage: https://docs.auto-pi-lot.com
  • Size: 22.8 MB
Statistics
  • Stars: 95
  • Watchers: 8
  • Forks: 25
  • Open Issues: 61
  • Releases: 12
Topics
behavioral-neuroscience neuroscience python
Created over 8 years ago · Last pushed about 1 year ago
Metadata Files
Readme Contributing License Code of conduct Citation

README.md

PyPI PyPI pyversions PyPI - Status License: MPL 2.0 Contributor Covenant Twitter Follow

Status:

Documentation Status Travis (.com) branch Coverage Status Jonny Status

Maintenance Mode

2024-01-22

Autopilot is in maintenance-only mode - development has been paused as we take the long way around towards building a new kind of p2p networking module to support a reworked autopilot 2.0. We will write a more detailed blogpost about lessons learned from autopilot soon.

Autopilot is not dead, it is merely resting <3

-jonny

Autopilot

Autopilot Banner Logo

| Docs | Paper | Forum | Wiki | | :-: | :-: | :-: | :-: | | Read the Docs | Paper | Forum | Wiki

Autopilot is a Python framework for performing complex, hardware-intensive behavioral experiments with swarms of networked Raspberry Pis. As a tool, it provides researchers with a toolkit of flexible modules to design experiments without rigid programming & API limitations. As a vision, it dreams of bridging the chaotic hacky creativity of scientific programmers with a standardized, communally developed library of reproducible experiment prototypes.

Autopilot was developed with three primary design principles:

  • Flexibility - Autopilot was designed for any hardware and any experiment -- its hardware API is designed to give a structured wrapper around the code you already use, and its task design is entirely non-prescriptive. It attempts to eliminate the need for researchers to use a patchwork of mutually incompatible tools to perform complex experiments. Autopilot is a hacker's plaything -- rather than a uniform, simplified experience, its modular design and complete API-level documentation is meant to encourage users to make and break core Autopilot modules.
  • Efficiency - Autopilot uses Python as a glue around high-performance, low-level libraries, and is fully concurrent across multiple threads, processes, and computers. Its distributed design eliminates the hard limits faced by by single-computer systems, letting researchers use arbitrary numbers and combinations of hardware components to perform complex, hardware-intensive experiments at scale.
  • Reproducibility - Autopilot obsessively documents data provenance, logging the entire history of an Animal's training, including any version and local code changes. Any part of an experiment that isn't documented is considered a bug. By integrating experiments and producing data that is clean at the time of acquisition, Autopilot makes it easy to do good science -- its goal is to allow exact experimental replication from a single file.

Distributed Behavior

Autopilot's premise is simple: to scale experiments, just use more computers.

Autopilot systems consist of multiple "Agents" -- computers with specialized roles in the swarm. One user-facing "Terminal" agent allows a researcher to control many "Pilots," or computers that perform experiments (typically the beloved Raspberry Pi). Each Pilot can coordinate one or many "Children" to offload subsets of an experiment's computational or hardware requirements. Users can use and misuse Autopilot's flexible modules to make whatever agent topology they need <3.

Autopilot System Diagram

Module Overview

Autopilot divides the logical structure of experiments into independent1 modules:

| | Module | | :-: | --- | | Hardware | Agents - Pilot & Terminal Runtime classes that encapsulate a computer/Pi's role in the swarm. Terminals provide the user interface and coordinate subjects and tasks, Pilots do the experiments. Formalizing the Agent API to allow additional agents like Compute or Surveillance agents is a major short-term development goal! | | Hardware | Hardware - Control your tools! Extensible classes to control whatever hardware you've got. | | Hardware | Stimuli - Stimulus management and presentation. Parametric sound generation with a realtime audio server built on Jackd. Stubs are present for future development of visual stimuli using Psychopy. | | Hardware | Tasks - Build experiments! Write some basic metadata to describe data, plots, and hardware and the rest is up to you :) | | Hardware | Subject - Data management with hdf5 and pyTables. Abstraction layer for keeping obsessive records of subject history and system configuration | | Hardware | Transforms - Composable data transformations. Need to control the pitch of a sound with a video? build a transformation pipeline to connect your objects | | Hardware | UI - UI for controlling swarms of Pilots using Qt5/PySide2 | | Hardware | Visualization - (Mostly Prototypes) to do common visualizations |

1 a continual work in progress!

Getting Started

All documentation is hosted at https://docs.auto-pi-lot.com

Installation is simple, just install with pip and use Autopilot's guided setup to configure your environment and preferences. The initial setup routine uses a CLI interface that is SSH friendly :)

bash pip3 install auto-pi-lot python3 -m autopilot.setup.setup

Autopilot Setup Console

All of Autopilot is quite new, so bugs, incomplete documentation, missing features are very much expected! Don't be shy about raising issues or asking questions in the forum.

Development Status

Jonny is trying to graduate! Autopilot will be slow and maybe a little chaotic until then!

Branch Map

We're working on a formal contribution system, pardon the mess! Until we get that and our CI coverage up, main will lag a bit behind the development branches:

  • dev - main development branch that collects hotfixes, PRs, etc. Unstable but usually has lots of extra goodies
  • hotfix - branches from dev for building and testing hotfixes, PRs back to dev.
  • lab - branches from dev but doesn't necessarily PR back, the local branch used in the maintaining (Wehr) lab
  • parallax - experimental departure from dev to implement a particular experiment and rebuild a lot of components along the way, will eventually return to dev <3

Short-Term

See the short-term development goals in our version milestones:

  • v0.4.0 - Implement registries to separate user code extensions like tasks and local hardware devices in a user directory, preserve source code in produced data so local development isn't lost.
  • v0.5.0 - Make a unitary inheritance structure from a root Autopilot object such that a) common operations like logging and networking are implemented only once, b) the plugin system for v0.4.0 can not only add new objects, but replace core objects while maintaining provenance (ie. no monkey patching needed), c) object behavior that requires coordination across multiple instances gets much easier, making some magical things like self-healing self-discovering networking possible. This will also include a major refactoring of the code structure, finally breaking up some of the truly monstrous thousand-line modules in core into an actually modular system we can build from <3

Long-Term

Autopilot's extended development goals, in their full extravagance, can be found at the Autopilot Development Todo

What's new?

v0.3.0

After much ado, we're releasing Autopilot's first major upgrade. Cameras, Continuous data, DeepLabCut, and a lot more!

  • Autopilot has moved to Python 3!! (Tested on 3.6-3.8)
  • 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 NetNode.getstream() !
  • 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 :)

Supported Systems

OS

  • Ubuntu >=16.04
  • raspiOS >=Buster

Python Versions

  • 3.7
  • 3.8
  • 3.9

Raspberry Pi Versions

  • Raspi>=3b (Raspi 4 strongly recommended!)

Owner

  • Name: autopilot
  • Login: auto-pi-lot
  • Kind: organization
  • Email: sneakers-the-rat@protonmail.com

Distributed experimental framework for behavioral neuroscience, budding decentralized technical knowledge repository

Citation (CITATION.cff)

# YAML 1.2
---
abstract: "Neuroscience needs behavior, and behavioral experiments require the coordination of large numbers of heterogeneous hardware components and data streams. Currently available tools strongly limit the complexity and reproducibility of experiments. Here we introduce Autopilot, a complete, open-source Python framework for behavioral neuroscience that distributes experiments over networked swarms of Raspberry Pis. Autopilot enables qualitatively greater experimental flexibility by allowing arbitrary numbers of hardware components to be combined in arbitrary experimental designs. Research is made reproducible by documenting all data and task design parameters in a human-readable and publishable format at the time of collection. Autopilot provides an order-of-magnitude performance improvement over existing tools while also being an order of magnitude less costly to implement. Autopilot’s flexible, scalable architecture allows neuroscientists to design the next generation of experiments to investigate the behaving brain."
authors: 
  -
    family-names: Saunders
    given-names: Jonny
    name-particle: "L."
    orcid: "https://orcid.org/0000-0003-0545-5066"
  -
    family-names: Wehr
    given-names: Michael
    orcid: "https://orcid.org/0000-0003-3485-7697"
cff-version: "1.1.0"
date-released: 2019-10-17
doi: "10.1101/807693"
keywords: 
license: "MPL-2.0"
message: "If you use this software, please cite it using these metadata."
repository-code: "https://github.com/auto-pi-lot/autopilot"
title: "Autopilot: Automating behavioral experiments with lots of Raspberry Pis"
version: "0.4.4"
...

GitHub Events

Total
  • Watch event: 1
  • Issue comment event: 2
  • Push event: 1
  • Pull request event: 3
  • Fork event: 1
Last Year
  • Watch event: 1
  • Issue comment event: 2
  • Push event: 1
  • Pull request event: 3
  • Fork event: 1

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 0
  • Total pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: about 12 hours
  • Total issue authors: 0
  • Total pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 1.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: about 12 hours
  • Issue authors: 0
  • Pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 1.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • sneakers-the-rat (2)
  • lucasogit (1)
Pull Request Authors
  • yarikoptic (1)
  • sneakers-the-rat (1)
Top Labels
Issue Labels
Pull Request Labels
bug (1)

Dependencies

poetry.lock pypi
  • 142 dependencies
pyproject.toml pypi
  • sphinx-autobuild ^2021.3.14 develop
  • JACK-Client ^0.5.3
  • PySide2 ^5.15.2
  • Sphinx ^4.3.1
  • altair ^4.1.0
  • autodoc_pydantic ^1.7.0
  • autodocsumm ^0.2.7
  • blosc2 ^0.2.0
  • bokeh ^2.4.2
  • cffi ^1.15.0
  • colorcet ^3.0.0
  • coveralls ^3.3.1
  • datajoint-babel ^0.1.9
  • importlib-metadata ^4.9.0
  • inputs ^0.5
  • matplotlib ^3.5.1
  • myst_parser ^0.17.2
  • npyscreen ^4.10.5
  • numpy ^1.20.0
  • pandas --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: ">=1.3.0,<1.4.0" python: "<3.8" - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "^1.4.0" python: ">=3.8,<3.10"
  • parse ^1.19.0
  • pigpio-autopilot ^1.79
  • pip ^21.0.0
  • pydantic ^1.9.0
  • pylint ^2.12.2
  • pynwb ^2.0.0,!=2.5.1
  • pyqtgraph ^0.12.3
  • pytest ^7.0.0
  • pytest-cov ^3.0.0
  • pytest-qt ~=3.3.0
  • python >=3.7.1,<3.10
  • pyzmq ^22.3.0
  • requests ^2.26.0
  • rich ^11.2.0
  • scikit-learn ^1.0.1
  • scikit-video ^1.1.11
  • scipy ^1.7.0
  • sphinx-rtd-theme ^1.0.0
  • sphinxcontrib-bibtex ^2.4.1
  • tables ^3.7.0
  • tornado ^6.1.0
  • tqdm ^4.62.3
  • typing-extensions ^4.1.1
  • validators ^0.18.2