0.png

0.png


Better, Faster Bio with Integrated Devices using Robotics

Jonathan Cline

jcline@ieee.org

2009

JCLINE-BUSINESS-CARD-320.png


Robotics - Let's Do Something "Simple"

by:

for:

(Contrary to popular belief, lab techs are not "free")

Robotics - Let's Do Something "Simple"

Let's Automate a bio-protocol and remove the busy-work!

Sounds great!

evolution_machine_x220.jpg


Robotics - Let's Do Something "Simple"

Jonathan's version

p6033652w.jpg

p7023926swc-prototype.jpg



Robotics - Let's Do Something "Simple"

Jonathan's version

Electrowetting using Copper PCB and solid state switches

jcline-ewod-2090711s.JPG


Robotics - Let's Do Something "Simple"

jcline-tecan-genesis-2000-1sw.jpg


Robotics - User/Software/Hardware Model

Biolab-languages1.png

For Tecan, the commands break down even further, into High-level script commands (shown) and low level device operations unique to each device.


Robotics - User/Software/Hardware Model

Biolab-interconnect-model.png



Robotics - User/Software/Hardware Model

Biolab-interconnect-model2.png

Device data is stored in the database

Robotics - Data Format

Data storage formats are very important:

Watch out -


Robotics - Data Format

  <?xml version="1.0"?>
  <Experiment Name="JCSG Erbeta+Org1+Org2">
    <ID>351</ID>
    <User>Valerie</User>
    <Container>Corning pZero 3550</Container>
    <DatePrepared>2007-10-04T11:05:38.5170000+02:00</DatePrepared>
    <SetupTemperature>20</SetupTemperature>
    <IncubationTemperature>20</IncubationTemperature>
    <ExperimentPlates>
      <ExperimentPlate PlateNumber="1">
        <ID>406</ID>
        <DateDispensed>10/4/2007 12:45:40 PM</DateDispensed>
        <Wells>
          <Well WellNumber="15">
            <WellVolume>75</WellVolume>
            <WaterVolume>37.5</WaterVolume>
            <Drops>
              <Drop DropNumber="3" ProteinFormulation="Erbeta+Org2" ProteinVolume=
  "0.25" WellVolume="0.25" />
              <Drop DropNumber="2" ProteinFormulation="BufferC" ProteinVolume="0.2
  5" WellVolume="0.25" />
              <Drop DropNumber="1" ProteinFormulation="Erbeta+Org1" ProteinVolume=
  "0.25" WellVolume="0.25" />

Just say No to XML


Robotics - Data Format - Device data


  %YAML 1.1
  --- # Fialab-Microsia
  address:
      syringe: A
      valve: C
      peristaltic: D
      external: B
  valve:
      send: # delay after cmds 100ms - 1 sec
          NP_SET:
              desc: set number of physical ports
              opcode: NP
              args:
                  - 1
                  - numport:4-12
              redundancy: 2 # send cmd twice
              delay: 100 # ms
              recv:
                  ok: ~
                  err: ~
          NP_GET:
              desc: get number of physical ports
              opcode: NP
              args:
                  - 0
              redundancy: 2 # send cmd twice
              delay: 100 # ms
              recv:
                  ok: ~
                  err: ~
  peristaltic:
      send: # delay after cmds 100ms - 1 sec
          SET_SPEED:
              desc: set pump speed
              opcode: G
              args:
                  - 1
                  - speed:0-100
              delay: 100
              recv:
                  ok: ~
                  err: ~       
          SET_DIRECTION:
              desc: set pump direction, direction:1=counterclockwise or 2=clockwise
              opcode: W
              args:
                  - 1
                  - direction:1-2:default=1
              delay: 5000
              recv:
                  ok: ~
                  err: ~        
  syringe:
      send: # delay after cmds 100ms - 1 sec
          INIT_ALL:
              desc: init all (both) pumps
              opcode: _Z0R
              args:
                  - 0
              delay: 100
              recv:
                  ok: ~
                  err: ~       
          SET_INPUT:
              desc: position valve in for given pump
              opcode: /$1IR
              args:
                  - 1
                  - pumpnum:1-2:default=1
              delay: 100
              recv:
                  ok: ~
                  err: ~


Robotics - Data Format - Environmental data

  %YAML 1.1
  ---
  version: 2009-09-04
  tecan:
    genesis:
      points:
        roma0:
          magnet-hover: '14056,1850,980,1800'
          magnet-place: '14056,1850,687,1800'
          sampletray-hover: '14057,2828,980,1800'
          sampletray-place: '14057,2828,582,1800'
          shaker-hover: '1780,3569,1535,1800'
          shaker-put: '1780,3569,865,1800'
          shaker-take: '1780,3569,865,1800'
          shakerlock-1: '1762,1177,1535,900'
          shakerlock-2: '1762,1177,815,900'
          shakerlock-3: '1191,1177,808,900'
          shakerlock-4: '1762,1177,815,900'
          shakerlock-5: '1762,1177,1535,900'
          shakerlock-6: '1780,3569,1535,1800'
          shakerlock-hover: '1780,3569,1535,1800'
          HOME1: '11165,2525,980,1800'
  ...


