Isaac Sim Configuration
Configuration files controlling Isaac Sim simulation behavior. Halos SIL runs on Isaac Sim 6.1 (nvcr.io/nvidia/isaac-sim:6.1.0) with Replicator Agent (IRA) config 1.7.0. Isaac Sim 6.1 refuses a 1.6.0 config, so a scene written for 6.0 shuts down at startup until its version is raised.
IRA 1.x (Isaac Sim 6.0 and later) is not config-compatible with IRA 0.x (Isaac Sim 5.1 and earlier). A 0.x config will not load. The three changes that matter most here: global.simulation_length (frames) became top-level simulation_duration (seconds); flat character/sensor blocks became named groups; and character behavior moved from text command files to JSON behavior trees. See the official IRA migration guide.
Configuration Files
Located in /isaac-sim/sil/configs/:
scenarios.yaml— one entry per scenario id, naming the four files below that make up a rundefault_config_ros.yaml— IRA scene, characters, cameras, writercameras.yaml— camera prims, RTSP ports, and VST registrationrobots.yaml— the fleet file: which trucks exist, where they spawn, how each drives, and the forklift control / odometry / safety-indicator and/clockAction Graphs*-40x20.yaml— the same trio for the experimental two-dock, two-truckwarehouse_40x20scenepostprocessing.yaml— RTX sensor-anomaly presets (active: baseline= no degradation)inspect_loop.bt.json,gather_bend_loop.bt.json,pickup_loop.bt.json— per-group character behavior trees
default_command.txt and default_robot_command.txt are the IRA 0.x omni.anim.people command files. Nothing in the 6.x pipeline reads them — they are kept only for reference against older recordings.
scenarios.yaml
One id describes a run, and Isaac Sim and every forklift controller read the same one, so they cannot be launched against different halves of it. Set it in the profile env file:
A flag still wins over the scenario (-c, --robots-config, --cameras-config) for a one-off
run. A different fleet in the same scene is a different run, so it gets an id of its own;
WAYPOINTS_MAP is the one override, for a new route set in an existing scene.
default_config_ros.yaml
Main simulation configuration:
Key Parameters
The writer no longer produces the camera streams. On IRA 0.x this file set writer: RTSPWriter and RTSP came out of the replicator writer. On 6.x the streams come from the RTSP multi-camera Action Graph built from cameras.yaml, so every IRABasicWriter annotator is switched off and nothing is written to disk.
Every camera is driven from a single OnPlaybackTick, routed through an IsaacSimulationGate rate divider before the render products. Its step input sets how many render-loop ticks are skipped between frames; at the shipped step: 1 every tick produces a frame, and the effective rate is whatever the render loop sustains. Raise step if the encoder starts duplicating frames on the wire and the DeepStream/VST pipeline backlogs.
cameras.yaml
Camera registration configuration for VST:
Camera registration:
scene: The scene USDs these camera positions are measured in, checked against the scene loading (path-suffix match) before the stage opensname: Camera identifier in VSTcamera_prim: USD prim path of the camera in the stageport: TCP port of the in-process RTSP server — unique per cameramount_path: URL suffix (must start with/)spawn: Optional. When present,camera_loader.pycreates the Camera prim atcamera_primfrom these values at scene init, and the baked camera must be removed from the scene USD. Omit it to use a baked camera prim.- Full URL:
rtsp://${HOST_IP}:${port}${mount_path}
When Isaac Sim starts with --enable-vst, cameras automatically register with VST using these definitions.
Two fields from the Isaac Sim 5.1 schema must not appear: per-camera rtsp_path (the RTSPWriter_World_Cameras_*_rgb string) and the top-level rtsp.port of the old external broker. vst_sensor_manager.py rejects a config that still carries them, and a scalar rtsp or cameras is a validation error.
robots.yaml
The fleet file. It drives the forklift Action Graph builders and the forklift controllers. One block per robot — adding a robot means adding a block here plus a controller service naming its ROBOT_ID, with no code change. What follows from the asset is stated once per model under models:; each robot names its model and keeps only its own choices. See Isaac Sim Action Graphs for what each builder produces and Forklift Controller for the drive: and proximity: keys.
The reverse_logic flags exist because the forklift asset’s vehicle frame is opposite the ROS twist convention on both axes. Set them to false for a robot whose asset already matches ROS.
spawn— the scenes carry no forklift prim;forklift_overlay.pyauthors each truck from itsspawn:block into a generated layer before IRA opens the stage. Declaringspawn:for a prim the scene already has is an error. The position must match theoriginof the truck’s waypoint files;deployments/scripts/preflight.pycompares the two.safety_indicator— the disc shows/safety/is_mutedunderPSF_APP=atl, the proximity level (/<robot>/proximity/state: green / orange / red, grey before the first decision) underpxc, and STOP / REDUCE while proximity acts, otherwise the mute, underboth.source:pins one. With two ATL zones,zone: 2makes the disc follow the second bay.proximity_line— off by default because it is scene geometry: the cameras, and therefore perception, see it too.
Forklift Motion
Forklift motion is driven by the forklift-controller service, not by a node inside the Action Graph. The controller reads a waypoint file and publishes cmd_vel (geometry_msgs/Twist); the Forklift Control Action Graph only converts that cmd_vel into wheel commands.
Author routes with the Forklift Waypoint Generator below. For the controller’s ROS interface, route-following behavior, and the drive: keys, see Forklift Controller.
sil/playback/segments.json (a list of duration / linear_x / angular_z steps) is left over from the pre-6.0 pipeline, where a playback script node inside the Action Graph read it directly. Nothing in the current codebase loads it.
Common Adjustments
Change Simulation Length
simulation_duration is in seconds:
Test Without Humans
Set num: 0 on every character group, or delete the groups:
Change Character Behavior
Point a group at a different behavior tree. Trees are authored with omni.behavior.tree.ui and reference the omni.behavior.tree.core and omni.anim.behavior.tree node libraries — see the IRA configuration guide.
Forklift Waypoint Generator
For curved, multi-segment forklift routes, author waypoints visually with the Forklift Waypoint Generator web tool (tools/waypoint-generator/). The tool overlays the warehouse floor plan (Top.png) and exports a JSON path that the SIL forklift controller consumes directly.

Launch
Requires Node.js 20.19+ or 22.12+ (Vite 7 requirement).
Authoring a Path
- Set Origin — click Set Origin and click the forklift start on the map (or Use Default Forklift Start). This is the odom-frame reference.
- Add Waypoints — switch to Add Waypoint and click along the route. Use
Shift+Scrollto set the heading before each click. - Edit — click a waypoint to select, drag to move, or edit coordinates directly in the sidebar. To change the order, drag an item of the sidebar list onto another (it takes that item’s place) or use its Move up / Move down buttons; dragging a point on the map moves it and keeps the order.
- Save / Export — 💾 Save stores the path (Redux store + localStorage auto-save); Export downloads or copies the JSON.
Navigation: Alt+Drag or middle-mouse to pan, scroll to zoom, Shift+Scroll to adjust heading.
Coordinate Systems
- Pixel — image coordinates (
Top.pngis 1920×1080) - World — Isaac Sim global coordinates (metres)
- Odom — relative to the origin point
Export Format
The exported JSON is the input format of the SIL forklift controller:
origin— robot start in world coordinateswaypoints— user-defined points with odom (x,y) and world coordinatesposes— interpolated points for the smooth curved path (consumed by the controller)segments— per-pair segment info, including thereverseflag
Using the Path in SIL
Each controller reads closed-loop-testing/forklift-controller/waypoints/<map id>/<ROBOT_ID>.json. Save the export as waypoints/warehouse_20x20/forklift_b.json to replace the default route, or under a directory of your own selected with WAYPOINTS_MAP (see Forklift Controller). The origin must be the truck’s spawn.position.
Calibration for New Scenes
The bundled public/Top.png and calibration match the closed-loop-testing loading-dock scene:
- Scale factor: 49.51 pixels/metre
- Default forklift start:
(1.0, -13.39)in world coordinates
To target a different scene, replace public/Top.png and update src/config/calibration.json with that scene’s calibration, then set defaultForkliftStart from the truck’s spawn.position in robots.yaml.
Execution Script
Isaac Sim scenarios are executed using run_sdg.sh, a thin wrapper that locates Isaac Sim’s python.sh and runs run_actor_sdg.py. You can call either one.
Command Line Parameters
The build steps are all on by default and can be switched off individually for debugging: --no-rtsp (RTSP graph), --no-forklift (control, odometry, safety indicator), --no-forklift-spawn (forklift prims from spawn:), --no-indicator-spawn (safety disc geometry), --no-clock (/clock publisher), --no-camera-spawn (dynamic camera prim spawn), --no-postprocessing, --no-runtime-patches.
Example execution:
VST Integration:
--enable-vstregisters cameras with VST automatically- Reads camera definitions from
cameras.yaml - Constructs RTSP URLs:
rtsp://${HOST_IP}:${port}${mount_path} - Requires the
HOST_IPandVST_BASE_URLenvironment variables - Registration waits for the render to warm, which avoids the cold-bind
has no capsfailure on Isaac Sim 6.0 (see Isaac Sim Streaming)
Example with UI:
Allow X11 connections:
Stop all SIL docker compose containers, then run cleanup and setup:
Start SIL docker compose:
Then start Isaac Sim with UI:

Run headless for anything repeated. On a GeForce card the windowed UI leaks NVENC encode sessions across timeline stop/play and dies after roughly three replays (see Isaac Sim Streaming).
For the full IRA schema — character and robot groups, behavior trees, camera placement strategies, and writer options — see the IRA Configuration File Guide and the Actor Simulation tutorial.
Next Steps
- Isaac Sim Action Graphs - Action Graph details
- Forklift Controller - The service that drives the forklift along a route
- SIL Architecture - System architecture
- SIL — 2D Perception - Deployment guide