Simulator Backends
DoVLA-CIL uses a small simulator interface so the same CIL pipeline can run on a toy symbolic backend today and real physics backends later.
Interface
Every backend implements:
seed(seed)
reset_task(task, scene=None)
serialize_state()
restore_state(state_blob)
render_observation()
get_symbolic_state()
execute_action_chunk(action)
close()
The critical requirement is exact reset. serialize_state() and restore_state() must restore the
same simulator state for every candidate action in a group.
Registry
from dovla_cil.sim.registry import list_backends, create_backend
print(list_backends()) # toy, maniskill, genesis
sim = create_backend("toy")
The registry lists optional backends without importing their heavy packages. Missing optional dependencies raise helpful errors only when instantiated.
Shared config:
sim:
backend: toy
seed: 0
params: {}
Toy Backend
toy is a deterministic symbolic 2D tabletop backend. It supports:
- object positions
- robot end-effector and gripper state
move_to,grasp,release,push,place_at,open,close- exact pickle state serialization
- symbolic relations such as
inside,near,next_to,left_of,right_of,behind,in_front_of,lifted,opened,closed, andgrasped - simplified mass/friction effects for low-friction, heavy-object, and sticky-drawer stress tests
- out-of-workspace instability markers for irreversible-failure smoke cases
The toy backend is for smoke tests and local development only. It is not a physics benchmark and does not justify real robot claims.
ManiSkill3 Backend and Lattice Engine
maniskill lives in dovla_cil/sim/maniskill_backend.py. Importing the module does not require
ManiSkill3. Instantiating the backend checks for the package and raises an install hint if missing.
Config fields:
env_idobs_modecontrol_moderender_modenum_envssim_backend
Implementation checklist:
- Install ManiSkill3 in the runtime environment.
- Map each
TaskSpec.familyand predicate set to a ManiSkill environment and reset options. - Translate
SceneSpecobject poses, seeds, camera pose, and task metadata into environment reset. - Implement exact simulator and RNG serialization.
- Translate
ActionChunkvalues into the configured control mode. - Render observations and store large images by reference when needed.
- Build
get_symbolic_state()from object poses, articulation states, robot state, and contacts. - Return
RolloutResultwith before/after symbolic states, contacts, trajectory metadata, and simulator diagnostics.
The generic SimulatorBackend wrapper remains a placeholder for arbitrary TaskSpec mapping.
The research path in dovla_cil/generation/maniskill_lattice.py is concrete: it restores official
ManiSkill HDF5 environment states, executes same-state action lattices with GPU PhysX, verifies
restore error, stores measured before/after states, and supports six explicit task profiles. RGB is
rendered later from those persisted states by maniskill_render.py, avoiding CUDA/Vulkan device
ordinal coupling on shared or MIG GPUs.
Genesis Skeleton
genesis follows the same optional-dependency pattern in dovla_cil/sim/genesis_backend.py.
Config fields:
scene_backendrender_modenum_envsdtsubstepsparams
Implementation checklist:
- Install Genesis in the runtime environment.
- Map task objects to bodies, articulations, materials, and robot assets.
- Apply
SceneSpecobject poses, camera pose, lighting seed, physics seed, and metadata. - Replace placeholder pickle state with exact Genesis world, robot, and RNG serialization.
- Translate
ActionChunkvalues into robot controls or scripted skills. - Render observations and expose symbolic state for reward/effect extraction.
- Return contacts, trajectory, before/after state, and simulator diagnostics.
The Genesis wrapper exists so large-scale code paths can discover the backend name and fail cleanly until a real adapter is implemented.