twanghcmut's picture
download
raw
1.87 kB
import argparse
import json
from pathlib import Path
import numpy as np
from real2sim import video
from real2sim.sim.physics import PhysicsScene
def main():
parser = argparse.ArgumentParser()
parser.add_argument("folder", type=Path)
parser.add_argument("--asset", type=Path, required=True)
parser.add_argument("--result", type=Path, required=True)
parser.add_argument("--output", type=Path)
args = parser.parse_args()
parameters_file = args.result / "parameters.npz"
if not parameters_file.is_file():
parameters_file = args.result / "best_parameters.npz"
with np.load(parameters_file) as saved:
parameters = saved["parameters"]
scene = PhysicsScene(args.folder, args.asset)
try:
with np.load(args.result / "rollout.npz") as saved:
reference = saved["object_qpos"]
target_masks = saved["masks"]
result = scene.rollout(parameters, np.arange(len(scene.timestamps)), rgb=True)
error = float(np.max(np.abs(result["object_qpos"] - reference)))
mask_errors = int(np.count_nonzero(result["masks"] != target_masks))
if error > 1e-9 or mask_errors:
raise RuntimeError(
f"Replay differs: qpos={error}, mask pixels={mask_errors}"
)
output = args.output or args.result / "verified_replay.mp4"
video.write(
output, result["rgb"], 1 / float(np.median(np.diff(scene.timestamps)))
)
metrics = {
"frames": len(scene.timestamps),
"qpos_max_error": error,
"mask_pixel_errors": mask_errors,
}
(args.result / "replay_verification.json").write_text(
json.dumps(metrics, indent=2) + "\n"
)
print(json.dumps(metrics), flush=True)
finally:
scene.close()
if __name__ == "__main__":
main()

Xet Storage Details

Size:
1.87 kB
·
Xet hash:
51a02b234b6a4124ecd9d8c643bab7a6c2cef764692a9d34fb0ce368987cdaf4

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.