Opentrons Pipette API and Motion Control

Python API: Moving Liquids

Designed the pipette actions, and programmed their movement within the Opentrons liquid-handler Python API

The Opentrons API is an opensource software interface, written in Python, to control the set of Opentrons liquid-handlers. It was designed allow simple commands to perform relatively complex procedures, while at the same time exposing a lower level that gives the author control over the machine’s atomic movements.

API Contributions

In the chart above, my contributions are shown in orange.

From 2016-2018, I designed and programmed an important piece of the Python API; the automated-liquid-handling portions. Specifically, it starts at the high-level user protocol commands, and moves down through individual pipette movements, all the way down to programming motor spins.

My Contributions

Within the Opentrons Python API, mostly working on:

  • Designing protocol commands
  • Designing pipette actions
  • Programming pipette movements
  • Programming motion control and hardware abstraction

Here’s a video demoing my work. It shows protocol commands creating real-world liquid transfers:

As part of a team of four software developers in 2016, I played an outsized role in shaping the interface of the API. From experience in using the OT-One, plus having solely writting the platform’s Kickstarter version all in Javascript, I new it was important to allow both lower-level control of liquid transfers, while giving another option for simple transfers. This allowed the API to satisfy both simple needs and programming beginners, as well as more complex procedures and those with Python experience.

In addition to leading design of the API’s interface, I spent considerable time in 2016 for the OT-One and in 2017 for the OT2 writing the motion control aspect of the Opentrons software. This includes how a pipette moves around, what parameters are required to allow fine control of liquid transfers, software interfaces for controlling the stepper-motor-driving system, and finally communication with the machine’s stepper-motor-driver through GCode.

See the project live on GitHub, and read the docs