Metadata-Version: 2.4
Name: zeroArm_sdk
Version: 0.2.1
Summary: Official SDK for ZeroArm robotic arm (proprietary)
Home-page: https://github.com/HANCKH/zeroArm_python_sdk
Author: ForceEase Co.
Author-email: "ForceEase Co." <support@forceease.tech>
License: MIT
Project-URL: Source, https://github.com/HANCKH/zeroArm_python_sdk
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Cython
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9,<3.13
Description-Content-Type: text/markdown
Requires-Dist: websockets
Requires-Dist: zeroconf
Dynamic: author
Dynamic: home-page
Dynamic: license
Dynamic: requires-python

# ZeroArm Python SDK

Current SDK source version: `0.2.1`

Version 0.2 uses the same device WebSocket protocol-v2 bridge as the GUI and
ROS SDK. Before any motion command is enabled, `connect()` verifies both the
firmware version and the advertised SDK protocol capability, waits for a fresh
operational state, and acquires an exclusive renewable control lease.

Requirements:

- ZeroArm firmware `1.0.53` or newer
- `sdk_protocol_version = 2`
- Python 3.9–3.12

```bash
pip install zeroArm_sdk
```

```python
import asyncio
from zeroArm_sdk import RobotArm


async def main():
    arm = RobotArm(
        arm_model="v4",
        slot="left",
        mount="upright",
        end_effector={
            "type": "gripper",
            "model": "standardParallel",
            "ff_kp": 4,
        },
    )
    await arm.auto_discover_and_connect()
    print(arm.firmware_version, arm.sdk_protocol_version)
    try:
        await arm.set_joints_batch(
            [(1, 0.2), (2, -0.3)],
            max_vel=3.0,
            max_acc=5.0,
            max_jerk=5.0,
            wait_for_completion=True,
        )
        await arm.set_gripper(0.03)
    finally:
        await arm.close()


asyncio.run(main())
```

Use `end_effector="none"`, a gripper configuration, or a screwdriver
configuration such as `{"type": "screwdriver", "default_vel": 2,
"max_vel": 6}`. If it is omitted, the SDK leaves the device's existing
end-effector configuration unchanged.

Normal-control APIs intentionally do not expose motor zeroing. Calibration and
zero writes belong to the maintenance workflow.

Main methods:

- `set_joint()` / `set_joints_batch()`
- `set_tf()`
- `set_gripper()` / `set_gripper_torque()`
- `set_screwdriver()`
- `enable_hold_current()` / `zero_gravity_mode()`
- `back_to_zero()` / `back_to_initial()`
- `gracefully_shutdown()` / `emergency_shutdown()`

Command rejection, stale state, lease loss, incompatible firmware, and
transport failures raise the typed exceptions exported by `zeroArm_sdk`.
