packages/robot/docs/bridge/isaaclab_setup.md
This runbook covers end-to-end setup: from prerequisites through asset pipeline to running a ROSBridge-compatible websocket endpoint for agent control.
| Requirement | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 22.04 | Ubuntu 22.04 |
| GPU VRAM | 8 GB | 16 GB |
| NVIDIA Driver | 535+ | Latest |
| CUDA | 12.1+ | 12.4+ |
| Python | 3.10 | 3.10 |
| Isaac Sim | 4.2.0 | 4.5.0 |
| IsaacLab | 2.0.0 | 2.1.0 |
Version pins are tracked in bridge/config/isaaclab_versions.json.
Check prerequisites:
nvidia-smi # GPU driver and VRAM
nvcc --version # CUDA toolkit
python3 --version # Python version
./bridge/scripts/setup_isaac_env.sh
This creates a virtual environment and installs bridge dependencies. Follow the on-screen instructions for Isaac Sim and IsaacLab installation.
./bridge/scripts/prepare_ainex_urdf.sh
Generates:
bridge/generated/ainex.urdf — standalone URDF with patched mesh pathsbridge/generated/meshes/ — copied STL mesh filesSource: ros_ws_src/ainex_simulations/ainex_description/urdf/ainex.xacro
PYTHONPATH=. python -m bridge.isaaclab.validate_model
Checks:
In the Isaac-enabled Python environment:
PYTHONPATH=. python -m bridge.isaaclab.convert_urdf_to_usd
Or validate only:
PYTHONPATH=. python -m bridge.isaaclab.convert_urdf_to_usd --validate-only
Output: bridge/generated/ainex.usd
Dry-run (no Isaac Sim required):
PYTHONPATH=. python -m bridge.isaaclab.run_sim --dry-run
Full simulation (requires Isaac Sim):
PYTHONPATH=. python -m bridge.isaaclab.run_sim
PYTHONPATH=. python -m bridge.isaaclab.run_sim --headless
# Isaac backend (default)
PYTHONPATH=. python -m bridge.launch --target isaac
# Real robot
PYTHONPATH=. python -m bridge.launch --target real
# Gazebo simulation
PYTHONPATH=. python -m bridge.launch --target sim
# Development mock
PYTHONPATH=. python -m bridge.launch --target mock
# List all targets
PYTHONPATH=. python -m bridge.launch --list-targets
./bridge/scripts/start_rosbridge_isaac.sh # Isaac backend
./bridge/scripts/start_rosbridge_real.sh # Real robot
./bridge/scripts/start_rosbridge_sim.sh # Gazebo sim
./bridge/scripts/start_rosbridge_mock.sh # Mock backend
All expose ROSBridge-compatible websocket on ws://<host>:9090.
| Variable | Description |
|---|---|
AINEX_BRIDGE_HOST | Listen host (default: 0.0.0.0) |
AINEX_ROSBRIDGE_PORT | ROSBridge port (default: 9090) |
AINEX_ENVELOPE_PORT | Command-envelope port (default: 9100) |
AINEX_PUBLISH_HZ | Telemetry publish rate |
AINEX_MAX_CMD_SEC | Rate limit (commands/sec) |
AINEX_DEADMAN_SEC | Deadman timeout (seconds) |
# All unit and integration tests
PYTHONPATH=. python -m unittest discover -s bridge/tests -p "test_*.py"
# Specific test suites
PYTHONPATH=. python -m unittest bridge.tests.test_rosbridge_contract
PYTHONPATH=. python -m unittest bridge.tests.test_backend_parity
PYTHONPATH=. python -m unittest bridge.tests.test_isaac_backend
PYTHONPATH=. python -m unittest bridge.tests.test_joint_map
PYTHONPATH=. python -m unittest bridge.tests.test_ainex_cfg
PYTHONPATH=. python -m unittest bridge.tests.test_actions
PYTHONPATH=. python -m unittest bridge.tests.test_sim_state
Smoke test against a running endpoint:
PYTHONPATH=. python -m bridge.tools.rosbridge_smoke --uri ws://127.0.0.1:9090
Parity check between two endpoints:
PYTHONPATH=. python -m bridge.tools.rosbridge_parity \
--left-uri ws://127.0.0.1:9090 \
--right-uri ws://127.0.0.1:9091
To verify "drop-in endpoint swap" between targets:
real and isaac endpointssubscribe to /ros_robot_controller/battery returns data on bothcall_service to /walking/command with start/stop succeeds on bothpublish to /app/set_walking_param accepted on bothpublish to /head_pan_controller/command accepted on bothcall_service to /ros_robot_controller/bus_servo/get_position returns positions on bothpublish to /ros_robot_controller/bus_servo/set_position accepted on bothget_time returns valid secs/nsecs on bothadvertise acknowledged on both┌─────────────────┐ ws://host:9090 ┌──────────────────┐
│ ML Agent / │ ──────────────────────▶ │ ROSBridge │
│ Web Client │ ◀────────────────────── │ Websocket Server │
└─────────────────┘ (bidirectional) └────────┬─────────┘
│
┌────────┴─────────┐
│ Target Router │
└──┬────┬────┬─────┘
│ │ │
┌────────────────┘ │ └───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Real │ │ Gazebo │ │ IsaacLab │
│ Robot │ │ Sim │ │ Sim │
│ (ROS1) │ │ (ROS1) │ │ (USD) │
└──────────┘ └──────────┘ └──────────┘