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 constantspoint- read one stylus positionstream- continuously print positionscapture -o points.csv- capture points on keypress, write CSVdist- measure distances between captured point pairshome- 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
homewas sent. This is lost at every power cycle. The library refuses to return positions until you callhome()or explicitlyassume_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=Trueand 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| microcmm-0.1.0.tar.gz | 39.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.