Update to 2026-09-17 pipeline snapshot; add weights, L20 assets and recording via Git LFS
Source: RGB-D -> Dyn-HaMR -> L20 retargeting -> FoundationPose -> reference repair -> SPIDER, documented in docs/PIPELINE_LATEST.md and docs/SETUP_AND_WEIGHTS.md. Adds FoundationPose and nvdiffrast upstream snapshots, requirements/pipeline_venv.txt and the FoundationPose weight manifest/downloader. Assets (Git LFS): weights/ (WiLoR detector, HandFlow denoiser, UniDepth-L), FoundationPose checkpoints, HaMeR checkpoint, Dyn-HaMR HMP model and BMC constraints, L20 URDF/meshes, the 20260915_171525 D405 recording and the two box CADs. MANO models are not redistributed (third_party/hamer/_DATA/data/mano/README.txt). Environments, caches and run outputs excluded. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,11 +23,13 @@ def main():
|
||||
p.add_argument('--input', type=Path, required=True)
|
||||
p.add_argument('--output-dir', type=Path, required=True)
|
||||
p.add_argument('--sigma', type=float, default=2.5)
|
||||
p.add_argument('--side', choices=['right','left'], default='right')
|
||||
a = p.parse_args()
|
||||
torch.set_num_threads(4)
|
||||
out = a.output_dir.resolve()
|
||||
fixed, urdf = build_assets(out)
|
||||
original = ET.parse(ASSET / 'linkerhand_g20_right.urdf').getroot()
|
||||
fixed, urdf = build_assets(out, a.side)
|
||||
asset = ASSET.parent/a.side.upper()
|
||||
original = ET.parse(asset / f'linkerhand_g20_{a.side}.urdf').getroot()
|
||||
joints = [j for j in original.findall('joint') if j.get('type') != 'fixed']
|
||||
active = [j.get('name') for j in joints if j.find('mimic') is None]
|
||||
limits = {j.get('name'):np.array([float(j.find('limit').get(k)) for k in ['lower','upper']]) for j in joints}
|
||||
@@ -109,7 +111,9 @@ def main():
|
||||
quat = gaussian_filter1d(quat, a.sigma, axis=0)
|
||||
quat /= np.linalg.norm(quat, axis=1, keepdims=True)
|
||||
quat = quat[:, [3, 0, 1, 2]]
|
||||
times = np.arange(count) / fps
|
||||
times = np.asarray(human['time'], dtype=np.float64) if 'time' in human else np.arange(count) / fps
|
||||
assert times.shape == (count,) and np.isfinite(times).all() and np.all(np.diff(times) > 0)
|
||||
times = times - times[0]
|
||||
np.savez_compressed(out / 'motion.npz', qpos=qpos, qpos_raw=qraw, joint_names=robot.dof_joint_names,
|
||||
active_qpos=active_q, active_joint_names=active, targets=targets, actual=actual,
|
||||
wrist_pos=wrist, wrist_pos_unsmoothed=wrist_raw, wrist_quat_wxyz=quat,
|
||||
|
||||
Reference in New Issue
Block a user