Robotics - What's Running Now

The end user writes a simple Perl application to control all devices and robotics.


  sub Main {
      $hw = Robotics::Tecan->new(
          connection => 'network,Robotics::Tecan::Genesis,genesis0',
          token => 'M1',
          serveraddr => 'heavybio.dyndns.org:8088',
          password => $ENV{'TECANPASSWORD'});

      $hw->attach("o");
      $_ = $hw->status();
      exit -2 if !/IDLE/i;

      # Load worktable
      $hw->configure("client-traymove1test.yaml");   

      my @path = (
          "shakerlock-hover", 
          "shakerlock-1",
          "shakerlock-2",
          "shakerlock-3",
          "shakerlock-4",
          "shakerlock-5",
          "shakerlock-hover"
          );
      checkok $hw->move_path("roma0", @path);

      checkok $hw->move("roma0", "shaker-take");
      checkok $hw->grip("roma0");
      checkok $hw->move("roma0", "shaker-hover");

      checkok $hw->move("roma0", "sampletray-hover");
      checkok $hw->move("roma0", "sampletray-place");
      checkok $hw->grip("roma0", 'o', 120);
      checkok $hw->move("roma0", "sampletray-hover");
      checkok $hw->park("roma0");

      checkok $hw->park("liha");



Robotics - What's Running in "Upcoming Weeks"

Medium Term Goal

Long Term Goal


Robotics - Benefits


Robotics - Benefits

Example devices insertable into the Robotics 'flow'


Robotics - Protolexer

Let's Do Something "Simple" : Revisited

Just Use English.

If the computer can't understand a bio-protocol, then the bio-protocol is ambiguous and should be re-written anyway

protolexer1.png


Robotics - Data Format - Bio-protocols


  %YAML 1.1
  ---
  protocol: Mate-Paired Library Preparation for Sequencing
  methods:
   - &standard-purify purify with column:
          - &cp1 Add 3 volumes of Buffer QG and 1 volume of isopropyl alcohol to the sheared
            DNA. If the color of the mixture is orange or violet, add 10uL of 3M sodium
            acetate, pH5.5 and mix. The color turns yellow. The pH required for efficient
            adsorption of the DNA to the membrane is <= 7.5. 
          
          - &cp2 Apply 750uL of sheared DNA in Buffer QG to the column(s). The maximum
            amount of DNA that can be applied to a QIAquick column is 10ug. Use more 
            columns if necessary. 
            
          - &cp3 Let the column(s) stand for 2 minutes at room temperature. 
          
          - &cp4 Centrifuge the column(s) at >= 10,000g (13,000 rpm) for 1 minute, then discard 
            the flow-through. 
            
          - &cp5 Repeat steps 2 and 4 until the entire sample has been loaded onto the column(s). 
            Place the QIAquick column(s) back into the same collection tube(s). 
            
          - &cp6 Add 750uL of Buffer PE to wash the column(s). 
          
          - &cp7 Centrifuge the column(s) at >= 10,000g (13,000 rpm) for 2 minutes, then discard 
            the flow-through. Repeat to remove residual wash buffer. 
            
          - &cp8 Air-dry the column(s) for 2 minutes to evaporate any residual alcohol. Transfer 
            the column(s) to clean 1.5-mL LoBind tube(s). 
            
          - &cp9 Add 30uL of Buffer EB to the column(s) to elute the DNA and let the column(s) 
            stand for 2minutes. 
            
          - &cp10 Centrifuge the column(s) at >= 10,000g (13,000 rpm) for 1 minute. 
          
          - &cp11 Repeat steps 9 and 10. 
          
          - &cp12 If necessary, pool the eluted DNA. 
          
   - &bead-purify purify with magbeads:
          - &bp1 Add 100uL of DNA to 95uL of magbeads.
          
          - &bp2 Vortex at 1,000RPM for 1 minute.
          
          - &bp3 Incubate on magnets for 300 seconds at room temperature to allow DNA to 
                bind to beads and beads to settle.
          
          - &bp4 Remove supernatant while beads are magnetized.
          
          - &bp5 Elute while beads are magnetized using 100uL of EtOH.  
                Pause for 90 seconds during each wash to allow beads to settle.  
                Allow EtOH to evaporate until beads are dry and 
                cracks are visible in the bead surface.
          
          - &bp6 Resuspend with 15 uL Buffer xx to resuspend beads.
          
          - &bp7 Vortex at 1,000RPM for 20 seconds.
          
          - &bp8 Incubate for 200 seconds on magnets at room temperature.
          
          - &bp9 Save the eluted DNA.


Robotics - Competing Method: BioStream (MIT)

"Towards a High-Level Programming Language for Standardizing and Automating Biology Protocols"


Robotics - Competing Method: BioStream (MIT)

BioStream "clean English output" for DNA extraction from tissue protocol

Biostream-DNA%20extraction%20from%20tissue%20protocol-English-Output.png

Robotics - Competing Method: BioStream (MIT)

"Towards a High-Level Programming Language for Standardizing and Automating Biology Protocols"

BioStream "high level language" for DNA extraction from tissue protocol

Biostream-DNA%20extraction%20from%20tissue%20protocol-Source-Output.png