Skip to content

feat(big_bear): add BigBear orbital shaker driver#1174

Merged
rickwierenga merged 3 commits into
v1b1from
feat/bigbear-orbital-shaker
Jul 21, 2026
Merged

feat(big_bear): add BigBear orbital shaker driver#1174
rickwierenga merged 3 commits into
v1b1from
feat/bigbear-orbital-shaker

Conversation

@rickwierenga

Copy link
Copy Markdown
Member

What

Adds a driver for the BigBear orbital shaker, a daisy-chained orbital
shaker where a single serial line drives up to 16 independently-addressed
shaker positions ("nests").

  • pylabrobot/big_bear/orbital_shaker.pyBigBearOrbitalShaker, a single
    plain class over pylabrobot.io.serial.Serial.
  • Public API: start_shaking(rpm, acceleration, sequence, device_id),
    stop_shaking(device_id), stop_all(), find_home(device_id),
    home_all(), get_serial_number(device_id), plus the
    OrbitalShakerSequence enum and BigBearError.
  • Docs entry under docs/api/.

Protocol

  • Serial: 9600 baud, 8 data bits, no parity, 1 stop bit, no handshake,
    \r terminator.
  • Commands are @<id><cmd>, where <id> is the nest number in hex (nest 10 →
    @A, nest 16 → @10). Value-setting commands (V<rpm>, A<accel>, +/-)
    are followed by a @<id>?<c> read-back and an @<id>Q status poll.
  • A rejected command or comms failure replies ?:.
  • Ranges: rpm 60–3570, acceleration 1–10 (device scale), nests 1–16.

Testing

  • ruff check / ruff format --check clean; mypy clean.
  • Command sequences smoke-tested against a stubbed serial (verified the exact
    on-wire bytes for shake/stop/home, hex addressing, ?: error handling, and
    range/device-id validation).

⚠️ Not yet hardware-verified. The line terminator and reply formats are
inferred from the vendor stack, and setup() emits a warning until someone
confirms it on a real unit. Command-pacing delays are constructor parameters
so they can be tuned during bring-up.

🤖 Generated with Claude Code

rickwierenga and others added 3 commits July 20, 2026 17:52
A daisy-chained orbital shaker: one serial line addresses up to 16 shaker
positions ("nests"), each by a 1-based hex id. Adds a single-class driver
(BigBearOrbitalShaker) over pylabrobot.io.serial with start/stop shaking,
homing, and serial-number readout.

Serial: 9600 8N1, no handshake, carriage-return terminated. Commands are
"@<id><cmd>"; value sets are followed by a "@<id>?<c>" read-back and an
"@<id>Q" status poll. A rejected command replies "?:".

Not verified against hardware; setup() emits a warning to that effect.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a hello-world notebook covering daisy chaining, setup, per-nest and
whole-chain start/stop, homing, and serial-number readout, plus the user-guide
index entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the OrbitalShakerSequence enum with a Literal["CW", "CCW"] argument,
validated at the call site. Also fix an invalid cell in the user-guide
notebook (missing required code-cell fields).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rickwierenga
rickwierenga merged commit 24e2fbe into v1b1 Jul 21, 2026
1 of 19 checks passed
@rickwierenga
rickwierenga deleted the feat/bigbear-orbital-shaker branch July 21, 2026 01:01
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