Launch & Verify: ROBIN Intent Flow (ros4hri)

Quick guide to bring up the full ROBIN stack and confirm that UI button presses reach the /intents ROS 2 topic.


Architecture

Dashboard button (React)
  └─► POST http://localhost:8001/intent   (alert-processor)
        └─► PATCH Orion-LD pendingIntent
              └─► NGSI-LD subscription notification
                    └─► POST http://localhost:8766/orion-notify  (welding_http_bridge)
                          └─► /intents  (ROS 2 topic)
                                └─► welding_supervisor → skill action servers

Alternative direct path for testing (bypasses Orion-LD):

curl POST http://localhost:8766/intent  →  /intents

Step 1 — Start Docker services

cd ~/open-robin
docker compose up -d orion-ld mongo-db timescaledb mintaka alert-processor robin-dashboard

Wait ~15 s for Orion-LD and TimescaleDB to finish initialising.

Health check:

curl -s http://localhost:8001/health | jq
# Expected: {"status": "ok"}

Step 2 — Start ROS 2 skill stack (inside vulcanexus container)

2a. Start the container (if not already running)

docker compose up -d vulcanexus
docker exec -it vulcanexus-bridge bash

2b. Build the workspace (first time only, or after code changes)

cd /workspace/ros2_packages
colcon build --symlink-install 2>&1 | tail -5
source install/setup.bash

2c. Launch the full intent pipeline (simulation mode — no real hardware)

ros2 launch welding_demo welding_robin_demo.launch.py

This starts in one command:

  • welding_home_skill, welding_seam_skill

  • welding_recommendation_skill, welding_manual_skill

  • welding_http_bridge (HTTP server on port 8766)

  • welding_supervisor (intent router, delayed 2 s)

Hardware mode (real robot): the open module ships simulation-only. To drive real hardware, launch welding_robin_demo.launch.py with use_simulation:=false and provide nodes that advertise the skills’ hardware-mode interfaces (/move_home, /execute_bead, /fronius/set_*) for your robot and power source.


Step 3 — Open the dashboard

http://localhost:5174

Step 4 — Watch the intent stream

In a second terminal inside the vulcanexus container:

docker exec -it vulcanexus-bridge bash
source /workspace/ros2_packages/install/setup.bash
ros2 topic echo /intents

Step 5 — Trigger and verify each intent

UI action

Expected intent on /intents

Start button → Pre-Start modal → Proceed and Start

START_PROCESS

Deviation detected → Manual Adjust → fill values → Apply and Continue

MANUAL_ADJUST

Deviation detected → AI RecommendApply and Continue

REQUEST_AI_RECOMMENDATION

Abort button (no modal)

ESTOP

Job report modal → Run New DOE

LAUNCH_NEW_DOE

ros2 topic echo /intents should print something like:

intent: 'START_PROCESS'
data: '{"seam_id": "seam_01", "weld_speed": 5.0, "wire_feed": 4.0}'
source: 2
modality: 1

Manual curl tests (without the UI)

Direct to welding_http_bridge (port 8766):

# START_PROCESS
curl -s -X POST http://localhost:8766/intent \
     -H 'Content-Type: application/json' \
     -d '{"intent": "START_PROCESS", "data": {"seam_id": "seam_01"}}' | jq

# ESTOP
curl -s -X POST http://localhost:8766/intent \
     -H 'Content-Type: application/json' \
     -d '{"intent": "ESTOP", "data": {"reason": "test"}}' | jq

# MANUAL_ADJUST
curl -s -X POST http://localhost:8766/intent \
     -H 'Content-Type: application/json' \
     -d '{"intent": "MANUAL_ADJUST", "data": {"parameter_name": "weld_speed", "new_value": 6.0, "unit": "mm/s"}}' | jq

Via alert-processor (full production path, requires Orion-LD):

curl -s -X POST http://localhost:8001/intent \
     -H 'Content-Type: application/json' \
     -d '{"intent": "START_PROCESS", "process_id": "seam_01", "data": {"seam_id": "seam_01"}}' | jq

Troubleshooting

Symptom

Check

/intents receives nothing after button click

docker logs vulcanexus-bridge — is welding_http_bridge running? Is port 8766 reachable from host?

POST /intent → 500 from alert-processor

Orion-LD not ready — check docker logs fiware-orion

Skill action servers not found

ros2 action list inside container — did the build succeed and install/setup.bash sourced?

Dashboard shows “API unreachable”

docker logs robin-alert-processor — check port 8001

Supervisor not routing intents

Wait an extra 5 s; supervisor delays 2 s after launch for action servers to register