Skip to content
 
 

Repository files navigation

OpenArm Online Runner

Install

These instructions assume Ubuntu.

1. Install system dependencies

sudo apt-get update
sudo apt-get install -y -V \
  build-essential \
  ffmpeg \
  git \
  python3-dev \
  software-properties-common

sudo add-apt-repository -y ppa:openarm/main
sudo apt-get update
sudo apt-get install -y -V libopenarm-can-dev

2. Install uv

curl -LsSf https://astral.sh/uv/install.sh | sh

3. Clone the code

git clone https://github.com/enactic/openarm-online-runner.git

4. Install Python dependencies

cd openarm-online-runner
uv sync

5. Configure

The runner reads settings from a .env file in the working directory. Copy .env.example and edit it:

cp .env.example .env
editor .env

To read a different file, set the ENV_FILE environment variable to its path.

6. Build the dataflow

uv run dora build dataflow.yaml --uv

Run

uv run openarm-online-runner

Teleoperation

Besides evaluation jobs, the runner polls the OpenArm Online API for WebRTC offers queued by Web browsers. Each offer says what kind of client made it: keyboard or webxr. The runner serves the offer with the dataflow configured for its kind: DEFAULT_KEYBOARD_TELEOPERATION_DATAFLOW_FILE or DEFAULT_WEBXR_TELEOPERATION_DATAFLOW_FILE, overridable per task with KEYBOARD_TELEOPERATION_DATAFLOW_FILE_${TASK_ID} / WEBXR_TELEOPERATION_DATAFLOW_FILE_${TASK_ID}. Both are unset by default: an offer whose kind has no dataflow configured for the task is left pending. The sample dataflows under dataflows/teleoperation/ are good starting points.

The dataflow must contain a teleoperation node — dora-openarm-keyboard for keyboard, dora-openarm-webxr for webxr — running in WebRTC-only mode: the runner hands the browser's offer SDP to the dataflow via the OFFER environment variable and listens on ANSWER_HOST/ANSWER_PORT for the answer SDP the node writes back. The answer is posted to the API server, the browser applies it to establish the WebRTC connection, and teleoperation starts. The session ends when the dataflow exits (e.g. via a quitter node honoring the TIMEOUT environment variable) or after TELEOPERATE_TIMEOUT seconds.

Build the teleoperation dataflows like the evaluation one:

uv run dora build dataflows/teleoperation/keyboard/mujoco/dataflow.yaml --uv
uv run dora build dataflows/teleoperation/webxr/mujoco/dataflow.yaml --uv

Run as a systemd service

systemd/openarm-online-runner-generate-service.sh \
  | sudo tee /etc/systemd/system/openarm-online-runner.service
sudo systemctl daemon-reload
sudo systemctl enable --now openarm-online-runner

Check logs:

journalctl -u openarm-online-runner

License

Licensed under the Apache License 2.0. See LICENSE for details.

Copyright 2026 Enactic, Inc.

Code of Conduct

All participation in the OpenArm project is governed by our Code of Conduct.

About

OpenArm Online runner

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages