rocm-oxide-sim is an early Rust-first simulation and sensor framework that
uses ROCm-Oxide as its AMD GPU backend.
This repository is downstream from ROCm-Oxide. It should consume ROCm-Oxide as a dependency and should not copy ROCm-Oxide internals. The current renderer is a small experimental camera sensor backend, not a full simulator, scene editor, or Isaac Sim replacement.
- CPU-only scene, transform, camera, material, sensor, dataset, and placeholder physics types are available.
sim-render-rocmcontains an opt-in ROCm-Oxide HIPRTC renderer for RGB, linear depth, segmentation, and single-return LiDAR/raycast outputs from uploadedsim-core::Scenesphere, plane, and world-space axis-aligned box primitives.apps/sim_viewerprovides a livewinit + pixelsviewer for RGB, depth, and segmentation modes using a ROCm render -> host copy -> presentation path.examples/scenes/basic_scene.jsoncan be loaded by the CLIs with--scene.examples/scenes/boxes_scene.jsondemonstrates box/AABB upload and simple material kinds.examples/datasets/basic_orbit.jsondemonstrates deterministic dataset config-file generation.examples/datasets/randomized_boxes.jsondemonstrates deterministic domain randomization for object transforms, materials, emissive objects, and camera parameters.examples/datasets/randomized_boxes_lidar.jsondemonstrates deterministic domain randomization plus LiDAR dataset export.examples/scenarios/basic_sensor_rig.jsonandexamples/scenarios/randomized_boxes_rig.jsondemonstrate sharedSensorRig+ScenarioConfigstartup/dataset definitions.- Full physics, ROS2, OpenUSD, and robot model integration are planned but not implemented yet.
crates/sim-core CPU-only scene, transform, camera, material, and IDs
crates/sim-sensors Sensor traits, intrinsics, poses, frames, and metadata
crates/sim-render-rocm Optional ROCm-Oxide camera and LiDAR renderer
crates/sim-datasets Sensor output and metadata/manifest dataset writer
crates/sim-physics Placeholder physics backend trait
apps/sensor_lab One-frame sensor rendering CLI
apps/dataset_generator Simple N-frame dataset generation CLI
apps/sim_viewer Live sensor output viewer
examples/scenes/ Serde JSON scene fixtures
examples/scenarios/ Shared scene + sensor rig + dataset configs
docs/ Architecture, roadmap, and physics notes
ROCm-Oxide is not crates.io-ready yet, so this workspace uses a local path dependency. The expected sibling layout is:
workspace-root/
ROCm-Oxide/
rocm-oxide-sim/
The editable path is in the root Cargo.toml:
[workspace.dependencies]
rocm-oxide = { path = "../ROCm-Oxide" }If your checkout uses another layout, edit that path before building with the
rocm feature.
CPU-only tests:
cargo testOne-frame sensor lab. Without the rocm feature, this writes deterministic CPU
preview outputs so the CLI is still smoke-testable:
cargo run -p sensor_labDataset generator help:
cargo run -p dataset_generator -- --helpROCm RGB/depth/segmentation sensor demo, requiring ROCm, a visible AMD GPU, and
the local ROCm-Oxide sibling dependency. The renderer uploads the sim-core
scene to GPU primitive buffers before rendering:
cargo run -p sensor_lab --features rocm
cargo run -p sensor_lab --features rocm -- --scene examples/scenes/basic_scene.json
cargo run -p sensor_lab --features rocm -- --scene examples/scenes/boxes_scene.json
cargo run -p sensor_lab --features rocm -- --scene examples/scenes/boxes_scene.json --lidar
cargo run -p sensor_lab --features rocm -- --scenario examples/scenarios/basic_sensor_rig.json
cargo run -p sensor_lab --features rocm -- --scenario examples/scenarios/basic_sensor_rig.json --lidarThe ROCm path writes:
target/sensor_lab/rgb.ppm
target/sensor_lab/depth.f32
target/sensor_lab/depth_preview.pgm
target/sensor_lab/segmentation.u32
target/sensor_lab/segmentation_preview.ppm
target/sensor_lab/metadata.json
With --lidar, it also writes:
target/sensor_lab/lidar_range.f32
target/sensor_lab/lidar_points.xyz
target/sensor_lab/lidar_object_ids.u32
target/sensor_lab/lidar_preview.pgm
Generate a small dataset:
cargo run -p dataset_generator --features rocm -- --frames 16 --out target/sim_dataset --overwrite
cargo run -p dataset_generator --features rocm -- --config examples/datasets/basic_orbit.json --out target/sim_dataset --overwrite
cargo run -p dataset_generator --features rocm -- --scene examples/scenes/boxes_scene.json --frames 4 --out target/boxes_dataset --overwrite
cargo run -p dataset_generator --features rocm -- --config examples/datasets/randomized_boxes.json --out target/randomized_boxes --overwrite
cargo run -p dataset_generator --features rocm -- --config examples/datasets/randomized_boxes_lidar.json --out target/lidar_dataset --overwrite
cargo run -p dataset_generator --features rocm -- --scenario examples/scenarios/basic_sensor_rig.json --out target/scenario_dataset --overwrite
cargo run -p dataset_generator --features rocm -- validate --dataset target/sim_dataset
cargo run -p dataset_generator --features rocm -- validate --dataset target/randomized_boxes
cargo run -p dataset_generator --features rocm -- validate --dataset target/lidar_dataset
cargo run -p dataset_generator --features rocm -- validate --dataset target/scenario_datasetSee Dataset generation for config files, camera paths, manifests, metadata, and validation. See Domain randomization for seeded randomized dataset generation.
Run the live viewer:
cargo run -p sim_viewer --features rocm
cargo run -p sim_viewer --features rocm -- --mode depth
cargo run -p sim_viewer --features rocm -- --mode segmentation
cargo run -p sim_viewer --features rocm -- --scene examples/scenes/basic_scene.json
cargo run -p sim_viewer --features rocm -- --scene examples/scenes/boxes_scene.json
cargo run -p sim_viewer --features rocm -- --scenario examples/scenarios/basic_sensor_rig.jsonFinite-frame smoke runs do not open a window:
cargo run -p sim_viewer --features rocm -- --frames 4 --mode rgbIf ROCm-Oxide cannot open a device, compile the HIPRTC kernel, launch it, or copy the output buffer back, the renderer returns a clear error with the failed step.