Standalone control toolkit for the DM-J4310 worm-gear FastGripper (SocketCAN / gs_usb / slcan)
Project description
fastgripper-openarm — DM-J4310 Worm-Gear Gripper Toolkit
Standalone control for the worm-gear gripper: calibrate, home, and drive it over CAN. No ROS required; plain Python ≥ 3.10 over SocketCAN (Linux) or gs_usb/slcan USB adapters (macOS bench use).
Install
The repo is private — install over SSH with a GitHub account that has access (we'll add you as a collaborator):
pip install "git+ssh://git@github.com/Transcend-Mechanics/fastgripper-openarm.git"
# with gamepad support:
pip install "fastgripper-openarm[pad] @ git+ssh://git@github.com/Transcend-Mechanics/fastgripper-openarm.git"
(HTTPS with a personal access token also works:
pip install "git+https://<token>@github.com/Transcend-Mechanics/fastgripper-openarm.git".)
Python must be ≥ 3.10 (python3 --version; stock JetPack ships 3.8 — the
scripts fail on it at import with TypeError: unsupported operand type(s) for |).
fastgripper-gui additionally needs the system package python3-tk.
Calibration data
Tools look for gripper_cal.json in the current directory first, then
~/.config/fastgripper/gripper_cal.json. Either place the calibration file
we sent with your unit at one of those paths, or generate one against the
hardstops (jaws empty!):
fastgripper-autocal full --expected_span <rad from the unit label> \
--interface socketcan --channel canX
Motor IDs live in the cal file — no ID flags needed after this.
Bus setup (Linux)
The gripper speaks classic CAN 2.0 at 1 Mbit/s. Find the interface the
USB-CAN adapter created (do NOT assume can1 — plug/unplug and watch
ip -br link | grep can), then:
sudo ip link set canX up type can bitrate 1000000 # rerun after every reboot
Sharing an existing classic-CAN bus instead: stub < 30 cm, no extra
terminator mid-bus; the gripper's IDs (unit label; default 0x20/0x30) avoid
OpenArm's 0x01–0x08/0x11–0x18. Never share a CAN FD bus — a classic device
errors on every FD frame and can disrupt the other nodes. Always pass
--interface socketcan --channel canX explicitly.
Use
fastgripper-autocal home --interface socketcan --channel canX
# ~20 s re-anchor against the closed stop. JAWS EMPTY. Run once after
# unboxing, and any time behavior looks off.
fastgripper-pad --keyboard --interface socketcan --channel canX
# hold a = open, d = close, space = stop, Ctrl-C = quit
fastgripper-pad --interface socketcan --channel canX
# gamepad: LT = open, RT = close, pressure = speed (needs [pad] extra)
fastgripper-drive 40 --interface socketcan --channel canX
# scriptable: go to 40% closed and exit — read src/fastgripper/drive.py
# to embed the gripper in your own Python
fastgripper-gui --interface socketcan --channel canX
# Tk GUI (desktop session required)
fastgripper-doctor --interface socketcan --channel canX
# no-motion diagnosis when position/state look wrong
Safety
- Jaws empty for any
fastgripper-autocalrun — an object in the jaws gets squeezed or fakes a stall. - The worm gear holds position with the motor off: grip survives power cuts (feature) and will NOT release on power cut (hazard — run a tool to open).
- All tools are dead-man by construction, position-bounded to the
calibration, and torque-capped. The worm multiplies motor torque into
large jaw force — don't raise
--tmax/--probe_tmaxcasually. - Keep hands out of jaw and linkage travel while any tool is running.
Troubleshooting
| Symptom | Do this |
|---|---|
TypeError: unsupported operand type(s) for | at import |
Python < 3.10 — see Install |
| "no feedback from motor" | 24 V, common CAN ground, channel name, ip -details link show canX, IDs on the unit label vs cal file |
| worked yesterday, dead after reboot | rerun the ip link set ... up (not persistent) |
ModuleNotFoundError: pygame |
install the [pad] extra, or use --keyboard |
| tool refuses: "restored position ... stale state" | fastgripper-autocal home (jaws empty) |
| close stops early / open overruns | same — that's the turn-alias symptom; fastgripper-doctor explains without moving the motor |
| probe aborts on free-run torque | per-unit friction: read the printed free-run median/p95 and set --contact_torque just above the p95 |
fastgripper-calibrate (keyboard jog, mark endpoints by eye, real TTY
required) is the manual fallback if autocal can't be tuned for your unit.
Project details
Release history Release notifications | RSS feed
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 fastgripper_openarm-0.1.0.tar.gz.
File metadata
- Download URL: fastgripper_openarm-0.1.0.tar.gz
- Upload date:
- Size: 36.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a04fe9e6afb23ec5f741146c2a1419affc29b52095f17c6d52231b498f57569f
|
|
| MD5 |
469a4d43c11c5cb03864a2a3935a377e
|
|
| BLAKE2b-256 |
ef32b6f0ba739e2c2eb590530d911b95c7de192268d43b1f445dee5849017106
|
Provenance
The following attestation bundles were made for fastgripper_openarm-0.1.0.tar.gz:
Publisher:
release.yml on Transcend-Mechanics/fastgripper-openarm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastgripper_openarm-0.1.0.tar.gz -
Subject digest:
a04fe9e6afb23ec5f741146c2a1419affc29b52095f17c6d52231b498f57569f - Sigstore transparency entry: 2203540372
- Sigstore integration time:
-
Permalink:
Transcend-Mechanics/fastgripper-openarm@8960bc87dbfae45a2c393332a7763f1c45f0cd57 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Transcend-Mechanics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8960bc87dbfae45a2c393332a7763f1c45f0cd57 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fastgripper_openarm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fastgripper_openarm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 40.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4960a4f1cca15112a2e297d2f9e26139e0b9fdc64cbb774cc014574cae16f59d
|
|
| MD5 |
e42c1c54d1e6e506ad57f9c8a2d989c0
|
|
| BLAKE2b-256 |
18757df336df4d386c252f68ac9d3360983995c10b1a7741faaaee9e5ab1d960
|
Provenance
The following attestation bundles were made for fastgripper_openarm-0.1.0-py3-none-any.whl:
Publisher:
release.yml on Transcend-Mechanics/fastgripper-openarm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastgripper_openarm-0.1.0-py3-none-any.whl -
Subject digest:
4960a4f1cca15112a2e297d2f9e26139e0b9fdc64cbb774cc014574cae16f59d - Sigstore transparency entry: 2203540386
- Sigstore integration time:
-
Permalink:
Transcend-Mechanics/fastgripper-openarm@8960bc87dbfae45a2c393332a7763f1c45f0cd57 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Transcend-Mechanics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8960bc87dbfae45a2c393332a7763f1c45f0cd57 -
Trigger Event:
push
-
Statement type: