Skip to content

JackSkellet/ROCm-Oxide-Sim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rocm-oxide-sim

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.

Current Status

  • CPU-only scene, transform, camera, material, sensor, dataset, and placeholder physics types are available.
  • sim-render-rocm contains an opt-in ROCm-Oxide HIPRTC renderer for RGB, linear depth, segmentation, and single-return LiDAR/raycast outputs from uploaded sim-core::Scene sphere, plane, and world-space axis-aligned box primitives.
  • apps/sim_viewer provides a live winit + pixels viewer for RGB, depth, and segmentation modes using a ROCm render -> host copy -> presentation path.
  • examples/scenes/basic_scene.json can be loaded by the CLIs with --scene.
  • examples/scenes/boxes_scene.json demonstrates box/AABB upload and simple material kinds.
  • examples/datasets/basic_orbit.json demonstrates deterministic dataset config-file generation.
  • examples/datasets/randomized_boxes.json demonstrates deterministic domain randomization for object transforms, materials, emissive objects, and camera parameters.
  • examples/datasets/randomized_boxes_lidar.json demonstrates deterministic domain randomization plus LiDAR dataset export.
  • examples/scenarios/basic_sensor_rig.json and examples/scenarios/randomized_boxes_rig.json demonstrate shared SensorRig + ScenarioConfig startup/dataset definitions.
  • Full physics, ROS2, OpenUSD, and robot model integration are planned but not implemented yet.

Workspace Structure

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 Path Dependency

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.

Quick Commands

CPU-only tests:

cargo test

One-frame sensor lab. Without the rocm feature, this writes deterministic CPU preview outputs so the CLI is still smoke-testable:

cargo run -p sensor_lab

Dataset generator help:

cargo run -p dataset_generator -- --help

ROCm 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 --lidar

The 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_dataset

See 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.json

Finite-frame smoke runs do not open a window:

cargo run -p sim_viewer --features rocm -- --frames 4 --mode rgb

If 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.

Documentation

About

Rust-first AMD GPU simulation and sensor framework built on ROCm-Oxide.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages