Configuration Reference

This page documents the active configuration model for the ROBIN process-intelligence core.

Service Configuration

Main runtime composition is defined in docker-compose.yaml.

Core services:

  • Orion-LD (1026)

  • MongoDB (27017)

  • TimescaleDB (5433)

  • Mintaka (9090)

  • Alert Engine (8001 host, 8000 in container)

  • ROBIN Dashboard (5174)

ROS/DDS Notes

Orion-LD and Vulcanexus containers run in host-network mode for DDS discovery.

Alert Engine reaches Orion through host-gateway mapping:

extra_hosts:
  - "orion-ld:host-gateway"

DDS to NGSI-LD Mapping

config-dds.json defines the direct mapping from ROS/DDS telemetry into Orion-LD.

Current mapping:

{
  "dds": {
    "ngsild": {
      "topics": {
        "rt/robin/telemetry": {
          "entityType": "urn:robin:Process",
          "entityId": "urn:ngsi-ld:Process:ros_bridge",
          "attribute": "urn:robin:processTelemetry"
        }
      }
    }
  }
}

The legacy HTTP NGSI bridge is not required in the current baseline.

Profile Configuration

Each domain is defined by a YAML file in config/profiles/. Select the active profile via the ROBIN_PROFILE environment variable:

ROBIN_PROFILE=spray_coating docker compose up -d

Default: welding.

A profile YAML contains:

  • vocabulary - dashboard labels (process, speed, current, voltage, etc.)

  • fields - telemetry field display names and units

  • ros2.topics - ROS 2 topic names for geometry, process parameters, pose

  • skills - robot capabilities (service/action names, types, descriptions)

  • ai - feature order, model path, default tolerance, default mode

  • dds - DDS bridge topic mapping

See config/profiles/welding.yaml for a complete example.

        graph TD
    subgraph profiles ["config/profiles/"]
        W["welding.yaml"]
        S["spray_coating.yaml"]
    end
    ENV["ROBIN_PROFILE\nenv var"] -->|selects| LOADER["ProfileLoader"]
    W --> LOADER
    S --> LOADER
    LOADER -->|"vocabulary\n+ skills"| ENDPOINT["GET /profile"]
    LOADER -->|"model_path"| AILOAD["Load AI\ncheckpoint"]
    LOADER -->|"feature_order\n+ tolerance"| DEV["Deviation\ndetection"]
    ENDPOINT -->|"runtime fetch"| DASH["Dashboard renders\ndomain labels"]
    

The dashboard fetches the active profile from the Alert Engine at runtime via GET /profile. No rebuild is needed to switch domains.

Per-Profile AI Models

Each profile specifies its model checkpoint in the ai.model_path field:

  • data/models/welding/process_geometry_mlp.pt

  • data/models/spray_coating/process_geometry_mlp.pt

Geometry-driven recommendations use the same forward model and solve the inverse problem through profile-scoped constrained optimization settings:

  • ai.inverse_bounds - min/max bounds for each input feature

  • ai.inverse_optimizer - restart count, step schedule, regularization, and weights

  • ai.forward_confidence - dynamic confidence knobs (MC-dropout samples and OOD penalty weights)

Train new models with scripts/train_profile_model.py.

Environment Variables

Alert Engine:

  • ROBIN_PROFILE: active profile name (default: welding)

  • MINTAKA_URL: Mintaka endpoint (default in compose: http://mintaka:8080)

  • NGSILD_TENANT: tenant header for Orion/Mintaka requests

Dashboard (build-time, used as fallback if /profile is unreachable):

  • VITE_ROBIN_API_URL: Alert Engine base URL

Data Model Configuration

NGSI-LD context includes:

  • Process mapped to urn:robin:Process

  • Measurement mapped to urn:robin:Measurement

  • GeometryTarget mapped to urn:robin:GeometryTarget

  • AIRecommendation mapped to urn:robin:AIRecommendation

Process entity example:

{
  "id": "urn:ngsi-ld:Process:process_id",
  "type": "urn:robin:Process",
  "operationMode": {"type": "Property", "value": "parameter_driven"},
  "toleranceThreshold": {"type": "Property", "value": 10.0, "unitCode": "P1"}
}

Geometry target example:

{
  "id": "urn:ngsi-ld:GeometryTarget:process_id",
  "type": "urn:robin:GeometryTarget",
  "targetHeight": {"type": "Property", "value": 5.0, "unitCode": "MMT"},
  "targetWidth": {"type": "Property", "value": 8.0, "unitCode": "MMT"}
}

For operation modes (parameter-driven vs geometry-driven), see User Guide Overview. For troubleshooting after configuration changes, see Troubleshooting Guide.