Skip to main content

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-autocal run — 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_tmax casually.
  • 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


Download files

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

Source Distribution

fastgripper_openarm-0.1.0.tar.gz (36.3 kB view details)

Uploaded Source

Built Distribution

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

fastgripper_openarm-0.1.0-py3-none-any.whl (40.8 kB view details)

Uploaded Python 3

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

Hashes for fastgripper_openarm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a04fe9e6afb23ec5f741146c2a1419affc29b52095f17c6d52231b498f57569f
MD5 469a4d43c11c5cb03864a2a3935a377e
BLAKE2b-256 ef32b6f0ba739e2c2eb590530d911b95c7de192268d43b1f445dee5849017106

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastgripper_openarm-0.1.0.tar.gz:

Publisher: release.yml on Transcend-Mechanics/fastgripper-openarm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for fastgripper_openarm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4960a4f1cca15112a2e297d2f9e26139e0b9fdc64cbb774cc014574cae16f59d
MD5 e42c1c54d1e6e506ad57f9c8a2d989c0
BLAKE2b-256 18757df336df4d386c252f68ac9d3360983995c10b1a7741faaaee9e5ab1d960

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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