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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adbe2b347494b7198be70c3fde3b855c544f4c94ff75929e1c41f21ea5bbe10d
|
|
| MD5 |
d09964661c604e1d0a56890c37803661
|
|
| BLAKE2b-256 |
00f4fc205e0783fe86e979995efe13594343bba8fcc5418bcc7e86bb61102743
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1005893b6eab4ec56953a4b50bce75eb88cd29b6243540f28d853a254c6f7ae4
|
|
| MD5 |
c8f72511f1d3a44363399782858cb467
|
|
| BLAKE2b-256 |
eedb9a3dfa83534ff21507ff6e673ca9448c7d2e920fc928dcebca8fe3a94352
|