Skip to content

Multi-arm support and conditional head96 in LiquidHandler & Backends#877

Open
BioCam wants to merge 3 commits intoPyLabRobot:mainfrom
BioCam:pr/multi-arm-head96
Open

Multi-arm support and conditional head96 in LiquidHandler & Backends#877
BioCam wants to merge 3 commits intoPyLabRobot:mainfrom
BioCam:pr/multi-arm-head96

Conversation

@BioCam
Copy link
Collaborator

@BioCam BioCam commented Feb 5, 2026

No description provided.

BioCam and others added 2 commits February 5, 2026 01:56
…zation

- LiquidHandler: replace single `_resource_pickup` with `_resource_pickups` dict
  keyed by arm index, with backward-compatible property for arm 0
- LiquidHandler: only create head96 trackers when `core96_head_installed` is True
- LiquidHandler: serialize head96_state and arm_state (resource name, type, direction,
  dimensions) for downstream consumers (e.g. visualizer)
- LiquidHandler: register _state_updated callback on head/head96 trackers, and fire
  it on pick_up_resource / drop_resource
- LiquidHandler: guard pick_up_resource with RuntimeError if no arm installed
- Backends: add `num_arms` attribute to STARBackend, ChatterboxBackend,
  STARChatterboxBackend (configurable `iswap_installed` param)
- TipTracker: propagate state-update callback to tip's volume tracker on commit()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@BioCam BioCam requested a review from Copilot February 5, 2026 02:29
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds multi-arm support to the LiquidHandler and backends, making the CoRe 96 head installation conditional based on backend configuration.

Changes:

  • Added num_arms property to backends and liquid handler to support multiple robotic arms
  • Made the CoRe 96 head (head96) conditional based on the core96_head_installed backend attribute
  • Enhanced state serialization to include head96 and arm states with detailed resource information

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pylabrobot/resources/tip_tracker.py Propagates state-update callback to tip's volume tracker for visualizer refresh
pylabrobot/liquid_handling/liquid_handler_tests.py Adds num_arms to mock backend for testing
pylabrobot/liquid_handling/liquid_handler.py Implements multi-arm support with dict-based resource pickup tracking and conditional head96
pylabrobot/liquid_handling/backends/hamilton/vantage_tests.py Sets num_arms = 1 in test backend setup
pylabrobot/liquid_handling/backends/hamilton/STAR_tests.py Sets num_arms = 1 across multiple test backend setups
pylabrobot/liquid_handling/backends/hamilton/STAR_chatterbox.py Adds iswap_installed parameter and sets num_arms based on iSWAP presence
pylabrobot/liquid_handling/backends/hamilton/STAR_backend.py Sets num_arms based on iSWAP installation status
pylabrobot/liquid_handling/backends/chatterbox.py Adds num_arms = 1 to chatterbox backend initialization

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@BioCam BioCam force-pushed the pr/multi-arm-head96 branch 2 times, most recently from 0ff8a90 to c181971 Compare February 5, 2026 08:05
…zation

- LiquidHandler: replace single `_resource_pickup` with `_resource_pickups` dict
  keyed by arm index, with backward-compatible property for arm 0
- LiquidHandler: only create head96 trackers when `core96_head_installed` is True
- LiquidHandler: serialize head96_state and arm_state (resource name, type, direction,
  dimensions) for downstream consumers (e.g. visualizer)
- LiquidHandler: register _state_updated callback on head/head96 trackers, and fire
  it on pick_up_resource / drop_resource
- LiquidHandler: guard pick_up_resource with RuntimeError if no arm installed
- Backends: add `num_arms` attribute to STARBackend, ChatterboxBackend,
  STARChatterboxBackend (configurable `iswap_installed` param)
- TipTracker: propagate state-update callback to tip's volume tracker on commit()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@BioCam BioCam force-pushed the pr/multi-arm-head96 branch from c181971 to afe2dfb Compare February 5, 2026 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant