dora-node.yml is the typed contract a consumer wires against, and the only one they get: no source package is shared between node repositories. The jog, request and ui ports stay untyped, because dora treats a port carrying request_id as pattern-correlated and several Arrow schemas legitimately flow over each — one per service, one per console message. dataflow.yml runs the whole operator stack from checkouts: this node, the WebSocket bridge and the arm. web/ holds a placeholder page, not the real console. It exists so the dataflow has something to serve and so the node can be checked end to end before the Control section is ported across from the monolithic repo. It reads telemetry and can take, release and stop; nothing else.
66 lines
1.7 KiB
YAML
66 lines
1.7 KiB
YAML
# The whole operator stack, and what CI validates.
|
|
#
|
|
# Built from checkouts rather than tags, so `dora validate` resolves each node's
|
|
# manifest from its `path:` and checks the wiring against the versions in front
|
|
# of you. The sibling repos are expected next to this one, which is how they are
|
|
# cloned in practice.
|
|
#
|
|
# Three nodes, one loop: the bridge carries the browser, this node decides who
|
|
# drives, and the arm node moves the arm and reports back.
|
|
|
|
strict_types: true
|
|
|
|
nodes:
|
|
- id: teleop
|
|
path: dora-teleop
|
|
build: pip install .
|
|
inputs:
|
|
tick: dora/timer/millis/50
|
|
ui_command: ws-transceiver/data_out
|
|
clients: ws-transceiver/clients
|
|
response: ulite6/response
|
|
motion_state: ulite6/motion_state
|
|
robot_state: ulite6/robot_state
|
|
tcp_pose: ulite6/tcp_pose
|
|
joint_pose: ulite6/joint_pose
|
|
outputs:
|
|
- jog
|
|
- request
|
|
- ui_state
|
|
env:
|
|
SPEED_MM_S: "60"
|
|
SPEED_DEG_S: "30"
|
|
|
|
- id: ws-transceiver
|
|
path: ../dora-websocket-transceiver
|
|
build: pip install .
|
|
inputs:
|
|
data_in: teleop/ui_state
|
|
outputs:
|
|
- data_out
|
|
- clients
|
|
env:
|
|
WS_PORT: "9000"
|
|
STATIC_DIR: "../dora-teleop/web"
|
|
HTTP_PORT: "9010"
|
|
|
|
- id: ulite6
|
|
path: ../dora-ulite6
|
|
build: pip install .
|
|
inputs:
|
|
tick: dora/timer/millis/100
|
|
request: teleop/request
|
|
jog: teleop/jog
|
|
outputs:
|
|
- response
|
|
- motion_state
|
|
- joint_pose
|
|
- tcp_pose
|
|
- robot_state
|
|
env:
|
|
ROBOT_IP: "192.168.1.192"
|
|
TOOL_TYPE: "vacuum"
|
|
# Nothing moves because the node started. An operator asks for the first
|
|
# motion, which is the whole point of a teleop stack.
|
|
INIT_MODE: "none"
|