Skip to main content

microcmm

Python library + CLI for reading positions from a MicroScribe-3D digitizer arm over its RS-232 serial port. Speaks the Immersion HCI protocol directly (no Windows DLL) and does the forward kinematics on the host using the arm's own EEPROM calibration. Millimeters everywhere.

Install

pip install microcmm
# or
uv add microcmm

Usage

from microcmm import MicroScribe

with MicroScribe("/dev/cu.usbserial-XXXX") as ms:
    # You should be homing right now: arm in its home pose (stylus seated
    # in the holder and vertical, counterweight against the stylus holder).
    ms.home()
    # (Advanced: ms.assume_homed() if the arm is already homed this power cycle.)
    print(ms.info.serial_number)
    p = ms.pose()
    print(p.x, p.y, p.z)

CLI

microcmm <command>
  • info - identify the arm, dump its calibration constants
  • point - read one stylus position
  • stream - continuously print positions
  • capture -o points.csv - capture points on keypress, write CSV
  • dist - measure distances between captured point pairs
  • home - set the home position (arm must be in its home pose)
  • ports - list serial ports

Notes

  • Homing is mandatory. The arm only reads correctly if it was in its home pose (stylus seated in the holder and vertical, counterweight pressed against the bottom of the stylus holder) at power-on or when home was sent. This is lost at every power cycle. The library refuses to return positions until you call home() or explicitly assume_homed() - an unhomed arm produces garbage that looks plausible.
  • Only tested on a MicroScribe-3D model D (5-DOF). The library refuses other models by precaution, not because they can't work - if you have one, run with allow_untested_models=True and report back, we'll add it.
  • Pedals are not implemented because we don't have one. The raw button byte is exposed on every packet if you want to try.
  • 5-DOF arms have no roll about the stylus axis; the reported orientation (XYZ-fixed roll/pitch/yaw) reflects that.
  • Accuracy validated with a 45-point single-divot pivot test: 0.66 mm RMS. Avoid poses with the stylus aligned with the forearm (singularity).
  • Not implemented, on purpose: analog channels, baud switching, EEPROM writes (SET_PARAMS / SET_HOME / RESTORE_FACTORY), motion-report streaming, custom tip offsets (MSTIP.DAT). Ask if you need one.

Dev

Install dependencies with uv sync, then:

uv run pytest
uv run ruff check src tests
uv run mypy src tests

Tests run without hardware: the kinematics is checked against golden joint-angles-to-XYZ values captured from a real arm.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microcmm-0.1.0.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

microcmm-0.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file microcmm-0.1.0.tar.gz.

File metadata

  • Download URL: microcmm-0.1.0.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for microcmm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 adbe2b347494b7198be70c3fde3b855c544f4c94ff75929e1c41f21ea5bbe10d
MD5 d09964661c604e1d0a56890c37803661
BLAKE2b-256 00f4fc205e0783fe86e979995efe13594343bba8fcc5418bcc7e86bb61102743

See more details on using hashes here.

File details

Details for the file microcmm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: microcmm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for microcmm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1005893b6eab4ec56953a4b50bce75eb88cd29b6243540f28d853a254c6f7ae4
MD5 c8f72511f1d3a44363399782858cb467
BLAKE2b-256 eedb9a3dfa83534ff21507ff6e673ca9448c7d2e920fc928dcebca8fe3a94352

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page