Migrates the ulite6 Python dora node from dora_littlehand into a
self-contained repository following the dora-zed structure. Adds
command lifecycle state ("started"/"done"/"failed") and type
("command"/"error") to the status output so coordinator nodes can
reliably sequence robot actions without polling.
2.5 KiB
AGENTS.md
This file provides guidance to AI coding assistants when working with code in this repository.
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.
Build
uv pip install -e .
Requirements: Python >=3.8, uv, and network access to the UFactory Lite6 robot.
Run
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.).
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).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 processestick(publishes joint_pose and tcp_pose) andcommand(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.
Key APIs
- dora Python API (
dora):Node(),node.send_output(), event iteration viafor 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(). - 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.
Rules
- Do not mention AI tools in commit messages or documentation.
- This controls a real robot. Test changes carefully and preserve safety checks.