diff --git a/AGENTS.md b/AGENTS.md index 6e1f426..d8d9021 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,7 +4,11 @@ This file provides guidance to AI coding assistants when working with code in th ## What this is -A dora-rs Python node that interfaces with a UFactory Lite6 robot arm. On each tick it reads joint angles and TCP pose from the robot and publishes them as dora outputs. It also accepts JSON commands (home, move_to, move_to_pose, vacuum_on/off) via a `command` input. A FastAPI REST server with a web UI runs in a background thread for manual control. The robot control wrapper lives in `dora_ulite6/main.py` as the `ULite6Helper` class, and the dora event loop is the `main()` function in the same file. +A dora-rs Python node that interfaces with a UFactory Lite6 robot arm. On each tick it reads joint angles +and TCP pose from the robot and publishes them as dora outputs. It also accepts JSON commands +(home, move_to, move_to_pose, vacuum_on/off) via a `command` input. A FastAPI REST server with a web UI +runs in a background thread for manual control. The robot control wrapper lives in `dora_ulite6/main.py` +as the `ULite6Helper` class, and the dora event loop is the `main()` function in the same file. ## Build @@ -21,15 +25,18 @@ dora up dora start dataflow.yml ``` -Robot behavior is configured through environment variables (see README.md for the full list: ROBOT_IP, DEFAULT_SPEED, DEFAULT_UNITS, API_HOST, API_PORT, VACUUM_ENABLED, INIT_MODE, etc.). +Robot behavior is configured through environment variables (see README.md for the full list: +ROBOT_IP, DEFAULT_SPEED, DEFAULT_UNITS, API_HOST, API_PORT, VACUUM_ENABLED, INIT_MODE, etc.). ## Architecture - **`dora_ulite6/main.py`** -- Single-file implementation containing: - - `ULite6Helper`: Wraps the xArm Python SDK for motion control (go_home, move_to_pose, get_current_position, get_joint_angles_deg, get_pose_matrix, vacuum gripper, status, reset). + - `ULite6Helper`: Wraps the xArm Python SDK for motion control (go_home, move_to_pose, + get_current_position, get_joint_angles_deg, get_pose_matrix, vacuum gripper, status, reset). - `MoveToRequest` / `MoveToPoseRequest`: Pydantic models for API validation. - `create_api()`: FastAPI app factory with REST endpoints and embedded HTML/JS web UI for manual control. - - `main()`: Dora event loop. Starts FastAPI in a daemon thread, then processes `tick` (publishes joint_pose and tcp_pose) and `command` (executes robot actions and publishes status) inputs. + - `main()`: Dora event loop. Starts FastAPI in a daemon thread, then processes `tick` (publishes + joint_pose and tcp_pose) and `command` (executes robot actions and publishes status) inputs. - **`dora_ulite6/__init__.py`** -- Package marker. - **`pyproject.toml`** -- Package metadata, dependencies, and entry point. - **`dataflow.yml`** -- Example dora dataflow using the git: source format. @@ -37,12 +44,14 @@ Robot behavior is configured through environment variables (see README.md for th ## Key APIs - **dora Python API** (`dora`): `Node()`, `node.send_output()`, event iteration via `for event in node`. -- **xArm SDK** (`xarm.wrapper.XArmAPI`): `connect()`, `motion_enable()`, `set_mode()`, `set_state()`, `set_position()`, `move_gohome()`, `get_position()`, `get_servo_angle()`, `set_vacuum_gripper()`. +- **xArm SDK** (`xarm.wrapper.XArmAPI`): `connect()`, `motion_enable()`, `set_mode()`, `set_state()`, + `set_position()`, `move_gohome()`, `get_position()`, `get_servo_angle()`, `set_vacuum_gripper()`. - Output data is sent as PyArrow arrays with metadata dicts. ## Tools -- **Issue tracker:** Gitea. Use the Gitea MCP tools (`mcp__gitea__*`) to read and manage issues, pull requests, and other repository operations. +- **Issue tracker:** Gitea. Use the Gitea MCP tools (`mcp__gitea__*`) to read and manage issues, + pull requests, and other repository operations. ## Rules