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.

Metadata

Release files for microcmm 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for microcmm 0.1.0
File Size Uploaded Provenance
microcmm-0.1.0.tar.gz 39.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for microcmm 0.1.0
File Interpreter ABI Platform
microcmm-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 54.4 kB

Release files / microcmm-0.1.0.tar.gz

Download URL microcmm-0.1.0.tar.gz
Size 39.2 kB
Tags Source
SHA-256 checksum
How to use checksums
adbe2b347494b7198be70c3fde3b855c544f4c94ff75929e1c41f21ea5bbe10d
BLAKE2b-256 checksum
How to use checksums
00f4fc205e0783fe86e979995efe13594343bba8fcc5418bcc7e86bb61102743
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / microcmm-0.1.0-py3-none-any.whl

Download URL microcmm-0.1.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1005893b6eab4ec56953a4b50bce75eb88cd29b6243540f28d853a254c6f7ae4
BLAKE2b-256 checksum
How to use checksums
eedb9a3dfa83534ff21507ff6e673ca9448c7d2e920fc928dcebca8fe3a94352
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for microcmm 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page