Opentrons Flex Moving of Custom Labware

Has anyone had success stacking and moving custom labware on the
Flex deck?

So far all we know is that a “lid” and “delid” function using pick_up_offset and drop_offset might be used in combination with a stackingOffsetWithLabware and stakingOffsetWithModule added to the labware definition files. Our attempts have been unsuccessful with this approach and led to calibration crashes.

1 Like

Hey @kostrouc - we have a few users who are hacking this right now. If you haven’t figured out a solution, let me know, and I’ll put you in touch. We’re also working on making this a core function in our API.

Hey there @kostrouc , any updates on this? I am attempting a similar thing now and am a bit dissatisfied that it isn’t a core part of the api.

Hello @kostrouc

I literally just threw this code together yesterday for a quick test of what you asked here since our machine got delivered a few days ago. I used the labware height of my wellplates as a reference and just kind of had to adjust it with a little bit of trial and error, but it ended up working just fine!

If you have any questions around it let me know! The key is to just only have one labware loaded on the deck at a time, and this requires deleting the labware periodically so you don’t get errors that it already exists or that the slot is occupied

        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D4"
    )   
        pickup_offset_for_plate_2 = {'x':0,'y':0,'z': z_height_corning-1.5}
        dropoff_offset_for_plate_2 = {'x':0,'y':0,'z': z_height_corning+1.2}
        
        protocol.move_labware(temp_plate_source, "D2", use_gripper=True, pick_up_offset=pickup_offset_for_plate_2, drop_offset = z_height_default)
        
        ### plate now on D2

        ## Remove lid

        protocol.move_labware(temp_plate_source, "D3", use_gripper=True, pick_up_offset=lid_offset, drop_offset = z_height_default)
        del protocol.deck["D3"]
        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D2"
    )   
        # Do pipetting Actions here


        # Delete plate and reload lid
        del protocol.deck["D3"]
        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D3"
    )   
        # Put lid back on labware
        protocol.move_labware(temp_plate_source, "D2", use_gripper=True, pick_up_offset=z_height_default, drop_offset = lid_offset_drop)
        
        # Put labware into "done" stack
        protocol.move_labware(temp_plate_source, "C4", use_gripper=True, pick_up_offset=z_height_default, drop_offset = z_height_default)
        del protocol.deck["C4"]

        # Move next plate to pip loc


        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D4"
    )   
        protocol.move_labware(temp_plate_source, "D2", use_gripper=True, pick_up_offset=z_height_default, drop_offset = z_height_default)
        
        ### plate 2 now on D2 #####################3

        ## Remove lid

        protocol.move_labware(temp_plate_source, "D3", use_gripper=True, pick_up_offset=lid_offset, drop_offset = z_height_default)
        del protocol.deck["D3"]
        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D2"
    )   
        # Do pipetting Actions here
        

        # Delete plate and reload lid
        del protocol.deck["D2"]
        temp_plate_source = protocol.load_labware(
        "corning_384_wellplate_50ul", location="D3"
    )   
        # Put lid back on labware
        protocol.move_labware(temp_plate_source, "D2", use_gripper=True, pick_up_offset=z_height_default, drop_offset = lid_offset_drop)
        
        # Put labware into "done" stack
        protocol.move_labware(temp_plate_source, "C4", use_gripper=True, pick_up_offset=z_height_default, drop_offset = dropoff_offset_for_plate_2)
        

        ## Purely curious, can we move the stack alltogether?
        protocol.move_labware(temp_plate_source, "D4", use_gripper=True, pick_up_offset=z_height_default, drop_offset = z_height_default)
        ##A:  Yes we can :)))
1 Like

Is there a way to delete labware when its on a module? Or is there a way to do move_labware without the gripper and without pausing for the user to do it…

(I’m trying to put a lid on a well plate after moving it onto a temp module :sweat_smile: del protocol.deck() doesn’t let me do it when it’s on a module!)

Hey @hkjawn

I have not successfully done it. But if you “move” it somewhere else, you can delete it as a workaround

I wonder if there’s an option to move something off-deck without using the gripper, while also not needing a pause in the protocol. :thinking:

I digress! I’ve been thinking and I suppose a possible workaround to getting a lid onto a plate that’s in the module would be:

  1. Grip the upper part of the plate sans lid, move it to an empty slot (because the bottom part of the well plate is covered by the temp module)
  2. replace_lid()
  3. Move plate + lid back onto the module

In my cell culture case, I’m trying to incubate the well plate with trypLE at 37C on the temp module, then move if off to continue processing. However, as I’m typing this out I’m realizing… maybe I don’t need to move it on/off the temp module, I could just leave it on there the whole time and just adjust the module’s temp! (Except I still can’t replace the lid after removing it so there may higher-than-desired evaporation during the 10 min 37C incubation step - maybe the amount would be insignificant?)