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:
@@ -18,6 +18,7 @@ def main():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument('--source', type=Path, default=ROOT/'output/l20_15886123')
|
||||
p.add_argument('--output', type=Path, default=ROOT/'output/l20_15886123_stable')
|
||||
p.add_argument('--side', choices=['right','left'], default='right')
|
||||
a = p.parse_args()
|
||||
a.output.mkdir(parents=True, exist_ok=True)
|
||||
with np.load(a.source/'motion.npz') as f:
|
||||
@@ -28,7 +29,7 @@ def main():
|
||||
eye = sparse.eye(n,format='csc')
|
||||
names, active = list(m['joint_names']), list(m['active_joint_names'])
|
||||
ai = [names.index(k) for k in active]
|
||||
original = ET.parse(ROOT/'third_party/l20_assets/L20/RIGHT/linkerhand_g20_right.urdf').getroot()
|
||||
original = ET.parse(ROOT/f'third_party/l20_assets/L20/{a.side.upper()}/linkerhand_g20_{a.side}.urdf').getroot()
|
||||
limits = {j.get('name'):np.array([float(j.find('limit').get(k)) for k in ['lower','upper']]) for j in original.findall('joint') if j.get('type')!='fixed'}
|
||||
low, high = np.array([limits[k] for k in active]).T.copy()
|
||||
mimic = {}
|
||||
@@ -99,9 +100,9 @@ def main():
|
||||
m['before_stabilization_'+k] = v
|
||||
m['stabilization_method'] = 'whole-sequence data fidelity + second/third difference regularization; component distortion budgets'
|
||||
m['stabilization_source'] = str(a.source.resolve())
|
||||
for filename in ['l20_moving.xml','l20_right.xml','l20_dex.urdf','dex_config.json']:
|
||||
for filename in ['l20_moving.xml',f'l20_{a.side}.xml','l20_dex.urdf','dex_config.json']:
|
||||
shutil.copy2(a.source/filename,a.output/filename)
|
||||
model = mujoco.MjModel.from_xml_path(str(a.output/'l20_right.xml'))
|
||||
model = mujoco.MjModel.from_xml_path(str(a.output/f'l20_{a.side}.xml'))
|
||||
data = mujoco.MjData(model)
|
||||
addr = [model.jnt_qposadr[model.joint(k).id] for k in names]
|
||||
sites = [model.site(f'landmark_{i:02d}').id for i in range(21)]
|
||||
|
||||
Reference in New Issue
Block a user