diff --git a/dataflow-gamepad.yml b/dataflow-gamepad.yml index 23057f8..f06f204 100644 --- a/dataflow-gamepad.yml +++ b/dataflow-gamepad.yml @@ -1,23 +1,29 @@ -# The same bench, with a real gamepad and a probe. +# The pad, a real arm and the probe. No bench and no browser. # # `dataflow.yml` is what CI validates, and it deliberately has no pad in it: the # pad is `dora-joy`, another repo, and pulling it in by `git:` would cost that # file its one property — that it resolves and runs from this checkout alone. -# This file is the other half. It needs the network on first build, and a pad. +# This file is the other half. It needs the network on first build, a pad, and +# an arm. # -# The bench answers services and publishes telemetry but never moves anything. -# What this is for is watching the node decide: the lease changing hands, the -# deadman firing when you let go, and the arm being stopped when the pad — or -# the node reading it — goes away. +# It is `dataflow-robot.yml` with the probe attached and the console shut, for +# the one job the probe exists for: checking that the pad in your hands has the +# layout `mapping.py` assumes, against the arm that will actually move. Use +# `dataflow-robot.yml` for ordinary driving. # -# Run it under a coordinator rather than `dora run`, so `dora topic` can read the -# wire and so the probe has something to attach to: +# source .venv/bin/activate # not --uv; README.md says why +# dora build dataflow-gamepad.yml +# dora run dataflow-gamepad.yml # -# dora up -# dora start dataflow-gamepad.yml --uv --name teleop-bench -# dora-teleop-probe # in another terminal -# dora topic echo -d teleop-bench teleop/jog -# dora stop --name teleop-bench && dora down +# `dora run`, not `dora up` + `dora start`: dora 1.0.1 refuses to start a +# dataflow holding `git:` nodes from a coordinator — "node joy has git source, +# but no `dora build` was run yet", straight after a build that succeeded. It is +# the same shape of gap as the `--uv` one above, and it costs this file +# `dora topic`, which needs a coordinator to read the wire. +# +# ROBOT_IP and TOOL_TYPE below name the arm in front of you: the bench arm at +# 192.168.1.162, with a vacuum tool. Read +# `The gamepad` in README.md before picking it up — Back is the E-STOP. strict_types: true @@ -47,10 +53,11 @@ nodes: source: joy/joy queue_size: 1 queue_policy: drop_oldest - response: bench/response - robot_state: bench/robot_state - tcp_pose: bench/tcp_pose - joint_pose: bench/joint_pose + response: ulite6/response + motion_state: ulite6/motion_state + robot_state: ulite6/robot_state + tcp_pose: ulite6/tcp_pose + joint_pose: ulite6/joint_pose outputs: - twist - command @@ -60,8 +67,13 @@ nodes: env: SPEED_MM_S: "60" SPEED_DEG_S: "30" - # This one is about the pad, so the console stays shut. Set a port to - # bring it up alongside and watch the lease move between the two. + # Keep the deadman layers ordered: JOY_TTL_S < JOG_TTL_S < the arm's own + # VELOCITY_COMMAND_TTL_S, which is 0.5 s below. Each backs up the one + # inside it, and a backstop that fires first backs up nothing. + JOY_TTL_S: "0.2" + JOG_TTL_S: "0.4" + # This one is about the pad, so the console stays shut and no port is + # opened. `dataflow-robot.yml` is the one that serves it. WEB_PORT: "0" # Declared, not spawned: `dora-teleop-probe` attaches to this id when you run @@ -71,15 +83,34 @@ nodes: inputs: joy: joy/joy - - id: bench - path: examples/bench.py + - id: ulite6 + git: https://gitea.liria.cl/liria/dora-ulite6.git + tag: v0.3.1 + build: pip install . + path: dora-ulite6 inputs: - tick: dora/timer/millis/200 - jog: teleop/jog + tick: dora/timer/millis/100 request: teleop/request - ui_state: teleop/ui_state + jog: teleop/jog outputs: - response - - robot_state - - tcp_pose + - motion_state - joint_pose + - tcp_pose + - robot_state + # dora type-checks before it fetches a `git:` source, so it cannot read the + # arm's own manifest from here. These three repeat what `dora-ulite6` + # v0.3.1 annotates; `response` and `motion_state` stay untyped there and so + # stay untyped here. Re-check them when moving to a new tag. + output_types: + joint_pose: std/core/v1/Float32 + tcp_pose: std/core/v1/Float32 + robot_state: std/core/v1/String + env: + ROBOT_IP: "192.168.1.162" + TOOL_TYPE: "vacuum" + # The outermost deadman, enforced by the controller whether or not any of + # this is alive. Every timer above must stay below it. + VELOCITY_COMMAND_TTL_S: "0.5" + # The pad does not home. Nothing moves until somebody pushes a stick. + INIT_MODE: "none" diff --git a/dataflow-robot.yml b/dataflow-robot.yml index d113d5a..91b16db 100644 --- a/dataflow-robot.yml +++ b/dataflow-robot.yml @@ -16,8 +16,8 @@ # then looks for its entrypoint in this dataflow's venv instead. README.md has the # detail. `dataflow.yml` has no `git:` nodes and is fine with --uv. # -# Set ROBOT_IP and TOOL_TYPE below to match the arm in front of you. The -# defaults are `dora-ulite6`'s own: 192.168.1.192 and a vacuum tool. +# ROBOT_IP and TOOL_TYPE below name the arm in front of you: the bench arm at +# 192.168.1.162, with a vacuum tool. # # The web console comes with the node: it serves the page and holds the # browsers' sockets itself, so `http://:7000` is a second way to @@ -102,7 +102,7 @@ nodes: tcp_pose: std/core/v1/Float32 robot_state: std/core/v1/String env: - ROBOT_IP: "192.168.1.192" + ROBOT_IP: "192.168.1.162" TOOL_TYPE: "vacuum" # The outermost deadman, enforced by the controller whether or not any of # this is alive. Every timer above must stay below it. diff --git a/dataflow.yml b/dataflow.yml index 33e3cbb..5a58791 100644 --- a/dataflow.yml +++ b/dataflow.yml @@ -5,8 +5,9 @@ # manifest from `path:` and CI needs no gamepad, no robot and no sibling clones. # # There is **no gamepad here**, because the pad is another node and wiring it in -# by `git:` would cost this file the one property it has. For a real pad on a -# real bench, use `dataflow-gamepad.yml`. +# by `git:` would cost this file the one property it has. For a real pad, use +# `dataflow-robot.yml`, or `dataflow-gamepad.yml` to check the pad with the +# probe — both of which drive a real arm. # # This is **not** the real stack. The bench answers services and publishes # telemetry but never moves anything. README.md carries the four-node wiring a