opentrons 8.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of opentrons might be problematic. Click here for more details.
- opentrons/__init__.py +150 -0
- opentrons/_version.py +34 -0
- opentrons/calibration_storage/__init__.py +54 -0
- opentrons/calibration_storage/deck_configuration.py +62 -0
- opentrons/calibration_storage/encoder_decoder.py +31 -0
- opentrons/calibration_storage/file_operators.py +142 -0
- opentrons/calibration_storage/helpers.py +103 -0
- opentrons/calibration_storage/ot2/__init__.py +34 -0
- opentrons/calibration_storage/ot2/deck_attitude.py +85 -0
- opentrons/calibration_storage/ot2/mark_bad_calibration.py +27 -0
- opentrons/calibration_storage/ot2/models/__init__.py +0 -0
- opentrons/calibration_storage/ot2/models/v1.py +149 -0
- opentrons/calibration_storage/ot2/pipette_offset.py +129 -0
- opentrons/calibration_storage/ot2/tip_length.py +281 -0
- opentrons/calibration_storage/ot3/__init__.py +31 -0
- opentrons/calibration_storage/ot3/deck_attitude.py +83 -0
- opentrons/calibration_storage/ot3/gripper_offset.py +156 -0
- opentrons/calibration_storage/ot3/models/__init__.py +0 -0
- opentrons/calibration_storage/ot3/models/v1.py +122 -0
- opentrons/calibration_storage/ot3/module_offset.py +138 -0
- opentrons/calibration_storage/ot3/pipette_offset.py +95 -0
- opentrons/calibration_storage/types.py +45 -0
- opentrons/cli/__init__.py +21 -0
- opentrons/cli/__main__.py +5 -0
- opentrons/cli/analyze.py +557 -0
- opentrons/config/__init__.py +631 -0
- opentrons/config/advanced_settings.py +871 -0
- opentrons/config/defaults_ot2.py +214 -0
- opentrons/config/defaults_ot3.py +499 -0
- opentrons/config/feature_flags.py +86 -0
- opentrons/config/gripper_config.py +55 -0
- opentrons/config/reset.py +203 -0
- opentrons/config/robot_configs.py +187 -0
- opentrons/config/types.py +183 -0
- opentrons/drivers/__init__.py +0 -0
- opentrons/drivers/absorbance_reader/__init__.py +11 -0
- opentrons/drivers/absorbance_reader/abstract.py +72 -0
- opentrons/drivers/absorbance_reader/async_byonoy.py +352 -0
- opentrons/drivers/absorbance_reader/driver.py +81 -0
- opentrons/drivers/absorbance_reader/hid_protocol.py +161 -0
- opentrons/drivers/absorbance_reader/simulator.py +84 -0
- opentrons/drivers/asyncio/__init__.py +0 -0
- opentrons/drivers/asyncio/communication/__init__.py +22 -0
- opentrons/drivers/asyncio/communication/async_serial.py +187 -0
- opentrons/drivers/asyncio/communication/errors.py +88 -0
- opentrons/drivers/asyncio/communication/serial_connection.py +557 -0
- opentrons/drivers/command_builder.py +102 -0
- opentrons/drivers/flex_stacker/__init__.py +13 -0
- opentrons/drivers/flex_stacker/abstract.py +214 -0
- opentrons/drivers/flex_stacker/driver.py +768 -0
- opentrons/drivers/flex_stacker/errors.py +68 -0
- opentrons/drivers/flex_stacker/simulator.py +309 -0
- opentrons/drivers/flex_stacker/types.py +367 -0
- opentrons/drivers/flex_stacker/utils.py +19 -0
- opentrons/drivers/heater_shaker/__init__.py +5 -0
- opentrons/drivers/heater_shaker/abstract.py +76 -0
- opentrons/drivers/heater_shaker/driver.py +204 -0
- opentrons/drivers/heater_shaker/simulator.py +94 -0
- opentrons/drivers/mag_deck/__init__.py +6 -0
- opentrons/drivers/mag_deck/abstract.py +44 -0
- opentrons/drivers/mag_deck/driver.py +208 -0
- opentrons/drivers/mag_deck/simulator.py +63 -0
- opentrons/drivers/rpi_drivers/__init__.py +33 -0
- opentrons/drivers/rpi_drivers/dev_types.py +94 -0
- opentrons/drivers/rpi_drivers/gpio.py +282 -0
- opentrons/drivers/rpi_drivers/gpio_simulator.py +127 -0
- opentrons/drivers/rpi_drivers/interfaces.py +15 -0
- opentrons/drivers/rpi_drivers/types.py +364 -0
- opentrons/drivers/rpi_drivers/usb.py +102 -0
- opentrons/drivers/rpi_drivers/usb_simulator.py +22 -0
- opentrons/drivers/serial_communication.py +151 -0
- opentrons/drivers/smoothie_drivers/__init__.py +4 -0
- opentrons/drivers/smoothie_drivers/connection.py +51 -0
- opentrons/drivers/smoothie_drivers/constants.py +121 -0
- opentrons/drivers/smoothie_drivers/driver_3_0.py +1933 -0
- opentrons/drivers/smoothie_drivers/errors.py +49 -0
- opentrons/drivers/smoothie_drivers/parse_utils.py +143 -0
- opentrons/drivers/smoothie_drivers/simulator.py +99 -0
- opentrons/drivers/smoothie_drivers/types.py +16 -0
- opentrons/drivers/temp_deck/__init__.py +10 -0
- opentrons/drivers/temp_deck/abstract.py +54 -0
- opentrons/drivers/temp_deck/driver.py +197 -0
- opentrons/drivers/temp_deck/simulator.py +57 -0
- opentrons/drivers/thermocycler/__init__.py +12 -0
- opentrons/drivers/thermocycler/abstract.py +99 -0
- opentrons/drivers/thermocycler/driver.py +395 -0
- opentrons/drivers/thermocycler/simulator.py +126 -0
- opentrons/drivers/types.py +107 -0
- opentrons/drivers/utils.py +222 -0
- opentrons/execute.py +742 -0
- opentrons/hardware_control/__init__.py +65 -0
- opentrons/hardware_control/__main__.py +77 -0
- opentrons/hardware_control/adapters.py +98 -0
- opentrons/hardware_control/api.py +1347 -0
- opentrons/hardware_control/backends/__init__.py +7 -0
- opentrons/hardware_control/backends/controller.py +400 -0
- opentrons/hardware_control/backends/errors.py +9 -0
- opentrons/hardware_control/backends/estop_state.py +164 -0
- opentrons/hardware_control/backends/flex_protocol.py +497 -0
- opentrons/hardware_control/backends/ot3controller.py +1930 -0
- opentrons/hardware_control/backends/ot3simulator.py +900 -0
- opentrons/hardware_control/backends/ot3utils.py +664 -0
- opentrons/hardware_control/backends/simulator.py +442 -0
- opentrons/hardware_control/backends/status_bar_state.py +240 -0
- opentrons/hardware_control/backends/subsystem_manager.py +431 -0
- opentrons/hardware_control/backends/tip_presence_manager.py +173 -0
- opentrons/hardware_control/backends/types.py +14 -0
- opentrons/hardware_control/constants.py +6 -0
- opentrons/hardware_control/dev_types.py +125 -0
- opentrons/hardware_control/emulation/__init__.py +0 -0
- opentrons/hardware_control/emulation/abstract_emulator.py +21 -0
- opentrons/hardware_control/emulation/app.py +56 -0
- opentrons/hardware_control/emulation/connection_handler.py +38 -0
- opentrons/hardware_control/emulation/heater_shaker.py +150 -0
- opentrons/hardware_control/emulation/magdeck.py +60 -0
- opentrons/hardware_control/emulation/module_server/__init__.py +8 -0
- opentrons/hardware_control/emulation/module_server/client.py +78 -0
- opentrons/hardware_control/emulation/module_server/helpers.py +130 -0
- opentrons/hardware_control/emulation/module_server/models.py +31 -0
- opentrons/hardware_control/emulation/module_server/server.py +110 -0
- opentrons/hardware_control/emulation/parser.py +74 -0
- opentrons/hardware_control/emulation/proxy.py +241 -0
- opentrons/hardware_control/emulation/run_emulator.py +68 -0
- opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
- opentrons/hardware_control/emulation/scripts/run_app.py +54 -0
- opentrons/hardware_control/emulation/scripts/run_module_emulator.py +72 -0
- opentrons/hardware_control/emulation/scripts/run_smoothie.py +37 -0
- opentrons/hardware_control/emulation/settings.py +119 -0
- opentrons/hardware_control/emulation/simulations.py +133 -0
- opentrons/hardware_control/emulation/smoothie.py +192 -0
- opentrons/hardware_control/emulation/tempdeck.py +69 -0
- opentrons/hardware_control/emulation/thermocycler.py +128 -0
- opentrons/hardware_control/emulation/types.py +10 -0
- opentrons/hardware_control/emulation/util.py +38 -0
- opentrons/hardware_control/errors.py +43 -0
- opentrons/hardware_control/execution_manager.py +164 -0
- opentrons/hardware_control/instruments/__init__.py +5 -0
- opentrons/hardware_control/instruments/instrument_abc.py +39 -0
- opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot2/instrument_calibration.py +152 -0
- opentrons/hardware_control/instruments/ot2/pipette.py +777 -0
- opentrons/hardware_control/instruments/ot2/pipette_handler.py +995 -0
- opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot3/gripper.py +420 -0
- opentrons/hardware_control/instruments/ot3/gripper_handler.py +173 -0
- opentrons/hardware_control/instruments/ot3/instrument_calibration.py +214 -0
- opentrons/hardware_control/instruments/ot3/pipette.py +858 -0
- opentrons/hardware_control/instruments/ot3/pipette_handler.py +1030 -0
- opentrons/hardware_control/module_control.py +332 -0
- opentrons/hardware_control/modules/__init__.py +69 -0
- opentrons/hardware_control/modules/absorbance_reader.py +373 -0
- opentrons/hardware_control/modules/errors.py +7 -0
- opentrons/hardware_control/modules/flex_stacker.py +948 -0
- opentrons/hardware_control/modules/heater_shaker.py +426 -0
- opentrons/hardware_control/modules/lid_temp_status.py +35 -0
- opentrons/hardware_control/modules/magdeck.py +233 -0
- opentrons/hardware_control/modules/mod_abc.py +245 -0
- opentrons/hardware_control/modules/module_calibration.py +93 -0
- opentrons/hardware_control/modules/plate_temp_status.py +61 -0
- opentrons/hardware_control/modules/tempdeck.py +299 -0
- opentrons/hardware_control/modules/thermocycler.py +731 -0
- opentrons/hardware_control/modules/types.py +417 -0
- opentrons/hardware_control/modules/update.py +255 -0
- opentrons/hardware_control/modules/utils.py +73 -0
- opentrons/hardware_control/motion_utilities.py +318 -0
- opentrons/hardware_control/nozzle_manager.py +422 -0
- opentrons/hardware_control/ot3_calibration.py +1171 -0
- opentrons/hardware_control/ot3api.py +3227 -0
- opentrons/hardware_control/pause_manager.py +31 -0
- opentrons/hardware_control/poller.py +112 -0
- opentrons/hardware_control/protocols/__init__.py +106 -0
- opentrons/hardware_control/protocols/asyncio_configurable.py +11 -0
- opentrons/hardware_control/protocols/calibratable.py +45 -0
- opentrons/hardware_control/protocols/chassis_accessory_manager.py +90 -0
- opentrons/hardware_control/protocols/configurable.py +48 -0
- opentrons/hardware_control/protocols/event_sourcer.py +18 -0
- opentrons/hardware_control/protocols/execution_controllable.py +33 -0
- opentrons/hardware_control/protocols/flex_calibratable.py +96 -0
- opentrons/hardware_control/protocols/flex_instrument_configurer.py +52 -0
- opentrons/hardware_control/protocols/gripper_controller.py +55 -0
- opentrons/hardware_control/protocols/hardware_manager.py +51 -0
- opentrons/hardware_control/protocols/identifiable.py +16 -0
- opentrons/hardware_control/protocols/instrument_configurer.py +206 -0
- opentrons/hardware_control/protocols/liquid_handler.py +266 -0
- opentrons/hardware_control/protocols/module_provider.py +16 -0
- opentrons/hardware_control/protocols/motion_controller.py +243 -0
- opentrons/hardware_control/protocols/position_estimator.py +45 -0
- opentrons/hardware_control/protocols/simulatable.py +10 -0
- opentrons/hardware_control/protocols/stoppable.py +9 -0
- opentrons/hardware_control/protocols/types.py +27 -0
- opentrons/hardware_control/robot_calibration.py +224 -0
- opentrons/hardware_control/scripts/README.md +28 -0
- opentrons/hardware_control/scripts/__init__.py +1 -0
- opentrons/hardware_control/scripts/gripper_control.py +208 -0
- opentrons/hardware_control/scripts/ot3gripper +7 -0
- opentrons/hardware_control/scripts/ot3repl +7 -0
- opentrons/hardware_control/scripts/repl.py +187 -0
- opentrons/hardware_control/scripts/tc_control.py +97 -0
- opentrons/hardware_control/scripts/update_module_fw.py +274 -0
- opentrons/hardware_control/simulator_setup.py +260 -0
- opentrons/hardware_control/thread_manager.py +431 -0
- opentrons/hardware_control/threaded_async_lock.py +97 -0
- opentrons/hardware_control/types.py +792 -0
- opentrons/hardware_control/util.py +234 -0
- opentrons/legacy_broker.py +53 -0
- opentrons/legacy_commands/__init__.py +1 -0
- opentrons/legacy_commands/commands.py +483 -0
- opentrons/legacy_commands/helpers.py +153 -0
- opentrons/legacy_commands/module_commands.py +276 -0
- opentrons/legacy_commands/protocol_commands.py +54 -0
- opentrons/legacy_commands/publisher.py +155 -0
- opentrons/legacy_commands/robot_commands.py +51 -0
- opentrons/legacy_commands/types.py +1186 -0
- opentrons/motion_planning/__init__.py +32 -0
- opentrons/motion_planning/adjacent_slots_getters.py +168 -0
- opentrons/motion_planning/deck_conflict.py +501 -0
- opentrons/motion_planning/errors.py +35 -0
- opentrons/motion_planning/types.py +42 -0
- opentrons/motion_planning/waypoints.py +218 -0
- opentrons/ordered_set.py +138 -0
- opentrons/protocol_api/__init__.py +105 -0
- opentrons/protocol_api/_liquid.py +157 -0
- opentrons/protocol_api/_liquid_properties.py +814 -0
- opentrons/protocol_api/_nozzle_layout.py +31 -0
- opentrons/protocol_api/_parameter_context.py +300 -0
- opentrons/protocol_api/_parameters.py +31 -0
- opentrons/protocol_api/_transfer_liquid_validation.py +108 -0
- opentrons/protocol_api/_types.py +43 -0
- opentrons/protocol_api/config.py +23 -0
- opentrons/protocol_api/core/__init__.py +23 -0
- opentrons/protocol_api/core/common.py +33 -0
- opentrons/protocol_api/core/core_map.py +74 -0
- opentrons/protocol_api/core/engine/__init__.py +22 -0
- opentrons/protocol_api/core/engine/_default_labware_versions.py +179 -0
- opentrons/protocol_api/core/engine/deck_conflict.py +400 -0
- opentrons/protocol_api/core/engine/exceptions.py +19 -0
- opentrons/protocol_api/core/engine/instrument.py +2391 -0
- opentrons/protocol_api/core/engine/labware.py +238 -0
- opentrons/protocol_api/core/engine/load_labware_params.py +73 -0
- opentrons/protocol_api/core/engine/module_core.py +1027 -0
- opentrons/protocol_api/core/engine/overlap_versions.py +20 -0
- opentrons/protocol_api/core/engine/pipette_movement_conflict.py +358 -0
- opentrons/protocol_api/core/engine/point_calculations.py +64 -0
- opentrons/protocol_api/core/engine/protocol.py +1153 -0
- opentrons/protocol_api/core/engine/robot.py +139 -0
- opentrons/protocol_api/core/engine/stringify.py +74 -0
- opentrons/protocol_api/core/engine/transfer_components_executor.py +1006 -0
- opentrons/protocol_api/core/engine/well.py +241 -0
- opentrons/protocol_api/core/instrument.py +459 -0
- opentrons/protocol_api/core/labware.py +151 -0
- opentrons/protocol_api/core/legacy/__init__.py +11 -0
- opentrons/protocol_api/core/legacy/_labware_geometry.py +37 -0
- opentrons/protocol_api/core/legacy/deck.py +369 -0
- opentrons/protocol_api/core/legacy/labware_offset_provider.py +108 -0
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +709 -0
- opentrons/protocol_api/core/legacy/legacy_labware_core.py +235 -0
- opentrons/protocol_api/core/legacy/legacy_module_core.py +592 -0
- opentrons/protocol_api/core/legacy/legacy_protocol_core.py +612 -0
- opentrons/protocol_api/core/legacy/legacy_well_core.py +162 -0
- opentrons/protocol_api/core/legacy/load_info.py +67 -0
- opentrons/protocol_api/core/legacy/module_geometry.py +547 -0
- opentrons/protocol_api/core/legacy/well_geometry.py +148 -0
- opentrons/protocol_api/core/legacy_simulator/__init__.py +16 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +624 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +85 -0
- opentrons/protocol_api/core/module.py +484 -0
- opentrons/protocol_api/core/protocol.py +311 -0
- opentrons/protocol_api/core/robot.py +51 -0
- opentrons/protocol_api/core/well.py +116 -0
- opentrons/protocol_api/core/well_grid.py +45 -0
- opentrons/protocol_api/create_protocol_context.py +177 -0
- opentrons/protocol_api/deck.py +223 -0
- opentrons/protocol_api/disposal_locations.py +244 -0
- opentrons/protocol_api/instrument_context.py +3272 -0
- opentrons/protocol_api/labware.py +1579 -0
- opentrons/protocol_api/module_contexts.py +1447 -0
- opentrons/protocol_api/module_validation_and_errors.py +61 -0
- opentrons/protocol_api/protocol_context.py +1688 -0
- opentrons/protocol_api/robot_context.py +303 -0
- opentrons/protocol_api/validation.py +761 -0
- opentrons/protocol_engine/__init__.py +155 -0
- opentrons/protocol_engine/actions/__init__.py +65 -0
- opentrons/protocol_engine/actions/action_dispatcher.py +30 -0
- opentrons/protocol_engine/actions/action_handler.py +13 -0
- opentrons/protocol_engine/actions/actions.py +302 -0
- opentrons/protocol_engine/actions/get_state_update.py +38 -0
- opentrons/protocol_engine/clients/__init__.py +5 -0
- opentrons/protocol_engine/clients/sync_client.py +174 -0
- opentrons/protocol_engine/clients/transports.py +197 -0
- opentrons/protocol_engine/commands/__init__.py +757 -0
- opentrons/protocol_engine/commands/absorbance_reader/__init__.py +61 -0
- opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/common.py +6 -0
- opentrons/protocol_engine/commands/absorbance_reader/initialize.py +151 -0
- opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/read.py +226 -0
- opentrons/protocol_engine/commands/air_gap_in_place.py +162 -0
- opentrons/protocol_engine/commands/aspirate.py +244 -0
- opentrons/protocol_engine/commands/aspirate_in_place.py +184 -0
- opentrons/protocol_engine/commands/aspirate_while_tracking.py +211 -0
- opentrons/protocol_engine/commands/blow_out.py +146 -0
- opentrons/protocol_engine/commands/blow_out_in_place.py +119 -0
- opentrons/protocol_engine/commands/calibration/__init__.py +60 -0
- opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +166 -0
- opentrons/protocol_engine/commands/calibration/calibrate_module.py +117 -0
- opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +96 -0
- opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +156 -0
- opentrons/protocol_engine/commands/command.py +308 -0
- opentrons/protocol_engine/commands/command_unions.py +974 -0
- opentrons/protocol_engine/commands/comment.py +57 -0
- opentrons/protocol_engine/commands/configure_for_volume.py +108 -0
- opentrons/protocol_engine/commands/configure_nozzle_layout.py +115 -0
- opentrons/protocol_engine/commands/custom.py +67 -0
- opentrons/protocol_engine/commands/dispense.py +194 -0
- opentrons/protocol_engine/commands/dispense_in_place.py +179 -0
- opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
- opentrons/protocol_engine/commands/drop_tip.py +232 -0
- opentrons/protocol_engine/commands/drop_tip_in_place.py +205 -0
- opentrons/protocol_engine/commands/flex_stacker/__init__.py +64 -0
- opentrons/protocol_engine/commands/flex_stacker/common.py +900 -0
- opentrons/protocol_engine/commands/flex_stacker/empty.py +293 -0
- opentrons/protocol_engine/commands/flex_stacker/fill.py +281 -0
- opentrons/protocol_engine/commands/flex_stacker/retrieve.py +339 -0
- opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +328 -0
- opentrons/protocol_engine/commands/flex_stacker/store.py +339 -0
- opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
- opentrons/protocol_engine/commands/get_next_tip.py +134 -0
- opentrons/protocol_engine/commands/get_tip_presence.py +87 -0
- opentrons/protocol_engine/commands/hash_command_params.py +38 -0
- opentrons/protocol_engine/commands/heater_shaker/__init__.py +102 -0
- opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +83 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +82 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +84 -0
- opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +110 -0
- opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +125 -0
- opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +90 -0
- opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +102 -0
- opentrons/protocol_engine/commands/home.py +100 -0
- opentrons/protocol_engine/commands/identify_module.py +86 -0
- opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
- opentrons/protocol_engine/commands/liquid_probe.py +464 -0
- opentrons/protocol_engine/commands/load_labware.py +210 -0
- opentrons/protocol_engine/commands/load_lid.py +154 -0
- opentrons/protocol_engine/commands/load_lid_stack.py +272 -0
- opentrons/protocol_engine/commands/load_liquid.py +95 -0
- opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
- opentrons/protocol_engine/commands/load_module.py +223 -0
- opentrons/protocol_engine/commands/load_pipette.py +167 -0
- opentrons/protocol_engine/commands/magnetic_module/__init__.py +32 -0
- opentrons/protocol_engine/commands/magnetic_module/disengage.py +97 -0
- opentrons/protocol_engine/commands/magnetic_module/engage.py +119 -0
- opentrons/protocol_engine/commands/move_labware.py +546 -0
- opentrons/protocol_engine/commands/move_relative.py +102 -0
- opentrons/protocol_engine/commands/move_to_addressable_area.py +176 -0
- opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +198 -0
- opentrons/protocol_engine/commands/move_to_coordinates.py +107 -0
- opentrons/protocol_engine/commands/move_to_well.py +119 -0
- opentrons/protocol_engine/commands/movement_common.py +338 -0
- opentrons/protocol_engine/commands/pick_up_tip.py +241 -0
- opentrons/protocol_engine/commands/pipetting_common.py +443 -0
- opentrons/protocol_engine/commands/prepare_to_aspirate.py +121 -0
- opentrons/protocol_engine/commands/pressure_dispense.py +155 -0
- opentrons/protocol_engine/commands/reload_labware.py +90 -0
- opentrons/protocol_engine/commands/retract_axis.py +75 -0
- opentrons/protocol_engine/commands/robot/__init__.py +70 -0
- opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +96 -0
- opentrons/protocol_engine/commands/robot/common.py +18 -0
- opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
- opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
- opentrons/protocol_engine/commands/robot/move_to.py +94 -0
- opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +86 -0
- opentrons/protocol_engine/commands/save_position.py +109 -0
- opentrons/protocol_engine/commands/seal_pipette_to_tip.py +353 -0
- opentrons/protocol_engine/commands/set_rail_lights.py +67 -0
- opentrons/protocol_engine/commands/set_status_bar.py +89 -0
- opentrons/protocol_engine/commands/temperature_module/__init__.py +46 -0
- opentrons/protocol_engine/commands/temperature_module/deactivate.py +86 -0
- opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +97 -0
- opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +104 -0
- opentrons/protocol_engine/commands/thermocycler/__init__.py +152 -0
- opentrons/protocol_engine/commands/thermocycler/close_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/open_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +171 -0
- opentrons/protocol_engine/commands/thermocycler/run_profile.py +124 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +140 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +100 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +93 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +89 -0
- opentrons/protocol_engine/commands/touch_tip.py +189 -0
- opentrons/protocol_engine/commands/unsafe/__init__.py +161 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +100 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +121 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +82 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +208 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_close_latch.py +94 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_manual_retrieve.py +295 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_open_latch.py +91 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_prepare_shuttle.py +136 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +77 -0
- opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +90 -0
- opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +153 -0
- opentrons/protocol_engine/commands/verify_tip_presence.py +100 -0
- opentrons/protocol_engine/commands/wait_for_duration.py +76 -0
- opentrons/protocol_engine/commands/wait_for_resume.py +75 -0
- opentrons/protocol_engine/create_protocol_engine.py +193 -0
- opentrons/protocol_engine/engine_support.py +28 -0
- opentrons/protocol_engine/error_recovery_policy.py +81 -0
- opentrons/protocol_engine/errors/__init__.py +191 -0
- opentrons/protocol_engine/errors/error_occurrence.py +182 -0
- opentrons/protocol_engine/errors/exceptions.py +1308 -0
- opentrons/protocol_engine/execution/__init__.py +50 -0
- opentrons/protocol_engine/execution/command_executor.py +216 -0
- opentrons/protocol_engine/execution/create_queue_worker.py +102 -0
- opentrons/protocol_engine/execution/door_watcher.py +119 -0
- opentrons/protocol_engine/execution/equipment.py +819 -0
- opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +101 -0
- opentrons/protocol_engine/execution/gantry_mover.py +686 -0
- opentrons/protocol_engine/execution/hardware_stopper.py +147 -0
- opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +207 -0
- opentrons/protocol_engine/execution/labware_movement.py +297 -0
- opentrons/protocol_engine/execution/movement.py +350 -0
- opentrons/protocol_engine/execution/pipetting.py +607 -0
- opentrons/protocol_engine/execution/queue_worker.py +86 -0
- opentrons/protocol_engine/execution/rail_lights.py +25 -0
- opentrons/protocol_engine/execution/run_control.py +33 -0
- opentrons/protocol_engine/execution/status_bar.py +34 -0
- opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +188 -0
- opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +81 -0
- opentrons/protocol_engine/execution/tip_handler.py +550 -0
- opentrons/protocol_engine/labware_offset_standardization.py +194 -0
- opentrons/protocol_engine/notes/__init__.py +17 -0
- opentrons/protocol_engine/notes/notes.py +59 -0
- opentrons/protocol_engine/plugins.py +104 -0
- opentrons/protocol_engine/protocol_engine.py +683 -0
- opentrons/protocol_engine/resources/__init__.py +26 -0
- opentrons/protocol_engine/resources/deck_configuration_provider.py +232 -0
- opentrons/protocol_engine/resources/deck_data_provider.py +94 -0
- opentrons/protocol_engine/resources/file_provider.py +161 -0
- opentrons/protocol_engine/resources/fixture_validation.py +68 -0
- opentrons/protocol_engine/resources/labware_data_provider.py +106 -0
- opentrons/protocol_engine/resources/labware_validation.py +73 -0
- opentrons/protocol_engine/resources/model_utils.py +32 -0
- opentrons/protocol_engine/resources/module_data_provider.py +44 -0
- opentrons/protocol_engine/resources/ot3_validation.py +21 -0
- opentrons/protocol_engine/resources/pipette_data_provider.py +379 -0
- opentrons/protocol_engine/slot_standardization.py +128 -0
- opentrons/protocol_engine/state/__init__.py +1 -0
- opentrons/protocol_engine/state/_abstract_store.py +27 -0
- opentrons/protocol_engine/state/_axis_aligned_bounding_box.py +50 -0
- opentrons/protocol_engine/state/_labware_origin_math.py +636 -0
- opentrons/protocol_engine/state/_move_types.py +83 -0
- opentrons/protocol_engine/state/_well_math.py +193 -0
- opentrons/protocol_engine/state/addressable_areas.py +699 -0
- opentrons/protocol_engine/state/command_history.py +309 -0
- opentrons/protocol_engine/state/commands.py +1164 -0
- opentrons/protocol_engine/state/config.py +39 -0
- opentrons/protocol_engine/state/files.py +57 -0
- opentrons/protocol_engine/state/fluid_stack.py +138 -0
- opentrons/protocol_engine/state/geometry.py +2408 -0
- opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
- opentrons/protocol_engine/state/labware.py +1432 -0
- opentrons/protocol_engine/state/liquid_classes.py +82 -0
- opentrons/protocol_engine/state/liquids.py +73 -0
- opentrons/protocol_engine/state/module_substates/__init__.py +45 -0
- opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +35 -0
- opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +112 -0
- opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +115 -0
- opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +17 -0
- opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +65 -0
- opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +67 -0
- opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +163 -0
- opentrons/protocol_engine/state/modules.py +1515 -0
- opentrons/protocol_engine/state/motion.py +373 -0
- opentrons/protocol_engine/state/pipettes.py +905 -0
- opentrons/protocol_engine/state/state.py +421 -0
- opentrons/protocol_engine/state/state_summary.py +36 -0
- opentrons/protocol_engine/state/tips.py +420 -0
- opentrons/protocol_engine/state/update_types.py +904 -0
- opentrons/protocol_engine/state/wells.py +290 -0
- opentrons/protocol_engine/types/__init__.py +310 -0
- opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
- opentrons/protocol_engine/types/command_annotations.py +53 -0
- opentrons/protocol_engine/types/deck_configuration.py +81 -0
- opentrons/protocol_engine/types/execution.py +96 -0
- opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
- opentrons/protocol_engine/types/instrument.py +47 -0
- opentrons/protocol_engine/types/instrument_sensors.py +47 -0
- opentrons/protocol_engine/types/labware.py +131 -0
- opentrons/protocol_engine/types/labware_movement.py +22 -0
- opentrons/protocol_engine/types/labware_offset_location.py +111 -0
- opentrons/protocol_engine/types/labware_offset_vector.py +16 -0
- opentrons/protocol_engine/types/liquid.py +40 -0
- opentrons/protocol_engine/types/liquid_class.py +59 -0
- opentrons/protocol_engine/types/liquid_handling.py +13 -0
- opentrons/protocol_engine/types/liquid_level_detection.py +191 -0
- opentrons/protocol_engine/types/location.py +194 -0
- opentrons/protocol_engine/types/module.py +310 -0
- opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
- opentrons/protocol_engine/types/run_time_parameters.py +133 -0
- opentrons/protocol_engine/types/tip.py +18 -0
- opentrons/protocol_engine/types/util.py +21 -0
- opentrons/protocol_engine/types/well_position.py +124 -0
- opentrons/protocol_reader/__init__.py +37 -0
- opentrons/protocol_reader/extract_labware_definitions.py +66 -0
- opentrons/protocol_reader/file_format_validator.py +152 -0
- opentrons/protocol_reader/file_hasher.py +27 -0
- opentrons/protocol_reader/file_identifier.py +284 -0
- opentrons/protocol_reader/file_reader_writer.py +90 -0
- opentrons/protocol_reader/input_file.py +16 -0
- opentrons/protocol_reader/protocol_files_invalid_error.py +6 -0
- opentrons/protocol_reader/protocol_reader.py +188 -0
- opentrons/protocol_reader/protocol_source.py +124 -0
- opentrons/protocol_reader/role_analyzer.py +86 -0
- opentrons/protocol_runner/__init__.py +26 -0
- opentrons/protocol_runner/create_simulating_orchestrator.py +118 -0
- opentrons/protocol_runner/json_file_reader.py +55 -0
- opentrons/protocol_runner/json_translator.py +314 -0
- opentrons/protocol_runner/legacy_command_mapper.py +852 -0
- opentrons/protocol_runner/legacy_context_plugin.py +116 -0
- opentrons/protocol_runner/protocol_runner.py +530 -0
- opentrons/protocol_runner/python_protocol_wrappers.py +179 -0
- opentrons/protocol_runner/run_orchestrator.py +496 -0
- opentrons/protocol_runner/task_queue.py +95 -0
- opentrons/protocols/__init__.py +6 -0
- opentrons/protocols/advanced_control/__init__.py +0 -0
- opentrons/protocols/advanced_control/common.py +38 -0
- opentrons/protocols/advanced_control/mix.py +60 -0
- opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
- opentrons/protocols/advanced_control/transfers/common.py +180 -0
- opentrons/protocols/advanced_control/transfers/transfer.py +972 -0
- opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +231 -0
- opentrons/protocols/api_support/__init__.py +0 -0
- opentrons/protocols/api_support/constants.py +8 -0
- opentrons/protocols/api_support/deck_type.py +110 -0
- opentrons/protocols/api_support/definitions.py +18 -0
- opentrons/protocols/api_support/instrument.py +151 -0
- opentrons/protocols/api_support/labware_like.py +233 -0
- opentrons/protocols/api_support/tip_tracker.py +175 -0
- opentrons/protocols/api_support/types.py +32 -0
- opentrons/protocols/api_support/util.py +403 -0
- opentrons/protocols/bundle.py +89 -0
- opentrons/protocols/duration/__init__.py +4 -0
- opentrons/protocols/duration/errors.py +5 -0
- opentrons/protocols/duration/estimator.py +628 -0
- opentrons/protocols/execution/__init__.py +0 -0
- opentrons/protocols/execution/dev_types.py +181 -0
- opentrons/protocols/execution/errors.py +40 -0
- opentrons/protocols/execution/execute.py +84 -0
- opentrons/protocols/execution/execute_json_v3.py +275 -0
- opentrons/protocols/execution/execute_json_v4.py +359 -0
- opentrons/protocols/execution/execute_json_v5.py +28 -0
- opentrons/protocols/execution/execute_python.py +169 -0
- opentrons/protocols/execution/json_dispatchers.py +87 -0
- opentrons/protocols/execution/types.py +7 -0
- opentrons/protocols/geometry/__init__.py +0 -0
- opentrons/protocols/geometry/planning.py +297 -0
- opentrons/protocols/labware.py +312 -0
- opentrons/protocols/models/__init__.py +0 -0
- opentrons/protocols/models/json_protocol.py +679 -0
- opentrons/protocols/parameters/__init__.py +0 -0
- opentrons/protocols/parameters/csv_parameter_definition.py +77 -0
- opentrons/protocols/parameters/csv_parameter_interface.py +96 -0
- opentrons/protocols/parameters/exceptions.py +34 -0
- opentrons/protocols/parameters/parameter_definition.py +272 -0
- opentrons/protocols/parameters/types.py +17 -0
- opentrons/protocols/parameters/validation.py +267 -0
- opentrons/protocols/parse.py +671 -0
- opentrons/protocols/types.py +159 -0
- opentrons/py.typed +0 -0
- opentrons/resources/scripts/lpc21isp +0 -0
- opentrons/resources/smoothie-edge-8414642.hex +23010 -0
- opentrons/simulate.py +1065 -0
- opentrons/system/__init__.py +6 -0
- opentrons/system/camera.py +51 -0
- opentrons/system/log_control.py +59 -0
- opentrons/system/nmcli.py +856 -0
- opentrons/system/resin.py +24 -0
- opentrons/system/smoothie_update.py +15 -0
- opentrons/system/wifi.py +204 -0
- opentrons/tools/__init__.py +0 -0
- opentrons/tools/args_handler.py +22 -0
- opentrons/tools/write_pipette_memory.py +157 -0
- opentrons/types.py +618 -0
- opentrons/util/__init__.py +1 -0
- opentrons/util/async_helpers.py +166 -0
- opentrons/util/broker.py +84 -0
- opentrons/util/change_notifier.py +47 -0
- opentrons/util/entrypoint_util.py +278 -0
- opentrons/util/get_union_elements.py +26 -0
- opentrons/util/helpers.py +6 -0
- opentrons/util/linal.py +178 -0
- opentrons/util/logging_config.py +265 -0
- opentrons/util/logging_queue_handler.py +61 -0
- opentrons/util/performance_helpers.py +157 -0
- opentrons-8.6.0.dist-info/METADATA +37 -0
- opentrons-8.6.0.dist-info/RECORD +601 -0
- opentrons-8.6.0.dist-info/WHEEL +4 -0
- opentrons-8.6.0.dist-info/entry_points.txt +3 -0
- opentrons-8.6.0.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Calibration commands."""
|
|
2
|
+
from .calibrate_gripper import (
|
|
3
|
+
CalibrateGripperParams,
|
|
4
|
+
CalibrateGripperResult,
|
|
5
|
+
CalibrateGripperCreate,
|
|
6
|
+
CalibrateGripperCommandType,
|
|
7
|
+
CalibrateGripper,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
from .calibrate_pipette import (
|
|
11
|
+
CalibratePipetteParams,
|
|
12
|
+
CalibratePipetteResult,
|
|
13
|
+
CalibratePipetteCreate,
|
|
14
|
+
CalibratePipetteCommandType,
|
|
15
|
+
CalibratePipette,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
from .calibrate_module import (
|
|
19
|
+
CalibrateModuleParams,
|
|
20
|
+
CalibrateModuleResult,
|
|
21
|
+
CalibrateModuleCreate,
|
|
22
|
+
CalibrateModuleCommandType,
|
|
23
|
+
CalibrateModule,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
from .move_to_maintenance_position import (
|
|
27
|
+
MoveToMaintenancePositionParams,
|
|
28
|
+
MoveToMaintenancePositionResult,
|
|
29
|
+
MoveToMaintenancePositionCreate,
|
|
30
|
+
MoveToMaintenancePositionCommandType,
|
|
31
|
+
MoveToMaintenancePosition,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
# calibration/calibrateModule
|
|
36
|
+
"CalibrateModule",
|
|
37
|
+
"CalibrateModuleCreate",
|
|
38
|
+
"CalibrateModuleParams",
|
|
39
|
+
"CalibrateModuleResult",
|
|
40
|
+
"CalibrateModuleCommandType",
|
|
41
|
+
# calibration/calibrateGripper
|
|
42
|
+
"CalibrateGripper",
|
|
43
|
+
"CalibrateGripperCreate",
|
|
44
|
+
"CalibrateGripperParams",
|
|
45
|
+
"CalibrateGripperParamsProbe",
|
|
46
|
+
"CalibrateGripperResult",
|
|
47
|
+
"CalibrateGripperCommandType",
|
|
48
|
+
# calibration/calibratePipette
|
|
49
|
+
"CalibratePipette",
|
|
50
|
+
"CalibratePipetteCreate",
|
|
51
|
+
"CalibratePipetteParams",
|
|
52
|
+
"CalibratePipetteResult",
|
|
53
|
+
"CalibratePipetteCommandType",
|
|
54
|
+
# calibration/moveToMaintenancePosition
|
|
55
|
+
"MoveToMaintenancePosition",
|
|
56
|
+
"MoveToMaintenancePositionCreate",
|
|
57
|
+
"MoveToMaintenancePositionParams",
|
|
58
|
+
"MoveToMaintenancePositionResult",
|
|
59
|
+
"MoveToMaintenancePositionCommandType",
|
|
60
|
+
]
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Models and implementation for the calibrateGripper command."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Optional, Type, Any
|
|
5
|
+
from typing_extensions import Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
9
|
+
|
|
10
|
+
from opentrons.types import Point
|
|
11
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
12
|
+
from opentrons.hardware_control import ot3_calibration
|
|
13
|
+
from opentrons.hardware_control.types import OT3Mount, GripperProbe as HWAPIGripperProbe
|
|
14
|
+
from opentrons.hardware_control.instruments.ot3.instrument_calibration import (
|
|
15
|
+
GripperCalibrationOffset,
|
|
16
|
+
)
|
|
17
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
18
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
19
|
+
from opentrons.protocol_engine.types import Vec3f
|
|
20
|
+
from opentrons.protocol_engine.resources import ensure_ot3_hardware
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
CalibrateGripperCommandType = Literal["calibration/calibrateGripper"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
27
|
+
s.pop("default", None)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CalibrateGripperParamsJaw(Enum): # noqa: D101
|
|
31
|
+
FRONT = "front"
|
|
32
|
+
REAR = "rear"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class CalibrateGripperParams(BaseModel):
|
|
36
|
+
"""Parameters for a `calibrateGripper` command."""
|
|
37
|
+
|
|
38
|
+
jaw: CalibrateGripperParamsJaw = Field(
|
|
39
|
+
...,
|
|
40
|
+
description=(
|
|
41
|
+
"Which of the gripper's jaws to use to measure its offset."
|
|
42
|
+
" The robot will assume that a human operator has already attached"
|
|
43
|
+
" the capacitive probe to the jaw and none is attached to the other jaw."
|
|
44
|
+
),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
otherJawOffset: Vec3f | SkipJsonSchema[None] = Field(
|
|
48
|
+
None,
|
|
49
|
+
description=(
|
|
50
|
+
"If an offset for the other probe is already found, then specifying it here"
|
|
51
|
+
" will enable the CalibrateGripper command to complete the calibration"
|
|
52
|
+
" process by calculating the total offset and saving it to disk."
|
|
53
|
+
" If this param is not specified then the command will only find and return"
|
|
54
|
+
" the offset for the specified probe."
|
|
55
|
+
),
|
|
56
|
+
json_schema_extra=_remove_default,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class CalibrateGripperResult(BaseModel):
|
|
61
|
+
"""The result of a successful `calibrateGripper` command."""
|
|
62
|
+
|
|
63
|
+
jawOffset: Vec3f = Field(
|
|
64
|
+
...,
|
|
65
|
+
description=(
|
|
66
|
+
"The offset from the probe's nominal position"
|
|
67
|
+
" to its actual measured position."
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
savedCalibration: GripperCalibrationOffset | SkipJsonSchema[None] = Field(
|
|
72
|
+
None,
|
|
73
|
+
description=(
|
|
74
|
+
"Gripper calibration result data, when `otherJawOffset` is provided."
|
|
75
|
+
),
|
|
76
|
+
json_schema_extra=_remove_default,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class CalibrateGripperImplementation(
|
|
81
|
+
AbstractCommandImpl[CalibrateGripperParams, SuccessData[CalibrateGripperResult]]
|
|
82
|
+
):
|
|
83
|
+
"""The implementation of a `calibrateGripper` command."""
|
|
84
|
+
|
|
85
|
+
def __init__(
|
|
86
|
+
self,
|
|
87
|
+
hardware_api: HardwareControlAPI,
|
|
88
|
+
*args: object,
|
|
89
|
+
**kwargs: object,
|
|
90
|
+
) -> None:
|
|
91
|
+
self._hardware_api = hardware_api
|
|
92
|
+
|
|
93
|
+
async def execute(
|
|
94
|
+
self, params: CalibrateGripperParams
|
|
95
|
+
) -> SuccessData[CalibrateGripperResult]:
|
|
96
|
+
"""Execute a `calibrateGripper` command.
|
|
97
|
+
|
|
98
|
+
1. Move from the current location to the calibration area on the deck.
|
|
99
|
+
2. Using the given probe, sense the gripper's offset from its ideal position.
|
|
100
|
+
3. Return the gripper's offset from its ideal position.
|
|
101
|
+
"""
|
|
102
|
+
ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
|
|
103
|
+
|
|
104
|
+
probe_offset = await ot3_calibration.calibrate_gripper_jaw(
|
|
105
|
+
hcapi=ot3_hardware_api, probe=self._convert_to_hw_api_probe(params.jaw)
|
|
106
|
+
)
|
|
107
|
+
other_probe_offset = params.otherJawOffset
|
|
108
|
+
calibration_data: Optional[GripperCalibrationOffset] = None
|
|
109
|
+
if other_probe_offset is not None:
|
|
110
|
+
total_offset = 0.5 * (
|
|
111
|
+
probe_offset
|
|
112
|
+
+ Point(
|
|
113
|
+
x=other_probe_offset.x,
|
|
114
|
+
y=other_probe_offset.y,
|
|
115
|
+
z=other_probe_offset.z,
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
result = await ot3_hardware_api.save_instrument_offset(
|
|
119
|
+
mount=OT3Mount.GRIPPER, delta=total_offset
|
|
120
|
+
)
|
|
121
|
+
assert isinstance(result, GripperCalibrationOffset), (
|
|
122
|
+
f"Expected result to be GripperCalibrationOffset type, "
|
|
123
|
+
f"but received {type(result)}"
|
|
124
|
+
)
|
|
125
|
+
calibration_data = result
|
|
126
|
+
|
|
127
|
+
return SuccessData(
|
|
128
|
+
public=CalibrateGripperResult.model_construct(
|
|
129
|
+
jawOffset=Vec3f.model_construct(
|
|
130
|
+
x=probe_offset.x, y=probe_offset.y, z=probe_offset.z
|
|
131
|
+
),
|
|
132
|
+
savedCalibration=calibration_data,
|
|
133
|
+
),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
@staticmethod
|
|
137
|
+
def _convert_to_hw_api_probe(
|
|
138
|
+
probe_from_params: CalibrateGripperParamsJaw,
|
|
139
|
+
) -> HWAPIGripperProbe:
|
|
140
|
+
if probe_from_params is CalibrateGripperParamsJaw.FRONT:
|
|
141
|
+
return HWAPIGripperProbe.FRONT
|
|
142
|
+
elif probe_from_params is CalibrateGripperParamsJaw.REAR:
|
|
143
|
+
return HWAPIGripperProbe.REAR
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class CalibrateGripper(
|
|
147
|
+
BaseCommand[CalibrateGripperParams, CalibrateGripperResult, ErrorOccurrence]
|
|
148
|
+
):
|
|
149
|
+
"""A `calibrateGripper` command."""
|
|
150
|
+
|
|
151
|
+
commandType: CalibrateGripperCommandType = "calibration/calibrateGripper"
|
|
152
|
+
params: CalibrateGripperParams
|
|
153
|
+
result: Optional[CalibrateGripperResult] = None
|
|
154
|
+
|
|
155
|
+
_ImplementationCls: Type[
|
|
156
|
+
CalibrateGripperImplementation
|
|
157
|
+
] = CalibrateGripperImplementation
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class CalibrateGripperCreate(BaseCommandCreate[CalibrateGripperParams]):
|
|
161
|
+
"""A request to create a `calibrateGripper` command."""
|
|
162
|
+
|
|
163
|
+
commandType: CalibrateGripperCommandType = "calibration/calibrateGripper"
|
|
164
|
+
params: CalibrateGripperParams
|
|
165
|
+
|
|
166
|
+
_CommandCls: Type[CalibrateGripper] = CalibrateGripper
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""Calibrate-module command for OT3 hardware. request, result, and implementation models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING, Optional, Type
|
|
5
|
+
from typing_extensions import Literal
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from opentrons.types import MountType
|
|
9
|
+
from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
|
|
10
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
11
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
12
|
+
|
|
13
|
+
# Work around type-only circular dependencies.
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ...state.state import StateView
|
|
16
|
+
|
|
17
|
+
from ...types import ModuleOffsetVector, DeckSlotLocation
|
|
18
|
+
|
|
19
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
20
|
+
from opentrons.hardware_control.types import OT3Mount
|
|
21
|
+
from opentrons.hardware_control import ot3_calibration as calibration
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
CalibrateModuleCommandType = Literal["calibration/calibrateModule"]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CalibrateModuleParams(BaseModel):
|
|
28
|
+
"""Payload required to calibrate-module."""
|
|
29
|
+
|
|
30
|
+
moduleId: str = Field(..., description="The unique id of module to calibrate.")
|
|
31
|
+
labwareId: str = Field(
|
|
32
|
+
..., description="The unique id of module calibration adapter labware."
|
|
33
|
+
)
|
|
34
|
+
mount: MountType = Field(
|
|
35
|
+
..., description="The instrument mount used to calibrate the module."
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class CalibrateModuleResult(BaseModel):
|
|
40
|
+
"""Result data from the execution of a calibrate-module command."""
|
|
41
|
+
|
|
42
|
+
moduleOffset: ModuleOffsetVector = Field(
|
|
43
|
+
..., description="Offset of calibrated module."
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
location: DeckSlotLocation = Field(
|
|
47
|
+
..., description="The deck slot this module was calibrated in."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class CalibrateModuleImplementation(
|
|
52
|
+
AbstractCommandImpl[CalibrateModuleParams, SuccessData[CalibrateModuleResult]]
|
|
53
|
+
):
|
|
54
|
+
"""CalibrateModule command implementation."""
|
|
55
|
+
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
state_view: StateView,
|
|
59
|
+
hardware_api: HardwareControlAPI,
|
|
60
|
+
**kwargs: object,
|
|
61
|
+
) -> None:
|
|
62
|
+
self._state_view = state_view
|
|
63
|
+
self._hardware_api = hardware_api
|
|
64
|
+
|
|
65
|
+
async def execute(
|
|
66
|
+
self, params: CalibrateModuleParams
|
|
67
|
+
) -> SuccessData[CalibrateModuleResult]:
|
|
68
|
+
"""Execute calibrate-module command."""
|
|
69
|
+
ot3_api = ensure_ot3_hardware(
|
|
70
|
+
self._hardware_api,
|
|
71
|
+
)
|
|
72
|
+
ot3_mount = OT3Mount.from_mount(params.mount)
|
|
73
|
+
slot = self._state_view.modules.get_location(params.moduleId)
|
|
74
|
+
module_serial = self._state_view.modules.get_serial_number(params.moduleId)
|
|
75
|
+
# NOTE (ba, 2023-03-31): There are two wells for calibration labware definitions
|
|
76
|
+
# well A1 represents the location calibration square center relative to the adapters bottom-left corner
|
|
77
|
+
# well B1 represents the location of the calibration square probe point relative to the adapters bottom-left corner.
|
|
78
|
+
nominal_position = self._state_view.geometry.get_well_position(
|
|
79
|
+
labware_id=params.labwareId, well_name="B1"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# start the calibration
|
|
83
|
+
module_offset = await calibration.calibrate_module(
|
|
84
|
+
ot3_api, ot3_mount, slot.slotName.id, module_serial, nominal_position
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return SuccessData(
|
|
88
|
+
public=CalibrateModuleResult(
|
|
89
|
+
moduleOffset=ModuleOffsetVector(
|
|
90
|
+
x=module_offset.x, y=module_offset.y, z=module_offset.z
|
|
91
|
+
),
|
|
92
|
+
location=slot,
|
|
93
|
+
),
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class CalibrateModule(
|
|
98
|
+
BaseCommand[CalibrateModuleParams, CalibrateModuleResult, ErrorOccurrence]
|
|
99
|
+
):
|
|
100
|
+
"""Calibrate-module command model."""
|
|
101
|
+
|
|
102
|
+
commandType: CalibrateModuleCommandType = "calibration/calibrateModule"
|
|
103
|
+
params: CalibrateModuleParams
|
|
104
|
+
result: Optional[CalibrateModuleResult] = None
|
|
105
|
+
|
|
106
|
+
_ImplementationCls: Type[
|
|
107
|
+
CalibrateModuleImplementation
|
|
108
|
+
] = CalibrateModuleImplementation
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class CalibrateModuleCreate(BaseCommandCreate[CalibrateModuleParams]):
|
|
112
|
+
"""Create calibrate-module command request model."""
|
|
113
|
+
|
|
114
|
+
commandType: CalibrateModuleCommandType = "calibration/calibrateModule"
|
|
115
|
+
params: CalibrateModuleParams
|
|
116
|
+
|
|
117
|
+
_CommandCls: Type[CalibrateModule] = CalibrateModule
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""Calibrate-pipette command for OT3 hardware. request, result, and implementation models."""
|
|
2
|
+
from typing import Optional, Type
|
|
3
|
+
from typing_extensions import Literal
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
|
|
6
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
7
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
8
|
+
from ...types import InstrumentOffsetVector
|
|
9
|
+
|
|
10
|
+
from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
14
|
+
from opentrons.hardware_control.types import OT3Mount
|
|
15
|
+
from opentrons.hardware_control import ot3_calibration as calibration
|
|
16
|
+
|
|
17
|
+
from opentrons.types import MountType
|
|
18
|
+
|
|
19
|
+
CalibratePipetteCommandType = Literal["calibration/calibratePipette"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class CalibratePipetteParams(BaseModel):
|
|
23
|
+
"""Payload required to calibrate-pipette."""
|
|
24
|
+
|
|
25
|
+
mount: MountType = Field(..., description="Instrument mount to calibrate.")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CalibratePipetteResult(BaseModel):
|
|
29
|
+
"""Result data from the execution of a calibrate-pipette command."""
|
|
30
|
+
|
|
31
|
+
pipetteOffset: InstrumentOffsetVector = Field(
|
|
32
|
+
..., description="Offset of calibrated pipette."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class CalibratePipetteImplementation(
|
|
37
|
+
AbstractCommandImpl[CalibratePipetteParams, SuccessData[CalibratePipetteResult]]
|
|
38
|
+
):
|
|
39
|
+
"""CalibratePipette command implementation."""
|
|
40
|
+
|
|
41
|
+
def __init__(
|
|
42
|
+
self,
|
|
43
|
+
hardware_api: HardwareControlAPI,
|
|
44
|
+
**kwargs: object,
|
|
45
|
+
) -> None:
|
|
46
|
+
self._hardware_api = hardware_api
|
|
47
|
+
|
|
48
|
+
async def execute(
|
|
49
|
+
self, params: CalibratePipetteParams
|
|
50
|
+
) -> SuccessData[CalibratePipetteResult]:
|
|
51
|
+
"""Execute calibrate-pipette command."""
|
|
52
|
+
# TODO (tz, 20-9-22): Add a better solution to determine if a command can be executed on an OT-3/OT-2
|
|
53
|
+
ot3_api = ensure_ot3_hardware(
|
|
54
|
+
self._hardware_api,
|
|
55
|
+
)
|
|
56
|
+
ot3_mount = OT3Mount.from_mount(params.mount)
|
|
57
|
+
assert (
|
|
58
|
+
ot3_mount is not OT3Mount.GRIPPER
|
|
59
|
+
), "Expected a Pipette mount but Gripper mount was provided."
|
|
60
|
+
|
|
61
|
+
pipette_offset = await calibration.find_pipette_offset(
|
|
62
|
+
hcapi=ot3_api, mount=ot3_mount, slot=5
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
await ot3_api.save_instrument_offset(mount=ot3_mount, delta=pipette_offset)
|
|
66
|
+
|
|
67
|
+
return SuccessData(
|
|
68
|
+
public=CalibratePipetteResult.model_construct(
|
|
69
|
+
pipetteOffset=InstrumentOffsetVector.model_construct(
|
|
70
|
+
x=pipette_offset.x, y=pipette_offset.y, z=pipette_offset.z
|
|
71
|
+
)
|
|
72
|
+
),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class CalibratePipette(
|
|
77
|
+
BaseCommand[CalibratePipetteParams, CalibratePipetteResult, ErrorOccurrence]
|
|
78
|
+
):
|
|
79
|
+
"""Calibrate-pipette command model."""
|
|
80
|
+
|
|
81
|
+
commandType: CalibratePipetteCommandType = "calibration/calibratePipette"
|
|
82
|
+
params: CalibratePipetteParams
|
|
83
|
+
result: Optional[CalibratePipetteResult] = None
|
|
84
|
+
|
|
85
|
+
_ImplementationCls: Type[
|
|
86
|
+
CalibratePipetteImplementation
|
|
87
|
+
] = CalibratePipetteImplementation
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class CalibratePipetteCreate(BaseCommandCreate[CalibratePipetteParams]):
|
|
91
|
+
"""Create calibrate-pipette command request model."""
|
|
92
|
+
|
|
93
|
+
commandType: CalibratePipetteCommandType = "calibration/calibratePipette"
|
|
94
|
+
params: CalibratePipetteParams
|
|
95
|
+
|
|
96
|
+
_CommandCls: Type[CalibratePipette] = CalibratePipette
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""Calibration Move To Maintenance Location command payload, result, and implementation models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import enum
|
|
5
|
+
from typing import TYPE_CHECKING, Type, Optional
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
|
|
10
|
+
from opentrons.types import MountType, Point, Mount
|
|
11
|
+
from opentrons.hardware_control.types import Axis, CriticalPoint
|
|
12
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
13
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
14
|
+
from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
18
|
+
from ...state.state import StateView
|
|
19
|
+
|
|
20
|
+
# These offsets supplied from HW
|
|
21
|
+
_ATTACH_POINT = Point(x=0, y=110)
|
|
22
|
+
_MAX_Z_AXIS_MOTION_RANGE = 215
|
|
23
|
+
# These offsets are by eye measuring
|
|
24
|
+
_INSTRUMENT_ATTACH_Z_POINT = 400.0
|
|
25
|
+
_LEFT_MOUNT_Z_MARGIN = 5
|
|
26
|
+
# Move the right mount a bit higher than the left so the user won't forget to unscrew
|
|
27
|
+
_RIGHT_MOUNT_Z_MARGIN = 20
|
|
28
|
+
|
|
29
|
+
MoveToMaintenancePositionCommandType = Literal["calibration/moveToMaintenancePosition"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class MaintenancePosition(enum.Enum):
|
|
33
|
+
"""Maintenance position options."""
|
|
34
|
+
|
|
35
|
+
ATTACH_PLATE = "attachPlate"
|
|
36
|
+
ATTACH_INSTRUMENT = "attachInstrument"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class MoveToMaintenancePositionParams(BaseModel):
|
|
40
|
+
"""Calibration set up position command parameters."""
|
|
41
|
+
|
|
42
|
+
mount: MountType = Field(
|
|
43
|
+
...,
|
|
44
|
+
description="Gantry mount to move maintenance position.",
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
maintenancePosition: MaintenancePosition = Field(
|
|
48
|
+
MaintenancePosition.ATTACH_INSTRUMENT,
|
|
49
|
+
description="The position the gantry mount needs to move to.",
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class MoveToMaintenancePositionResult(BaseModel):
|
|
54
|
+
"""Result data from the execution of a MoveToMaintenancePosition command."""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class MoveToMaintenancePositionImplementation(
|
|
58
|
+
AbstractCommandImpl[
|
|
59
|
+
MoveToMaintenancePositionParams,
|
|
60
|
+
SuccessData[MoveToMaintenancePositionResult],
|
|
61
|
+
]
|
|
62
|
+
):
|
|
63
|
+
"""Calibration set up position command implementation."""
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
hardware_api: HardwareControlAPI,
|
|
68
|
+
state_view: StateView,
|
|
69
|
+
**kwargs: object,
|
|
70
|
+
) -> None:
|
|
71
|
+
self._state_view = state_view
|
|
72
|
+
self._hardware_api = hardware_api
|
|
73
|
+
|
|
74
|
+
async def execute(
|
|
75
|
+
self, params: MoveToMaintenancePositionParams
|
|
76
|
+
) -> SuccessData[MoveToMaintenancePositionResult]:
|
|
77
|
+
"""Move the requested mount to a maintenance deck slot."""
|
|
78
|
+
ot3_api = ensure_ot3_hardware(
|
|
79
|
+
self._hardware_api,
|
|
80
|
+
)
|
|
81
|
+
max_height_z_tip = ot3_api.get_instrument_max_height(Mount.LEFT)
|
|
82
|
+
# disengage the gripper z mount if present and enabled
|
|
83
|
+
await ot3_api.prepare_for_mount_movement(Mount.LEFT)
|
|
84
|
+
|
|
85
|
+
await ot3_api.retract(Mount.LEFT)
|
|
86
|
+
current_pos = await ot3_api.gantry_position(
|
|
87
|
+
Mount.LEFT, critical_point=CriticalPoint.MOUNT
|
|
88
|
+
)
|
|
89
|
+
await ot3_api.move_to(
|
|
90
|
+
mount=Mount.LEFT,
|
|
91
|
+
abs_position=Point(x=_ATTACH_POINT.x, y=_ATTACH_POINT.y, z=current_pos.z),
|
|
92
|
+
critical_point=CriticalPoint.MOUNT,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if params.mount != MountType.EXTENSION:
|
|
96
|
+
if params.maintenancePosition == MaintenancePosition.ATTACH_INSTRUMENT:
|
|
97
|
+
mount = params.mount.to_hw_mount()
|
|
98
|
+
mount_to_axis = Axis.by_mount(mount)
|
|
99
|
+
await ot3_api.prepare_for_mount_movement(mount)
|
|
100
|
+
await ot3_api.move_axes(
|
|
101
|
+
{
|
|
102
|
+
mount_to_axis: _INSTRUMENT_ATTACH_Z_POINT,
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
await ot3_api.disengage_axes([mount_to_axis])
|
|
106
|
+
else:
|
|
107
|
+
max_motion_range = max_height_z_tip - _MAX_Z_AXIS_MOTION_RANGE
|
|
108
|
+
await ot3_api.move_axes(
|
|
109
|
+
{
|
|
110
|
+
Axis.Z_L: max_motion_range + _LEFT_MOUNT_Z_MARGIN,
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
await ot3_api.disengage_axes([Axis.Z_L])
|
|
114
|
+
await ot3_api.move_axes(
|
|
115
|
+
{
|
|
116
|
+
Axis.Z_R: max_motion_range + _RIGHT_MOUNT_Z_MARGIN,
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
await ot3_api.disengage_axes([Axis.Z_R])
|
|
120
|
+
|
|
121
|
+
return SuccessData(
|
|
122
|
+
public=MoveToMaintenancePositionResult(),
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class MoveToMaintenancePosition(
|
|
127
|
+
BaseCommand[
|
|
128
|
+
MoveToMaintenancePositionParams,
|
|
129
|
+
MoveToMaintenancePositionResult,
|
|
130
|
+
ErrorOccurrence,
|
|
131
|
+
]
|
|
132
|
+
):
|
|
133
|
+
"""Calibration set up position command model."""
|
|
134
|
+
|
|
135
|
+
commandType: MoveToMaintenancePositionCommandType = (
|
|
136
|
+
"calibration/moveToMaintenancePosition"
|
|
137
|
+
)
|
|
138
|
+
params: MoveToMaintenancePositionParams
|
|
139
|
+
result: Optional[MoveToMaintenancePositionResult] = None
|
|
140
|
+
|
|
141
|
+
_ImplementationCls: Type[
|
|
142
|
+
MoveToMaintenancePositionImplementation
|
|
143
|
+
] = MoveToMaintenancePositionImplementation
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class MoveToMaintenancePositionCreate(
|
|
147
|
+
BaseCommandCreate[MoveToMaintenancePositionParams]
|
|
148
|
+
):
|
|
149
|
+
"""Calibration set up position command creation request model."""
|
|
150
|
+
|
|
151
|
+
commandType: MoveToMaintenancePositionCommandType = (
|
|
152
|
+
"calibration/moveToMaintenancePosition"
|
|
153
|
+
)
|
|
154
|
+
params: MoveToMaintenancePositionParams
|
|
155
|
+
|
|
156
|
+
_CommandCls: Type[MoveToMaintenancePosition] = MoveToMaintenancePosition
|