Quickstart Guide
Get your first robot arm running with EmbodyX. This guide covers installation on a Linux edge compute node, connecting the OEM arm adapter, and submitting your first natural-language task. Most engineers finish in under four hours.
System requirements
EmbodyX runs on an edge compute node located at your facility. The following hardware and software are required before you begin.
Hardware
| Component | Minimum | Recommended |
|---|---|---|
| CPU | x86-64, 8 cores | x86-64, 16+ cores |
| GPU | NVIDIA RTX 3080 (10 GB VRAM) | NVIDIA RTX 4090 or A10G |
| RAM | 32 GB | 64 GB |
| Storage | 50 GB SSD | 200 GB NVMe SSD |
| Network to arm | 1 GbE Ethernet | 1 GbE Ethernet (isolated VLAN) |
| Camera | RGB-D, 30 fps (e.g. Intel RealSense D435) | RGB-D, 60 fps (e.g. Intel RealSense D455) |
Software
- Ubuntu 22.04 LTS (kernel 5.15+)
- NVIDIA Driver 525+ with CUDA 12.0+
- Docker 24.0+ with NVIDIA Container Toolkit
- Python 3.11+ (for SDK usage)
Install runtime
The EmbodyX runtime ships as a Docker image. Your account credentials from the dashboard are required to pull it.
1. Log in to the EmbodyX container registry
docker login registry.embx.io
# Enter your account email and API key when prompted
2. Pull the runtime image
docker pull registry.embx.io/runtime:latest
3. Create the runtime configuration directory
mkdir -p /opt/embx/config
mkdir -p /opt/embx/logs
4. Copy the starter configuration
docker run --rm registry.embx.io/runtime:latest \
embx-init --output /opt/embx/config/embx.yaml
Open /opt/embx/config/embx.yaml in your editor. At minimum, set api_key and arm.adapter before proceeding.
FANUC adapter
The FANUC adapter connects to the R-30iB or R-30iB Plus controller over Ethernet using the FANUC Robot Interface (FRI) library. The controller must be on the same VLAN as the edge node.
Controller configuration
- On the teach pendant, navigate to MENU > SYSTEM > Host Comm > TCP/IP.
- Set a static IP for the controller (for example,
192.168.10.10). - Enable the FANUC FRI server: MENU > SYSTEM > Config > Remote Options > FRI Enable: TRUE.
- Set the edge node's IP address in the allowed host list.
embx.yaml settings for FANUC
arm:
adapter: fanuc_r30ib
fanuc:
controller_ip: "192.168.10.10"
port: 18735
program_slot: 1
# Speed override during evaluation runs (0.1 = 10%, recommended first run)
speed_override: 0.3
Verify connection
docker run --rm --network host \
-v /opt/embx/config:/config \
registry.embx.io/runtime:latest \
embx-check-arm --config /config/embx.yaml
# Expected: ARM OK | FANUC R-30iB | Serial: XXXXXXX | FRI: connected
KUKA adapter
The KUKA adapter uses KUKA Robot Sensor Interface (RSI) for real-time communication with KR C4 or KR C5 controllers.
Controller configuration
- Install the RSI software option on the KR C4/C5 controller.
- Assign a static IP (for example,
192.168.10.20) via WorkVisual > Network Settings. - Upload the EmbodyX RSI XML descriptor using WorkVisual. The descriptor file is included in the runtime Docker image at
/adapters/kuka/embx_rsi.xml.
embx.yaml settings for KUKA
arm:
adapter: kuka_krc4
kuka:
controller_ip: "192.168.10.20"
rsi_port: 49152
cycle_time_ms: 4
speed_override: 0.3
Universal Robots adapter
The UR adapter uses the URScript real-time interface (RTDE) available on UR3e, UR5e, UR10e, UR16e, and newer e-Series arms.
Arm configuration
- On the teach pendant, go to Settings > System > Remote Control and enable remote operation.
- Set a static IP via Settings > System > Network.
- No additional software installation is required on the UR controller.
embx.yaml settings for UR
arm:
adapter: ur_rtde
ur:
robot_ip: "192.168.10.30"
rtde_port: 30004
speed_override: 0.3
# ur_model: ur5e, ur10e, ur16e (auto-detected if omitted)
ur_model: "ur5e"
ABB OmniCore adapter
The ABB adapter uses RobotWare OmniCore's RWS (Robot Web Services) REST interface. Requires OmniCore C30 or C90 controller with RobotWare 7.0+.
embx.yaml settings for ABB
arm:
adapter: abb_omnicore
abb:
controller_ip: "192.168.10.40"
rws_port: 80
username: "Default User"
speed_override: 0.3
Configuration reference
The following settings in /opt/embx/config/embx.yaml apply to all arm adapters.
| Key | Type | Description |
|---|---|---|
api_key |
string | Your EmbodyX account API key. Copy from the dashboard. |
arm.adapter |
enum | fanuc_r30ib | kuka_krc4 | ur_rtde | abb_omnicore |
inference.model |
string | VLA model variant. Default: embx-industrial-v2. Leave as default unless instructed. |
camera.device |
string | Camera device path (e.g. /dev/video0) or RealSense serial number. |
safety.speed_override |
float 0.1-1.0 | Global speed multiplier for all arm motion. Keep at 0.3 for initial evaluation runs. |
logging.level |
enum | error | info | debug. Default: info. |
First task
With the arm connected and configuration validated, start the runtime and submit your first task.
Start the runtime
docker run -d --name embx-runtime \
--runtime=nvidia \
--network host \
--device /dev/video0:/dev/video0 \
-v /opt/embx/config:/config \
-v /opt/embx/logs:/logs \
registry.embx.io/runtime:latest
Verify the runtime is ready
docker logs embx-runtime | tail -20
# Wait for: [READY] EmbodyX runtime v2.x.x - arm connected, model loaded
Submit a task via Python SDK
from embx import EmbodyXClient
client = EmbodyXClient(
api_key="your_api_key",
runtime_host="localhost"
)
# Submit a simple pick-and-place task
task = client.tasks.submit(
instruction="Pick the cylinder from the left bin and place it in the red tray."
)
# Stream status updates
for event in task.stream():
print(event.status, event.message)
Expected output
SCENE_CAPTURE Building scene embedding...
TASK_CONDITION Encoding instruction...
ACTION_GENERATE Generating trajectory at 25 Hz...
ARM_EXECUTING Arm in motion...
SUCCESS Task completed. Grasp confidence: 0.97
Edge deployment
For production deployments without an internet connection, EmbodyX supports fully air-gapped operation. The inference model and all dependencies are bundled in the Docker image. The only outbound connection the default configuration makes is to the cloud management plane for model updates and usage analytics. Both can be disabled:
cloud:
model_updates: false # Disable automatic model updates
analytics: false # Disable usage reporting
management_plane: false # Full air-gap mode (Enterprise only)
In air-gap mode, model updates are delivered as container image updates via your internal container registry. Contact the integration team to set up the update channel for your facility's network policy.