Initial commit

This commit is contained in:
2026-11-02 17:10:39 +08:00
commit 102fdbaf47
79 changed files with 56509 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
"""Isolate invalid simulation rows before terrain lookup or replay insertion."""
import torch
def invalid_rows(env, obs):
d = env.scene["robot"].data
tensors = (d.root_link_pos_w, d.projected_gravity_b, d.root_link_lin_vel_b,
d.root_link_ang_vel_b, d.joint_pos, d.joint_vel, obs["actor"])
return ~torch.stack([torch.isfinite(t).flatten(1).all(-1) for t in tensors]).all(0)
def recover_invalid_envs(env, obs, reward):
bad = invalid_rows(env, obs) | ~torch.isfinite(reward)
ids = bad.nonzero(as_tuple=False).flatten()
if ids.numel():
print(f"RECOVERY reset {ids.numel()} invalid environments; first IDs={ids[:16].tolist()}", flush=True)
obs, _ = env.reset(env_ids=ids)
# A failed reset must be handled by the supervisor, never added to replay.
if invalid_rows(env, obs).any():
raise RuntimeError("Environment reset failed to restore finite state")
return obs, bad