diff --git a/unilabos/device_mesh/view_robot.rviz b/unilabos/device_mesh/view_robot.rviz index ad6241a..50e0543 100644 --- a/unilabos/device_mesh/view_robot.rviz +++ b/unilabos/device_mesh/view_robot.rviz @@ -9,7 +9,7 @@ Panels: - /MotionPlanning1/Scene Robot1 - /MotionPlanning1/Planning Request1 Splitter Ratio: 0.5016146302223206 - Tree Height: 575 + Tree Height: 1112 - Class: rviz_common/Selection Name: Selection - Class: rviz_common/Tool Properties @@ -571,21 +571,21 @@ Visualization Manager: Saved: ~ Window Geometry: Displays: - collapsed: true - Height: 1061 - Hide Left Dock: true + collapsed: false + Height: 2032 + Hide Left Dock: false Hide Right Dock: true MotionPlanning: collapsed: true MotionPlanning - Trajectory Slider: collapsed: false - QMainWindow State: 000000ff00000000fd0000000400000000000003a3000003f2fc020000000bfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005d00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007300000000170000027b000000ca00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb000000280020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000000000000000fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000004300fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e00670000000296000001730000013e00ffffff000000010000010f00000387fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003b00000387000000a100fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d0065010000000000000450000000000000000000000784000003f200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730000000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd0000000400000000000003a30000079bfc020000000bfb0000001200530065006c0065006300740069006f006e00000001e10000009b000000b000fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000027000004c60000018200fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb000000280020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000000000000000fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000007a00fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e006701000004f9000002c9000002b800ffffff000000010000010f00000387fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003b000003870000013200fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d0065010000000000000450000000000000000000000bc50000079b00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730000000000ffffffff0000000000000000 Selection: collapsed: false Tool Properties: collapsed: false Views: collapsed: true - Width: 1924 + Width: 3956 X: 140 Y: 54 diff --git a/unilabos/devices/liquid_handling/biomek.py b/unilabos/devices/liquid_handling/biomek.py index ea71c6d..3fe3049 100644 --- a/unilabos/devices/liquid_handling/biomek.py +++ b/unilabos/devices/liquid_handling/biomek.py @@ -10,6 +10,7 @@ from pylabrobot.resources import ( Container, Coordinate, ) +import copy from unilabos_msgs.msg import Resource from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker # type: ignore @@ -61,7 +62,7 @@ class LiquidHandlerBiomek: 'LocalPattern': True, 'Operation': 'Aspirate', '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), + '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), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, @@ -450,8 +451,8 @@ class LiquidHandlerBiomek: """ items = [] - asp_params = self.aspirate_techniques.get(aspirate_techniques, {}) - dis_params = self.dispense_techniques.get(dispense_techniques, {}) + asp_params = copy.deepcopy(self.aspirate_techniques[aspirate_techniques]) + dis_params = copy.deepcopy(self.dispense_techniques[dispense_techniques]) asp_params['Position'] = source dis_params['Position'] = target @@ -564,7 +565,7 @@ class LiquidHandlerBiomek: if __name__ == "__main__": - + print("=== Biomek完整流程测试 ===") print("包含: 仪器设置 + 完整实验步骤") @@ -968,15 +969,6 @@ if __name__ == "__main__": "liquid_volume": [], "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", "parent": "deck", diff --git a/unilabos/devices/liquid_handling/biomek_test.py b/unilabos/devices/liquid_handling/biomek_test.py index 1e56f18..af6339a 100644 --- a/unilabos/devices/liquid_handling/biomek_test.py +++ b/unilabos/devices/liquid_handling/biomek_test.py @@ -15,6 +15,7 @@ from typing import List, Sequence, Optional, Union, Literal import json import pathlib from typing import Sequence, Optional, List, Union, Literal +import copy @@ -67,7 +68,7 @@ class LiquidHandlerBiomek: 'LocalPattern': True, 'Operation': 'Aspirate', '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), + '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), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, @@ -351,8 +352,9 @@ class LiquidHandlerBiomek: """ items = [] - asp_params = self.aspirate_techniques.get(aspirate_techniques, {}) - dis_params = self.dispense_techniques.get(dispense_techniques, {}) + asp_params = copy.deepcopy(self.aspirate_techniques[aspirate_techniques]) + dis_params = copy.deepcopy(self.dispense_techniques[dispense_techniques]) + asp_params['Position'] = source dis_params['Position'] = target @@ -403,7 +405,9 @@ class LiquidHandlerBiomek: transfer_params["Solvent"] = 'Water' transfer_params["TipLocation"] = tip_rack tmp={'transfer': transfer_params} + self.temp_protocol["steps"].append(tmp) + return @@ -872,15 +876,6 @@ if __name__ == "__main__": "liquid_volume": [], "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", "parent": "deck", @@ -968,6 +963,7 @@ if __name__ == "__main__": print(f"步骤 {step['step_number']}: {description}") if operation == 'transfer': + handler.transfer_biomek( source=parameters['source'], target=parameters['target'],