Hi Rick, I think I’m pretty close to having this working, just running a simple script to pick up a tip. I’m getting a key error related to the tip rack which is preventing tip pickup. It is placing it on the worktable correctly though there is a traceback message showing related to the slot ahead of that.
Below is my code:
import asyncio
from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends.opentrons_backend import OpentronsBackend
from pylabrobot.resources.opentrons import OTDeck
ot = OpentronsBackend(host=“192.168.1.121”, port=31950)
lh = LiquidHandler(backend=ot, deck=OTDeck())
async def liquid_handler_setup():
await lh.setup()
asyncio.run(liquid_handler_setup())
#Deck setup
from pylabrobot.resources.opentrons import (
opentrons_96_filtertiprack_20ul
)
tips1 = opentrons_96_filtertiprack_20ul(name=“tip_rack”)
lh.deck.assign_child_at_slot(tips1, slot=1)
print(lh.deck.summary())
#Liquid handling protocol
async def the_liquid_handling_protocol():
await lh.pick_up_tips(tips1[“H6”])
asyncio.run(the_liquid_handling_protocol())
Below is the output:
test@ubuntu:~/Documents$ python opentrons_test.py
Exception in thread Thread-2 (callback):
Traceback (most recent call last):
File “/usr/lib/python3.10/threading.py”, line 1016, in _bootstrap_inner
self.run()
File “/usr/lib/python3.10/threading.py”, line 953, in run
self._target(*self._args, **self._kwargs)
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/liquid_handler.py”, line 167, in callback
loop.run_until_complete(func(*args, **kwargs))
File “/usr/lib/python3.10/asyncio/base_events.py”, line 649, in run_until_complete
return future.result()
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/backends/opentrons_backend.py”, line 246, in assigned_resource_callback
ot_api.labware.add(
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 28, in wrapper
raise e
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 24, in wrapper
return f(*args, **kwargs)
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 41, in wrapper
command_id = f(*args, **kwargs)
TypeError: add() got an unexpected keyword argument ‘slot’
Exception in thread Thread-3 (callback):
Traceback (most recent call last):
File “/usr/lib/python3.10/threading.py”, line 1016, in _bootstrap_inner
self.run()
File “/usr/lib/python3.10/threading.py”, line 953, in run
self._target(*self._args, **self._kwargs)
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/liquid_handler.py”, line 167, in callback
loop.run_until_complete(func(*args, **kwargs))
File “/usr/lib/python3.10/asyncio/base_events.py”, line 649, in run_until_complete
return future.result()
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/backends/opentrons_backend.py”, line 246, in assigned_resource_callback
ot_api.labware.add(
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 28, in wrapper
raise e
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 24, in wrapper
return f(*args, **kwargs)
File “/usr/local/lib/python3.10/dist-packages/ot_api/decorators.py”, line 41, in wrapper
command_id = f(*args, **kwargs)
TypeError: add() got an unexpected keyword argument ‘slot’
Deck: 624.3mm x 565.2mm
±----------------±----------------±----------------+
| | | |
| 10: Empty | 11: Empty | 12: trash_co… |
| | | |
±----------------±----------------±----------------+
| | | |
| 7: Empty | 8: Empty | 9: Empty |
| | | |
±----------------±----------------±----------------+
| | | |
| 4: Empty | 5: Empty | 6: Empty |
| | | |
±----------------±----------------±----------------+
| | | |
| 1: tip_rack | 2: Empty | 3: Empty |
| | | |
±----------------±----------------±----------------+
Traceback (most recent call last):
File “/home/test/Documents/opentrons_test.py”, line 31, in
asyncio.run(the_liquid_handling_protocol())
File “/usr/lib/python3.10/asyncio/runners.py”, line 44, in run
return loop.run_until_complete(main)
File “/usr/lib/python3.10/asyncio/base_events.py”, line 649, in run_until_complete
return future.result()
File “/home/test/Documents/opentrons_test.py”, line 29, in the_liquid_handling_protocol
await lh.pick_up_tips(tips1[“H6”])
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/machine.py”, line 23, in wrapper
return await func(self, *args, **kwargs)
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/liquid_handler.py”, line 380, in pick_up_tips
self._trigger_callback(
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/liquid_handler.py”, line 1638, in _trigger_callback
raise error
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/liquid_handler.py”, line 374, in pick_up_tips
await self.backend.pick_up_tips(ops=pickups, use_channels=use_channels, **backend_kwargs)
File “/usr/local/lib/python3.10/dist-packages/pylabrobot/liquid_handling/backends/opentrons_backend.py”, line 301, in pick_up_tips
labware_id = self.defined_labware[op.resource.parent.name] # get name of tip rack
KeyError: ‘tip_rack’