Merge branch '37-biomek-i5i7' into dev

# Conflicts:
#	README.md
#	README_zh.md
#	recipes/ros-humble-unilabos-msgs/recipe.yaml
#	recipes/unilabos/recipe.yaml
#	setup.py
#	unilabos/devices/liquid_handling/biomek.py
#	unilabos/devices/liquid_handling/biomek_test.py
#	unilabos/registry/devices/liquid_handler.yaml
#	unilabos/registry/registry.py
#	unilabos/ros/msgs/message_converter.py
#	unilabos_msgs/action/LiquidHandlerMoveBiomek.action
#	unilabos_msgs/action/LiquidHandlerTransferBiomek.action
This commit is contained in:
Xuwznln
2025-06-10 02:00:43 +08:00
2 changed files with 25 additions and 13 deletions

View File

@@ -10,7 +10,6 @@ from pylabrobot.resources import (
Container, Container,
Coordinate, Coordinate,
) )
import copy
from unilabos_msgs.msg import Resource from unilabos_msgs.msg import Resource
from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker # type: ignore from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker # type: ignore
@@ -62,7 +61,7 @@ class LiquidHandlerBiomek:
'LocalPattern': True, 'LocalPattern': True,
'Operation': 'Aspirate', 'Operation': 'Aspirate',
'OverrideHeight': False, 'OverrideHeight': False,
'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True),
'Prototype': 'MC P300 High', 'Prototype': 'MC P300 High',
'ReferencedPattern': '', 'ReferencedPattern': '',
'RowsFirst': False, 'RowsFirst': False,
@@ -451,8 +450,8 @@ class LiquidHandlerBiomek:
""" """
items = [] items = []
asp_params = copy.deepcopy(self.aspirate_techniques[aspirate_techniques]) asp_params = self.aspirate_techniques.get(aspirate_techniques, {})
dis_params = copy.deepcopy(self.dispense_techniques[dispense_techniques]) dis_params = self.dispense_techniques.get(dispense_techniques, {})
asp_params['Position'] = source asp_params['Position'] = source
dis_params['Position'] = target dis_params['Position'] = target
@@ -969,6 +968,15 @@ if __name__ == "__main__":
"liquid_volume": [], "liquid_volume": [],
"liquid_input_wells": [] "liquid_input_wells": []
}, },
{
"id": "working plate on P12",
"parent": "deck",
"slot_on_deck": "P12",
"class_name": "BCDeep96Round",
"liquid_type": [],
"liquid_volume": [],
"liquid_input_wells": []
},
{ {
"id": "working plate on P13", "id": "working plate on P13",
"parent": "deck", "parent": "deck",

View File

@@ -15,7 +15,6 @@ from typing import List, Sequence, Optional, Union, Literal
import json import json
import pathlib import pathlib
from typing import Sequence, Optional, List, Union, Literal from typing import Sequence, Optional, List, Union, Literal
import copy
@@ -68,7 +67,7 @@ class LiquidHandlerBiomek:
'LocalPattern': True, 'LocalPattern': True,
'Operation': 'Aspirate', 'Operation': 'Aspirate',
'OverrideHeight': False, 'OverrideHeight': False,
'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True),
'Prototype': 'MC P300 High', 'Prototype': 'MC P300 High',
'ReferencedPattern': '', 'ReferencedPattern': '',
'RowsFirst': False, 'RowsFirst': False,
@@ -352,9 +351,8 @@ class LiquidHandlerBiomek:
""" """
items = [] items = []
asp_params = copy.deepcopy(self.aspirate_techniques[aspirate_techniques]) asp_params = self.aspirate_techniques.get(aspirate_techniques, {})
dis_params = copy.deepcopy(self.dispense_techniques[dispense_techniques]) dis_params = self.dispense_techniques.get(dispense_techniques, {})
asp_params['Position'] = source asp_params['Position'] = source
dis_params['Position'] = target dis_params['Position'] = target
@@ -405,10 +403,8 @@ class LiquidHandlerBiomek:
transfer_params["Solvent"] = 'Water' transfer_params["Solvent"] = 'Water'
transfer_params["TipLocation"] = tip_rack transfer_params["TipLocation"] = tip_rack
tmp={'transfer': transfer_params} tmp={'transfer': transfer_params}
self.temp_protocol["steps"].append(tmp) self.temp_protocol["steps"].append(tmp)
return return
def move_biomek( def move_biomek(
@@ -876,6 +872,15 @@ if __name__ == "__main__":
"liquid_volume": [], "liquid_volume": [],
"liquid_input_wells": [] "liquid_input_wells": []
}, },
{
"id": "working plate on P12",
"parent": "deck",
"slot_on_deck": "P12",
"class_name": "BCDeep96Round",
"liquid_type": [],
"liquid_volume": [],
"liquid_input_wells": []
},
{ {
"id": "working plate on P13", "id": "working plate on P13",
"parent": "deck", "parent": "deck",
@@ -963,7 +968,6 @@ if __name__ == "__main__":
print(f"步骤 {step['step_number']}: {description}") print(f"步骤 {step['step_number']}: {description}")
if operation == 'transfer': if operation == 'transfer':
handler.transfer_biomek( handler.transfer_biomek(
source=parameters['source'], source=parameters['source'],
target=parameters['target'], target=parameters['target'],