Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
194 commits
Select commit Hold shift + click to select a range
4315086
docs: define NumPy manager API contract (#1043) (#1044)
TATP-233 Aug 17, 2026
1145e17
feat(managers): port manager core to numpy (#1046)
TATP-233 Aug 17, 2026
b7673d7
feat(base): add numpy entity facade (#1048)
TATP-233 Aug 17, 2026
211c48d
feat(env): add manager-based lifecycle (#1051)
TATP-233 Aug 17, 2026
f8ebee0
feat(backend): expose actuation metadata (#1053)
TATP-233 Aug 17, 2026
6ab34ea
feat(env): add NumPy joint position action (#1055)
TATP-233 Aug 17, 2026
8ff4487
feat(env): add NumPy velocity command (#1057)
TATP-233 Aug 17, 2026
e843604
feat(env): add NumPy observation terms (#1060)
TATP-233 Aug 17, 2026
b77960f
feat(env): add NumPy termination terms (#1062)
TATP-233 Aug 17, 2026
63dad7d
feat(env): add NumPy reward terms (#1065)
TATP-233 Aug 17, 2026
f28d637
feat(env): add reset event state transaction (#1067)
TATP-233 Aug 17, 2026
c5e1a2f
feat(config): add manager term overlays (#1069)
TATP-233 Aug 17, 2026
31f25c1
feat(config): route manager reward overrides (#1071)
TATP-233 Aug 17, 2026
9630680
feat: add manager root-state reset contract (#1072) (#1073)
TATP-233 Aug 17, 2026
8c5b0c7
feat(events): add uniform root-state reset (#1075)
TATP-233 Aug 17, 2026
b48b388
feat(backend): add named sensor view contract (#1077)
TATP-233 Aug 18, 2026
edb5714
feat(env): add named sensor observation terms (#1079)
TATP-233 Aug 18, 2026
e0f4a55
fix(env): materialize manager backend before reset (#1081)
TATP-233 Aug 18, 2026
247bc30
feat(env): add manager gait phase foot terms (#1083)
TATP-233 Aug 18, 2026
58d9d22
feat(env): add Go2 manager reward parity terms (#1085)
TATP-233 Aug 18, 2026
5cdb458
feat(env): support named keyframe manager defaults (#1088)
TATP-233 Aug 18, 2026
5ec83af
feat: add Go2 manager config fixture (#1089)
TATP-233 Aug 18, 2026
66cc550
feat(config): support registry config factories (#1091)
TATP-233 Aug 18, 2026
f3d08fa
feat(env): add manager pd gain reset event (#1093)
TATP-233 Aug 18, 2026
80aae37
feat(config): enable Go2 manager pd gain event (#1095)
TATP-233 Aug 18, 2026
a1282f5
feat(registry): support callable env factories [skip ci] (#1097)
TATP-233 Aug 18, 2026
9ba6d81
feat(config): materialize Hydra-owned manager configs [skip ci] (#1099)
TATP-233 Aug 18, 2026
d81e8bd
feat(env): add Manager-Based randomization events [skip ci] (#1101)
TATP-233 Aug 18, 2026
66e59a9
feat(env): add generic Manager-Based factory [skip ci] (#1103)
TATP-233 Aug 18, 2026
eed7a90
feat(backend): support MuJoCo root velocity kicks [skip ci] (#1105)
TATP-233 Aug 18, 2026
9cf26b7
refactor(backend): isolate body-state materialization [skip ci] (#1107)
TATP-233 Aug 18, 2026
89400bd
feat(sim2sim): guard manager policy contracts [skip ci] (#1109)
TATP-233 Aug 18, 2026
a812afe
feat(env): migrate Go2 flat production to Hydra MBA [skip ci] (#1111)
TATP-233 Aug 18, 2026
470be21
refactor(tasks): establish registry bootstrap boundary [skip ci]
TATP-233 Aug 18, 2026
b94d9a8
refactor(tasks): move A2 locomotion owner [skip ci]
TATP-233 Aug 18, 2026
c63ac0e
refactor(tasks): move Go2 FootStand owner [skip ci]
TATP-233 Aug 18, 2026
d9c0999
refactor(tasks): move Go2 rough owner [skip ci]
TATP-233 Aug 18, 2026
36cfd74
test(backend): follow task owner source roots [skip ci]
TATP-233 Aug 18, 2026
c8c072e
refactor(tasks): move Go2 joystick owner [skip ci]
TATP-233 Aug 18, 2026
955cae0
refactor(tasks): move Go2 shared base [skip ci]
TATP-233 Aug 18, 2026
7e1e791
refactor(tasks): move Go1 rough owner [skip ci]
TATP-233 Aug 18, 2026
605f8bf
refactor(tasks): move Go1 joystick owner [skip ci]
TATP-233 Aug 18, 2026
36fab0c
refactor(tasks): move Go1 shared base [skip ci]
TATP-233 Aug 18, 2026
27d3a8f
refactor(tasks): move Go2W rough owner [skip ci]
TATP-233 Aug 18, 2026
8a6e4da
refactor(tasks): move Go2W joystick owner [skip ci]
TATP-233 Aug 18, 2026
1a7c452
refactor(tasks): move Go2W shared base [skip ci]
TATP-233 Aug 18, 2026
e9dffb2
refactor(tasks): move Go2 Arm manip-loco owner [skip ci]
TATP-233 Aug 18, 2026
001c455
refactor(tasks): move Go2 Arm shared base [skip ci] (#1142)
TATP-233 Aug 18, 2026
31bfdef
refactor(tasks): move G1 joystick owner [skip ci] (#1144)
TATP-233 Aug 18, 2026
8b74d46
docs(tasks): align G1 task owner paths [skip ci] (#1146)
TATP-233 Aug 18, 2026
3cac8ad
refactor(tasks): move Stewart task owner [skip ci] (#1148)
TATP-233 Aug 18, 2026
069aa41
refactor(tasks): move Allegro in-hand owner [skip ci] (#1150)
TATP-233 Aug 18, 2026
ed2300e
refactor(tasks): move Sharpa in-hand runtime [skip ci] (#1152)
TATP-233 Aug 18, 2026
e0ce628
docs(tasks): align manipulation owner paths [skip ci] (#1154)
TATP-233 Aug 18, 2026
6d44de0
refactor(tasks): move X2 tracking owner [skip ci] (#1156)
TATP-233 Aug 18, 2026
36e610a
refactor(tasks): move G1 box-tracking owner [skip ci] (#1158)
TATP-233 Aug 18, 2026
8afbf6f
refactor(tasks): move G1 SAC tracking leaves [skip ci] (#1160)
TATP-233 Aug 18, 2026
432d70a
refactor(tasks): move G1 flip tracking owner [skip ci] (#1162)
TATP-233 Aug 18, 2026
4ffc373
refactor(tasks): move G1 core tracking owner [skip ci] (#1164)
TATP-233 Aug 18, 2026
f5222e8
refactor(tasks): move motion tracking orchestration [skip ci] (#1166)
TATP-233 Aug 18, 2026
7c6fea0
refactor(tasks): move motion loader and reset owners [skip ci] (#1168)
TATP-233 Aug 18, 2026
e816ae9
refactor(tasks): finish motion tracking common owner [skip ci] (#1170)
TATP-233 Aug 18, 2026
7b8f110
refactor(tasks): move G1 shared base owner [skip ci] (#1172)
TATP-233 Aug 18, 2026
1478465
refactor(tasks): move locomotion manager terms [skip ci] (#1174)
TATP-233 Aug 18, 2026
3d98ba2
refactor(tasks): move locomotion command helpers [skip ci] (#1176)
TATP-233 Aug 18, 2026
fc30d98
refactor(tasks): move locomotion DR config [skip ci] (#1178)
TATP-233 Aug 18, 2026
3fa30dc
refactor(tasks): move locomotion DR provider [skip ci] (#1180)
TATP-233 Aug 18, 2026
c854fb0
refactor(tasks): move locomotion height scan [skip ci] (#1182)
TATP-233 Aug 18, 2026
0e52619
refactor(tasks): move locomotion shared base [skip ci] (#1184)
TATP-233 Aug 18, 2026
8614a86
refactor(tasks): move locomotion terrain spawn [skip ci] (#1186)
TATP-233 Aug 18, 2026
fd366c3
refactor(tasks): finish locomotion common rewards [skip ci] (#1188)
TATP-233 Aug 18, 2026
e8f6782
refactor(tasks): remove legacy env task packages [skip ci] (#1190)
TATP-233 Aug 18, 2026
763859a
docs(api): split env runtime and task references [skip ci] (#1192)
TATP-233 Aug 18, 2026
d8e6657
docs(tasks): update locomotion owner paths [skip ci] (#1194)
TATP-233 Aug 18, 2026
fa616e5
docs(tasks): update motion tracking owner paths [skip ci] (#1196)
TATP-233 Aug 18, 2026
b1c0469
chore(tasks): finish ownership metadata cleanup [skip ci] (#1198)
TATP-233 Aug 18, 2026
c416e25
feat(env): add model-field reset terms [skip ci] (#1201)
TATP-233 Aug 18, 2026
5713d70
feat(tasks): migrate A2 to Manager-Based runtime [skip ci] (#1202)
TATP-233 Aug 18, 2026
e37c5c4
feat(tasks): migrate Go1 flat to Manager-Based runtime [skip ci] (#1204)
TATP-233 Aug 18, 2026
c87d3f4
feat(tasks): migrate Stewart balance to Manager-Based runtime [skip c…
TATP-233 Aug 18, 2026
50b2499
feat(tasks): migrate Allegro rotation to Manager-Based runtime [skip …
TATP-233 Aug 18, 2026
9ba3d8e
feat(tasks): migrate Allegro grasp generation to Manager-Based runtim…
TATP-233 Aug 18, 2026
48fe411
feat(tasks): migrate Go2W flat to Manager-Based runtime [skip ci] (#1…
TATP-233 Aug 19, 2026
7e86dc7
feat: migrate go2 footstand to manager api [skip ci] (#1214)
TATP-233 Aug 19, 2026
d2ff3df
test: add Isaac Lab manager migration fixture [skip ci] (#1216)
TATP-233 Aug 19, 2026
c347da6
docs: align Isaac Lab manager migration guide [skip ci] (#1218)
TATP-233 Aug 19, 2026
7eedf7c
test: add pinned mjlab migration fixture [skip ci] (#1220)
TATP-233 Aug 19, 2026
7794ec8
chore: codify task migration matrix and compatibility boundary (#1224)
TATP-233 Aug 19, 2026
20162bb
feat: migrate quadruped rough family to Manager-Based runtime
TATP-233 Aug 19, 2026
d5bec57
feat: infer manager term _target_ from type annotation (#1231)
TATP-233 Aug 20, 2026
05c6d29
feat: migrate G1 locomotion family to Manager-Based runtime (#1232)
TATP-233 Aug 20, 2026
6ac9bec
chore: drop inferable manager term _target_ from G1 owner configs (#1…
TATP-233 Aug 20, 2026
331caa6
refactor: split unilab.tools into owner layers and scripts/tools (#1234)
TATP-233 Aug 20, 2026
9b0c1aa
feat: migrate motion tracking core to manager api (#1235)
TATP-233 Aug 20, 2026
8d58deb
feat: migrate remaining motion profiles to manager api (#1236)
TATP-233 Aug 20, 2026
6f72bc2
refactor: remove torch layer from unilab.algos package
TATP-233 Aug 20, 2026
3be1fc7
chore: close the #1042 registry, documentation, and performance accep…
TATP-233 Aug 20, 2026
3ea5905
fix: restore legacy-tuned g1 walk training behavior after MBA migration
TATP-233 Aug 21, 2026
34acc0d
fix:robot xml of all (#1238)
LeeLeno Aug 21, 2026
697f45a
refactor: move device info collection into library layer (#1240) (#1245)
TATP-233 Aug 21, 2026
58ec02e
fix: bind quadruped base-velocity rewards to IMU sensors after MBA mi…
TATP-233 Aug 21, 2026
309894b
refactor: split conf/offpolicy into per-algo sac/td3/flashsac config …
TATP-233 Aug 21, 2026
c265c74
refactor: converge train entrypoint boilerplate into library helpers …
TATP-233 Aug 21, 2026
78a1b01
refactor: converge scripts/motion parallel implementations into libra…
TATP-233 Aug 21, 2026
856833a
refactor: remove G1 symmetry augmentation pipeline end to end (#1249)
TATP-233 Aug 21, 2026
f8a19a0
refactor: unify play pipeline through playback session factories (#12…
TATP-233 Aug 21, 2026
6047408
refactor: rehome training/ modules and break algos<->training interde…
TATP-233 Aug 22, 2026
1773fec
feat: instrument MBA reset path with fine-grained sub-step timing (#1…
TATP-233 Aug 23, 2026
2a3bcea
fix: pin get_body_*_vel_b to analytical body-frame semantics across b…
TATP-233 Aug 23, 2026
101b6a2
perf: scope MotionCommand partial-reset recompute to reset rows (#1265)
TATP-233 Aug 23, 2026
a648026
feat: instrument MBA update_state with block, term, and getter timing…
TATP-233 Aug 23, 2026
9198bbd
perf: scope partial-reset observation rebuild to reset rows (#1270)
TATP-233 Aug 23, 2026
7780ebf
chore: add mujoco single-dispatch control microbenchmark for #1262 (#…
TATP-233 Aug 23, 2026
bf619fc
perf: reuse MBA backend state reads within update phase (#1274)
TATP-233 Aug 24, 2026
7083603
perf: single-dispatch MuJoCo per-substep control via control_callback…
TATP-233 Aug 24, 2026
bf8bc68
perf: skip substep callbacks for invariant actions (#1276) (#1277)
TATP-233 Aug 24, 2026
abef0da
perf: scan observation finiteness once per term (#1280)
TATP-233 Aug 24, 2026
8df1f9e
fix: expose mjwarp tracked body kinematics for the MBA body-state con…
TATP-233 Aug 24, 2026
5215ddc
perf: add CUDA graph capture to mjwarp backend (#1273) (#1284)
TATP-233 Aug 24, 2026
65546bb
chore: remove temporary MBA profiling scaffolding (#1281)
TATP-233 Aug 24, 2026
e6f136d
Merge pull request #1285 from unilabsim/chore/issue-1281-remove-mba-p…
TATP-233 Aug 24, 2026
56dff84
perf: use pinned host caches for mjwarp state reads (#1286)
TATP-233 Aug 24, 2026
d7d4fb8
Merge pull request #1287 from unilabsim/perf/issue-1286-mjwarp-pinned…
TATP-233 Aug 24, 2026
5d0b1d3
perf: bound mjwarp partial reset forward (#1288)
TATP-233 Aug 24, 2026
dfe2248
Merge pull request #1290 from unilabsim/perf/issue-1288-mjwarp-sparse…
TATP-233 Aug 24, 2026
fa1172e
fix: bind mjwarp collectors to rank-local GPUs
TATP-233 Aug 24, 2026
49c3edb
Merge pull request #1291 from unilabsim/fix/mjwarp-dp-collector-device
TATP-233 Aug 24, 2026
33459bd
chore: align clean target log files with training scripts
TATP-233 Aug 24, 2026
86ba74d
Merge remote-tracking branch 'origin/main' into dev/issue-1042-manage…
TATP-233 Aug 24, 2026
77ca6dd
feat(benchmark): add opt-in mjwarp case for sac/g1_motion_tracking co…
TATP-233 Aug 25, 2026
27d2299
feat(assets): add T800 MuJoCo model contract
lemon-star608 Aug 24, 2026
f1c4ad2
feat(assets): add T800 binary asset resolver
lemon-star608 Aug 24, 2026
e117aab
feat(t800): add Manager-Based action and reward terms
lemon-star608 Aug 24, 2026
31a3dab
feat(t800): register Manager-Based walk task
lemon-star608 Aug 24, 2026
d392609
feat(ppo): add Manager-Based T800 walk owner
lemon-star608 Aug 24, 2026
4537953
feat(sac): add Manager-Based T800 walk owner
lemon-star608 Aug 24, 2026
55ad4da
test: record T800 support matrix evidence
lemon-star608 Aug 24, 2026
adeb07a
tune(t800): extend default training iterations
lemon-star608 Aug 25, 2026
92a1b95
docs: document T800 assets and support
lemon-star608 Aug 25, 2026
ed46527
style: apply ruff format to mjwarp benchmark test
TATP-233 Aug 25, 2026
3139164
docs: regenerate support matrix for sac g1_motion_tracking mjwarp owner
TATP-233 Aug 25, 2026
9cafe12
feat(sac): add T800 walk-flat mjwarp owner
TATP-233 Aug 25, 2026
f544914
perf(profiling): add temporary per-term timing instrumentation for ma…
TATP-233 Aug 25, 2026
8718d03
style: apply ruff format to test_offpolicy_collector_active_benchmark.py
TATP-233 Aug 25, 2026
062901e
docs: regenerate support matrix for g1_motion_tracking motrix=Configured
TATP-233 Aug 25, 2026
1af9323
perf(managers): sample per-term finite checks instead of every-step s…
TATP-233 Aug 25, 2026
ef8c8e6
docs: regenerate support matrix for g1_motion_tracking motrix=Configured
TATP-233 Aug 25, 2026
a27bc2c
style: apply ruff format (post-commit hook output of make test-all)
TATP-233 Aug 25, 2026
9ec68c0
perf(tasks,managers): eliminate NumPy temporaries in motion tracking …
TATP-233 Aug 25, 2026
d3ebb59
fix: narrow scratch typing for pyright; apply ruff format
TATP-233 Aug 25, 2026
f6ff019
docs: regenerate support matrix for g1_motion_tracking motrix=Configured
TATP-233 Aug 25, 2026
03e284a
perf(reset): row-scope reset-path body getters and complete mjwarp se…
TATP-233 Aug 25, 2026
2f7d97f
Merge PR #1297: perf(profiling): 临时逐 term profiling 埋点(#1293)
TATP-233 Aug 25, 2026
c691a61
Merge PR #1298: perf(managers): per-term isfinite 扫描降级为采样/可配置(#1294)
TATP-233 Aug 25, 2026
08aa9a4
Merge pull request #1222 from unilabsim/feat/t800-walk-flat
TATP-233 Aug 25, 2026
a2a5bb1
Merge PR #1299: perf(tasks,managers): 纯 NumPy 临时数组消除(#1296)
TATP-233 Aug 25, 2026
922df62
Merge PR #1300: perf(reset): reset 路径 backend 边界 row-scoped 化与 set_st…
TATP-233 Aug 25, 2026
6ed2b32
chore: remove temporary per-term profiling instrumentation (#1292 clo…
TATP-233 Aug 25, 2026
39bc8d4
Merge PR #1301: chore: 删除 #1293 临时逐 term profiling 埋点(#1292 收尾)
TATP-233 Aug 25, 2026
2c4e6e0
Merge dev/issue-1042-manager-based-api into dev/issue-1292-motion-tra…
TATP-233 Aug 25, 2026
54d5b4f
Merge pull request #1302 from unilabsim/dev/issue-1292-motion-trackin…
TATP-233 Aug 25, 2026
d95c85f
Revert "Merge PR #1298: perf(managers): per-term isfinite 扫描降级为采样/可配置…
TATP-233 Aug 25, 2026
5de05ab
perf(motion): move fixed hot terms to numba kernels
TATP-233 Aug 25, 2026
5dfca98
Merge pull request #1309 from unilabsim/perf/issue-1306-motion-hot-numba
TATP-233 Aug 25, 2026
970eacf
perf(body-state): fuse selected body cache copies
TATP-233 Aug 25, 2026
2b92598
Merge pull request #1310 from unilabsim/perf/issue-1307-body-state-copy
TATP-233 Aug 25, 2026
a2e08c6
refactor(motrix): drop temporary body-state kernel
TATP-233 Aug 26, 2026
9cca010
Merge pull request #1312 from unilabsim/refactor/issue-1311-motrix-bo…
TATP-233 Aug 26, 2026
8018643
perf(motion): fuse command metrics in numba (#1317) (#1320)
TATP-233 Aug 26, 2026
1d18060
perf(motion): fuse relative transforms in numba (#1318) (#1321)
TATP-233 Aug 26, 2026
d09d05a
perf(observations): reduce batch pipeline copies (#1319) (#1322)
TATP-233 Aug 26, 2026
4fa6631
Merge pull request #1323 from unilabsim/dev/issue-1316-update-state-n…
TATP-233 Aug 26, 2026
512fc82
perf(env): confine DP collector host compute to the per-rank CPU block
TATP-233 Aug 26, 2026
a482a1f
perf(mjwarp): reduce motion tracking reset latency
TATP-233 Aug 26, 2026
c2b110d
Merge pull request #1324 from unilabsim/perf/dp-collector-numba-cpu-b…
TATP-233 Aug 26, 2026
f734cab
Merge pull request #1327 from unilabsim/perf/issue-1325-mjwarp-reset
TATP-233 Aug 26, 2026
bc586c4
benchmark(env): add MuJoCo pool thread-scaling and env-step phase-CPU…
TATP-233 Aug 26, 2026
b23e632
Merge pull request #1329 from unilabsim/perf/issue-1328-mujoco-pool-t…
TATP-233 Aug 27, 2026
67f9d1d
Merge branch 'main' into dev/issue-1042-manager-based-api
TATP-233 Aug 27, 2026
56032a6
fix(base): type-check and test cpu_runtime on non-Linux hosts
TATP-233 Aug 27, 2026
07e6fe6
Merge pull request #1330 from unilabsim/fix/cpu-runtime-darwin-mypy
TATP-233 Aug 27, 2026
411a6ee
fix(logging): make collector reward reporting timely
TATP-233 Aug 27, 2026
22fc439
fix(env): keep per-step reward log entries through autoreset
TATP-233 Aug 27, 2026
457b1a9
Merge pull request #1331 from unilabsim/fix/offpolicy-reward-log-cadence
TATP-233 Aug 27, 2026
df9def3
perf(mujoco): size default pool threads to effective CPUs, not 2x ove…
TATP-233 Aug 27, 2026
7be6e05
Merge pull request #1333 from unilabsim/perf/issue-1328-mujoco-pool-t…
TATP-233 Aug 27, 2026
c07cfa7
Merge pull request #1314 from unilabsim/dev/issue-1304-motion-numba-b…
TATP-233 Aug 27, 2026
a4d3d69
feat(assets): add A2Arm pos-force model
lemon-star608 Aug 24, 2026
73fc832
feat(a2arm): migrate pos-force task to manager-based API
lemon-star608 Aug 24, 2026
02b1756
test: close manager-based migration validation gaps
lemon-star608 Aug 24, 2026
4caf88c
refactor(cse): remove iteration timing logging
lemon-star608 Aug 25, 2026
417922e
fix(cse): restore playback and progress reporting
lemon-star608 Aug 25, 2026
8a23d47
fix: resolve manager-base merge conflicts
lemon-star608 Aug 25, 2026
8758945
refactor(a2arm): complete manager-based migration cleanup
lemon-star608 Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
/scripts/train_*.py @TATP-233 @caozx1110

# Task and environment ownership
/src/unilab/envs/motion_tracking/ @caozx1110
/src/unilab/envs/manipulation/ @Mingrui-Yu
/src/unilab/tasks/motion_tracking/ @caozx1110
/src/unilab/tasks/manipulation/ @Mingrui-Yu
/scripts/motion/ @caozx1110

# Project process and docs
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ body:
label: Reproduction
description: Exact command, config, or sequence that reproduces the issue.
placeholder: |
uv run scripts/train_offpolicy.py algo=sac task=sac/g1_walk_flat/mujoco ...
uv run scripts/train_sac.py task=g1_walk_flat/mujoco ...
validations:
required: true

Expand Down
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ run_summary.json
src/unilab/assets/checkpoints/

scripts/benchmark/outputs/
src/unilab/algos/torch/rsl_rl
src/unilab/algos/rsl_rl

third-party
temp/
Expand All @@ -81,6 +81,12 @@ src/unilab/assets/motions/x2/*.csv

# Robot mesh assets (downloaded from HF at runtime)
src/unilab/assets/robots/x2/meshes/*.STL
src/unilab/assets/robots/a2arm/meshes/*
!src/unilab/assets/robots/a2arm/meshes/.gitkeep
src/unilab/assets/robots/t800/assets/*
!src/unilab/assets/robots/t800/assets/.gitkeep
src/unilab/assets/robots/t800/textures/*
!src/unilab/assets/robots/t800/textures/.gitkeep

# Grasp cache assets (downloaded from HF at runtime)
src/unilab/assets/caches/*.npy
Expand Down
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,27 +39,27 @@ UniLab 是一个 **高性能、模块化、contract 驱动** 的 RL infrastructu

## Sim2Sim 跨后端配置契约

`src/unilab/training/sim2sim.py` 按 dotted path 维护三类字段:
`src/unilab/utils/sim2sim.py` 按 dotted path 维护三类字段:

- **DENYLIST**(差异即 `CrossBackendIncompatibleError`):`algo.obs_groups`、`env.control_config.action_scale`、`algo.policy.actor_hidden_dims` / `critic_hidden_dims`、`algo.empirical_normalization` / `algo.obs_normalization`、`env.sampling_mode`。`env.*` 子集对**任一方向**的不对称出现也 fail-closed;`algo` 专属字段目标缺省时按设计跳过(跨算法合法)。
- **WARNING_LIST**:`reward.*`、`env.control_config.simulate_action_latency`、`env.ctrl_dt`。
- **ALLOWLIST**(自由覆盖):`training.sim_backend`、`env.scene`、`training.play_steps`、`env.domain_rand`、`env.noise_config`、`env.commands.vel_limit`。

训练时 `ExperimentTracker.start()` 把上述字段写入 `run_config.json` 的 `contract_snapshot`(不改 checkpoint 格式,旧 run 无 snapshot 时 fallback + warning);五个 play 入口在建 env 前调用 `resolve_sim2sim_config` 校验,并用 `policy_load_dim_guard` 包裹 checkpoint 加载以把维度不匹配的隐晦报错重抛为显式诊断。设 `training.sim2sim_strict=false` 可把 DENYLIST 差异降级为 warning(默认 `true`)。DENYLIST 字段在每个后端 owner 配置中显式声明并保持跨后端一致(范例:`conf/ppo/task/g1_walk_flat/{mujoco,motrix}.yaml`);跨后端契约审计见 `scripts/audit_sim2sim_contracts.py`。
训练时 `ExperimentTracker.start()` 把上述字段写入 `run_config.json` 的 `contract_snapshot`(不改 checkpoint 格式,旧 run 无 snapshot 时 fallback + warning);五个 play 入口在建 env 前调用 `resolve_sim2sim_config` 校验,并用 `policy_load_dim_guard` 包裹 checkpoint 加载以把维度不匹配的隐晦报错重抛为显式诊断。设 `training.sim2sim_strict=false` 可把 DENYLIST 差异降级为 warning(默认 `true`)。DENYLIST 字段在共享 base owner 与后端 owner 配置中显式声明并保持跨后端一致(范例:`conf/ppo/task/g1_walk_flat/{base,mujoco,motrix}.yaml`);跨后端契约审计见 `scripts/audit_sim2sim_contracts.py`。

## Pointers

- PPO: `scripts/train_rsl_rl.py`
- APPO: `scripts/train_appo.py`
- SAC / TD3: `scripts/train_offpolicy.py`
- SAC / TD3 / FlashSAC: `scripts/train_sac.py` / `scripts/train_td3.py` / `scripts/train_flashsac.py`
- env contract: `src/unilab/base/np_env.py`
- backend contract: `src/unilab/base/backend/base.py`
- training run helpers: `src/unilab/training/run.py`
- visualization helpers: `src/unilab/visualization/`
- shared numeric helpers: `src/unilab/utils/rotation.py`, `src/unilab/utils/geometry.py`
- config schema: `src/unilab/structured_configs.py`
- async runner: `src/unilab/ipc/async_runner.py`
- sim2sim 跨后端契约: `src/unilab/training/sim2sim.py`
- sim2sim 跨后端契约: `src/unilab/utils/sim2sim.py`

## GitHub CLI (gh) 速查

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ clean:
find . -type d -name ".ruff_cache" -exec rm -rf {} +
find . -type d -name "htmlcov" -exec rm -rf {} +
find . -type f -name ".coverage" -delete
rm -f train_appo.log train_offpolicy.log train_rsl_rl.log MUJOCO_LOG.TXT
rm -f train_appo.log train_sac.log train_flashsac.log train_rsl_rl.log MUJOCO_LOG.TXT
find src/unilab/assets/.cache -type f ! -name '.gitkeep' -delete 2>/dev/null || true
find src/unilab/assets/caches -type f ! -name '.gitkeep' -delete 2>/dev/null || true
find src/unilab/assets/checkpoints -type f ! -name '.gitkeep' -delete 2>/dev/null || true
Expand Down
138 changes: 138 additions & 0 deletions conf/appo/task/allegro_inhand/base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# @package _global_
# Canonical Allegro rotation Manager-Based task declaration. Backend leaves own
# only backend identity and algorithm/runtime tuning.
env:
scene:
model_file: src/unilab/assets/robots/allegro_hand/scene.xml
default_keyframe_name: home
entities:
robot:
root_body_name: ball
joint_names:
- ffj0
- ffj1
- ffj2
- ffj3
- mfj0
- mfj1
- mfj2
- mfj3
- rfj0
- rfj1
- rfj2
- rfj3
- thj0
- thj1
- thj2
- thj3
body_names: [ball, ff_tip, mf_tip, rf_tip, th_tip]
actuator_names:
- ffa0
- ffa1
- ffa2
- ffa3
- mfa0
- mfa1
- mfa2
- mfa3
- rfa0
- rfa1
- rfa2
- rfa3
- tha0
- tha1
- tha2
- tha3
sim_dt: 0.005
ctrl_dt: 0.05
max_episode_seconds: 20.0
observations:
policy:
history_length: 3
flatten_history_dim: true
terms:
rotation:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.AllegroRotationObservation
params:
entity_name: robot
action_name: hand
joint_noise: 0.02
torque_estimate_kp: 1.0
torque_estimate_kd: 0.1
actions:
hand:
_target_: unilab.tasks.manipulation.allegro_inhand.manager_terms.AllegroIncrementalPositionActionCfg
entity_name: robot
actuator_names: [".*"]
action_scale: 0.041666666666666664
raw_action_clip: [-1.0, 1.0]
events:
reset_scene_to_default:
func: unilab.envs.mdp.reset_scene_to_default
mode: reset
reset_hand_ball:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.AllegroHandBallReset
mode: reset
params:
entity_name: robot
# null explicitly selects the model home pose. A configured path is
# fail-closed when missing or malformed.
grasp_cache_path: null
joint_noise: 0.0
ball_velocity_noise: 0.0
ball_z_offset: 0.0
pd_gains:
func: unilab.envs.mdp.pd_gains
mode: reset
params:
kp_range: [1.0, 1.0]
kd_range: [0.1, 0.1]
operation: abs
terminations:
dropped:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.AllegroDropTermination
params:
observation_group: policy
observation_term: rotation
minimum_ball_height: 0.125
time_out:
func: unilab.envs.mdp.time_out
time_out: true
scale_rewards_by_dt: true
policy_observation_group: policy
critic_observation_group: null

reward:
rotate:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.AllegroRotateReward
weight: 1.25
params:
state_term_name: dropped
rotation_axis: [0.0, 0.0, 1.0]
clip_min: -0.5
clip_max: 0.5
obj_linvel:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.object_linear_velocity_l1
weight: -0.3
params:
state_term_name: dropped
pose_diff:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.hand_pose_deviation_l2
weight: -0.3
params:
state_term_name: dropped
torque:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.estimated_torque_l2
weight: -0.1
params:
state_term_name: dropped
work:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.estimated_work_l2
weight: -2.0
params:
state_term_name: dropped
drop:
func: unilab.tasks.manipulation.allegro_inhand.manager_terms.dropped
weight: 0.0
params:
state_term_name: dropped
50 changes: 50 additions & 0 deletions conf/appo/task/allegro_inhand/drake.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# @package _global_
defaults:
- /task/allegro_inhand/base
- _self_

training:
task_name: AllegroInhandRotation
sim_backend: drake
play_steps: 200
render_spacing: 0.5
cam_distance: 1.5
cam_lookat: [0.75, 0.75, 0]
cam_elevation: -20.0
replay_queue_size: 4
algo:
num_envs: 1024
steps_per_env: 8
max_iterations: 3000
save_interval: 500
algorithm:
value_loss_coef: 4.0
entropy_coef: 0.01
learning_rate: 0.001
desired_kl: 0.025
adaptive_kl_factor: 2.0
adaptive_lr_factor: 1.5
num_learning_epochs: 5
num_mini_batches: 4
clip_param: 0.2
gamma: 0.99
lam: 0.95
max_grad_norm: 1.0
use_clipped_value_loss: true
schedule: adaptive
actor:
hidden_dims: [512, 256, 128]
activation: elu
obs_normalization: true
distribution_cfg:
class_name: rsl_rl.modules.distribution.GaussianDistribution
init_std: 1.0
std_type: scalar
critic:
hidden_dims: [512, 256, 128]
activation: elu
obs_normalization: true
env:
drake_backend_mode: batch
events:
pd_gains: null
31 changes: 7 additions & 24 deletions conf/appo/task/allegro_inhand/motrix.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# @package _global_
defaults:
- /task/allegro_inhand/base
- _self_

training:
task_name: AllegroInhandRotation
sim_backend: motrix
Expand All @@ -7,6 +11,9 @@ training:
cam_distance: 1.5
cam_lookat: [0.75, 0.75, 0]
cam_elevation: -20.0
env:
events:
pd_gains: null
algo:
num_envs: 16384
steps_per_env: 8
Expand Down Expand Up @@ -39,27 +46,3 @@ algo:
hidden_dims: [512, 256, 128]
activation: elu
obs_normalization: true
reward:
scales:
rotate: 1.25
obj_linvel: -0.3
pose_diff: -0.3
torque: -0.1
work: -2.0
drop: 0.0
angvel_clip_min: -0.5
angvel_clip_max: 0.5
reset_z_threshold: 0.125
env:
gen_grasp: false
max_episode_seconds: 20.0
grasp_cache_path: caches/allegro_grasp_50k.npy
# Keep only grasp/pose reset variation. All online DR terms stay disabled.
domain_rand:
randomize_base_mass: false
random_com: false
randomize_gravity: false
push_robots: false
joint_noise: 0.0
ball_vel_noise: 0.0
ball_z_offset: 0.0
28 changes: 4 additions & 24 deletions conf/appo/task/allegro_inhand/mujoco.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# @package _global_
defaults:
- /task/allegro_inhand/base
- _self_

training:
task_name: AllegroInhandRotation
sim_backend: mujoco
Expand Down Expand Up @@ -41,27 +45,3 @@ algo:
hidden_dims: [512, 256, 128]
activation: elu
obs_normalization: true
reward:
scales:
rotate: 1.25
obj_linvel: -0.3
pose_diff: -0.3
torque: -0.1
work: -2.0
drop: 0.0
angvel_clip_min: -0.5
angvel_clip_max: 0.5
reset_z_threshold: 0.125
env:
gen_grasp: false
max_episode_seconds: 20.0
grasp_cache_path: caches/allegro_grasp_50k.npy
# Keep only grasp/pose reset variation. All online DR terms stay disabled.
domain_rand:
randomize_base_mass: false
random_com: false
randomize_gravity: false
push_robots: false
joint_noise: 0.0
ball_vel_noise: 0.0
ball_z_offset: 0.0
Loading