From 780a62f518adcd3cde6be4810fd1bb15f05febb6 Mon Sep 17 00:00:00 2001 From: Andy Sigler Date: Thu, 16 Nov 2023 15:41:07 -0500 Subject: [PATCH 1/4] fix(shared-data): Gripper PCR plate tunings from hardware testing (#13651) --- .../protocol_engine/state/test_labware_view.py | 2 +- .../protocol_engine/state/test_module_view.py | 4 ++-- shared-data/deck/definitions/3/ot3_standard.json | 2 +- shared-data/deck/definitions/4/ot3_standard.json | 2 +- .../2.json | 2 +- .../definitions/2/opentrons_96_pcr_adapter/1.json | 14 ++++++++++++++ .../2/opentrons_96_well_aluminum_block/1.json | 14 ++++++++++++++ .../2.json | 2 +- .../module/definitions/3/heaterShakerModuleV1.json | 2 +- .../module/definitions/3/magneticBlockV1.json | 2 +- .../module/definitions/3/temperatureModuleV2.json | 2 +- .../module/definitions/3/thermocyclerModuleV2.json | 2 +- 12 files changed, 39 insertions(+), 11 deletions(-) diff --git a/api/tests/opentrons/protocol_engine/state/test_labware_view.py b/api/tests/opentrons/protocol_engine/state/test_labware_view.py index d5b94adfbf5..7c4f5905540 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_view.py @@ -1349,7 +1349,7 @@ def test_get_deck_gripper_offsets(ot3_standard_deck_def: DeckDefinitionV4) -> No assert subject.get_deck_default_gripper_offsets() == LabwareMovementOffsetData( pickUpOffset=LabwareOffsetVector(x=0, y=0, z=0), - dropOffset=LabwareOffsetVector(x=0, y=0, z=-0.25), + dropOffset=LabwareOffsetVector(x=0, y=0, z=-0.75), ) diff --git a/api/tests/opentrons/protocol_engine/state/test_module_view.py b/api/tests/opentrons/protocol_engine/state/test_module_view.py index 5b83cda94f0..d225b64ee61 100644 --- a/api/tests/opentrons/protocol_engine/state/test_module_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_module_view.py @@ -1756,14 +1756,14 @@ def test_is_edge_move_unsafe( lazy_fixture("thermocycler_v2_def"), LabwareMovementOffsetData( pickUpOffset=LabwareOffsetVector(x=0, y=0, z=4.6), - dropOffset=LabwareOffsetVector(x=0, y=0, z=4.6), + dropOffset=LabwareOffsetVector(x=0, y=0, z=5.6), ), ), ( lazy_fixture("heater_shaker_v1_def"), LabwareMovementOffsetData( pickUpOffset=LabwareOffsetVector(x=0, y=0, z=0), - dropOffset=LabwareOffsetVector(x=0, y=0, z=0.5), + dropOffset=LabwareOffsetVector(x=0, y=0, z=1.0), ), ), ( diff --git a/shared-data/deck/definitions/3/ot3_standard.json b/shared-data/deck/definitions/3/ot3_standard.json index 775ba50960f..bead3586dba 100644 --- a/shared-data/deck/definitions/3/ot3_standard.json +++ b/shared-data/deck/definitions/3/ot3_standard.json @@ -982,7 +982,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": -0.25 + "z": -0.75 } } } diff --git a/shared-data/deck/definitions/4/ot3_standard.json b/shared-data/deck/definitions/4/ot3_standard.json index a01ee27aa92..5d5441a8fcf 100644 --- a/shared-data/deck/definitions/4/ot3_standard.json +++ b/shared-data/deck/definitions/4/ot3_standard.json @@ -590,7 +590,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": -0.25 + "z": -0.75 } } } diff --git a/shared-data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json b/shared-data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json index f0704d43cca..dec71b2b4e1 100644 --- a/shared-data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json +++ b/shared-data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json @@ -55,7 +55,7 @@ "z": 10.7 } }, - "gripForce": 15, + "gripForce": 9, "gripHeightFromLabwareBottom": 10, "ordering": [ ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], diff --git a/shared-data/labware/definitions/2/opentrons_96_pcr_adapter/1.json b/shared-data/labware/definitions/2/opentrons_96_pcr_adapter/1.json index 9447d404d0c..459922d3f22 100644 --- a/shared-data/labware/definitions/2/opentrons_96_pcr_adapter/1.json +++ b/shared-data/labware/definitions/2/opentrons_96_pcr_adapter/1.json @@ -1014,5 +1014,19 @@ "x": 8.5, "y": 5.5, "z": 0 + }, + "gripperOffsets": { + "default": { + "pickUpOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "dropOffset": { + "x": 0, + "y": 0, + "z": 1.0 + } + } } } diff --git a/shared-data/labware/definitions/2/opentrons_96_well_aluminum_block/1.json b/shared-data/labware/definitions/2/opentrons_96_well_aluminum_block/1.json index 01db61ae047..2eadb732440 100644 --- a/shared-data/labware/definitions/2/opentrons_96_well_aluminum_block/1.json +++ b/shared-data/labware/definitions/2/opentrons_96_well_aluminum_block/1.json @@ -1014,5 +1014,19 @@ "x": 0, "y": 0, "z": 0 + }, + "gripperOffsets": { + "default": { + "pickUpOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "dropOffset": { + "x": 0, + "y": 0, + "z": 1.0 + } + } } } diff --git a/shared-data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json b/shared-data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json index fb6420bac45..4e8314698aa 100644 --- a/shared-data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json +++ b/shared-data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json @@ -55,7 +55,7 @@ "z": 10.7 } }, - "gripForce": 15, + "gripForce": 9, "gripHeightFromLabwareBottom": 10, "ordering": [ ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], diff --git a/shared-data/module/definitions/3/heaterShakerModuleV1.json b/shared-data/module/definitions/3/heaterShakerModuleV1.json index 63d6dd31998..30164bd8607 100644 --- a/shared-data/module/definitions/3/heaterShakerModuleV1.json +++ b/shared-data/module/definitions/3/heaterShakerModuleV1.json @@ -43,7 +43,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": 0.5 + "z": 1.0 } } }, diff --git a/shared-data/module/definitions/3/magneticBlockV1.json b/shared-data/module/definitions/3/magneticBlockV1.json index 2dea6a9d2ca..a1fd0a39248 100644 --- a/shared-data/module/definitions/3/magneticBlockV1.json +++ b/shared-data/module/definitions/3/magneticBlockV1.json @@ -38,7 +38,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": 0.5 + "z": 1.0 } } }, diff --git a/shared-data/module/definitions/3/temperatureModuleV2.json b/shared-data/module/definitions/3/temperatureModuleV2.json index cc16e0b1ec4..7e67659eba7 100644 --- a/shared-data/module/definitions/3/temperatureModuleV2.json +++ b/shared-data/module/definitions/3/temperatureModuleV2.json @@ -41,7 +41,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": 0.5 + "z": 1.0 } } }, diff --git a/shared-data/module/definitions/3/thermocyclerModuleV2.json b/shared-data/module/definitions/3/thermocyclerModuleV2.json index 9c7965eb49a..531890def74 100644 --- a/shared-data/module/definitions/3/thermocyclerModuleV2.json +++ b/shared-data/module/definitions/3/thermocyclerModuleV2.json @@ -44,7 +44,7 @@ "dropOffset": { "x": 0, "y": 0, - "z": 4.6 + "z": 5.6 } } }, From 76cb53be5e9b64158965138f0f2b64fd5ce92e58 Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Thu, 16 Nov 2023 15:56:02 -0500 Subject: [PATCH 2/4] feat(components): render 4th column slot label for staging area slots (#13969) closes RAUT-782 * feat(components): render 4th column slot label if staging areas present in deck config Creates a 4th column in SlotLabels component to be rendered if used for coordinates for slot positions AND at least one staging area fixture exists in deck config. Note that SlotLabels do not render 4th column when rendered as coordinates for fixture positions --- .../src/hardware-sim/BaseDeck/BaseDeck.tsx | 9 ++++- .../src/hardware-sim/Deck/SlotLabels.tsx | 36 +++++++++++++++---- .../hardware-sim/DeckConfigurator/index.tsx | 6 +++- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/components/src/hardware-sim/BaseDeck/BaseDeck.tsx b/components/src/hardware-sim/BaseDeck/BaseDeck.tsx index 30a2d8d37ac..5e0be0fcc66 100644 --- a/components/src/hardware-sim/BaseDeck/BaseDeck.tsx +++ b/components/src/hardware-sim/BaseDeck/BaseDeck.tsx @@ -121,7 +121,14 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element { ) : ( <> {showSlotLabels ? ( - + 0 || + wasteChuteStagingAreaFixtures.length > 0 + } + /> ) : null} {singleSlotFixtures.map(fixture => ( { + const widthSmallRem = 10.5 + const widthLargeRem = 15.25 + return robotType === FLEX_ROBOT_TYPE ? ( <> + {show4thColumn ? ( + + + + ) : null} diff --git a/components/src/hardware-sim/DeckConfigurator/index.tsx b/components/src/hardware-sim/DeckConfigurator/index.tsx index e468cb6d376..b7c4940837e 100644 --- a/components/src/hardware-sim/DeckConfigurator/index.tsx +++ b/components/src/hardware-sim/DeckConfigurator/index.tsx @@ -125,7 +125,11 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element { fixtureLocation={cutoutId} /> ))} - + 0} + /> {children} ) From 5ec4cb387461c8276449a648c1c85900099d6847 Mon Sep 17 00:00:00 2001 From: Jamey H Date: Thu, 16 Nov 2023 15:59:34 -0500 Subject: [PATCH 3/4] fix(app): fix double rendering labware in basedeck component (#14011) Closes RQA-1899 Adds logic to prevent duplicate rendering of labware if it has already been rendered on top of a module. --- app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx b/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx index 6fdf7b5b79b..7c469acdfcf 100644 --- a/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx +++ b/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx @@ -112,7 +112,9 @@ export const PrepareSpace = (props: PrepareSpaceProps): JSX.Element | null => { labwareLocation: location, definition: labwareDef, }, - ]} + ].filter( + () => !('moduleModel' in location && location.moduleModel != null) + )} deckConfig={deckConfig} /> From 2c83a1943a548f61aff786edbfc927ce2318dd06 Mon Sep 17 00:00:00 2001 From: Ryan Howard Date: Thu, 16 Nov 2023 16:02:54 -0500 Subject: [PATCH 4/4] Add back in the aexit hook but start the server as an orphaned process instead so python releases everything before the server tries to lock it (#14010) --- .../hardware_testing/opentrons_api/helpers_ot3.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py b/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py index 6652a174a73..cd442e3e170 100644 --- a/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py +++ b/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py @@ -4,10 +4,10 @@ from datetime import datetime from enum import Enum from math import pi -from subprocess import run +from subprocess import run, Popen from time import time from typing import Callable, Coroutine, Dict, List, Optional, Tuple, Union - +import atexit from opentrons_hardware.drivers.can_bus import DriverSettings, build, CanMessenger from opentrons_hardware.drivers.can_bus import settings as can_bus_settings from opentrons_hardware.firmware_bindings.constants import SensorId @@ -77,6 +77,15 @@ def stop_server_ot3() -> None: """Stop opentrons-robot-server on the OT3.""" print('Stopping "opentrons-robot-server"...') run(["systemctl", "stop", "opentrons-robot-server"]) + atexit.register(restart_server_ot3) + + +def restart_server_ot3() -> None: + """Start opentrons-robot-server on the OT3.""" + print('Starting "opentrons-robot-server"...') + Popen( + ["systemctl", "restart", "opentrons-robot-server", "&"], + ) def start_server_ot3() -> None: