Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
398 commits
Select commit Hold shift + click to select a range
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
0bfacda
fix(logging): widen terminal reward name column by 10 chars
TATP-233 Aug 27, 2026
59d8251
Merge pull request #1335 from unilabsim/fix/reward-table-name-width
TATP-233 Aug 27, 2026
87032ec
docs(backends): add IsaacGym runtime setup script and guide
TATP-233 Aug 27, 2026
c32f429
Merge pull request #1342 from unilabsim/docs/issue-1334-isaacgym-env-…
TATP-233 Aug 27, 2026
9470be3
feat(backend): add IsaacGym subprocess backend
TATP-233 Aug 27, 2026
cb53b89
feat(backend): map framezaxis sensors with exact site frames
TATP-233 Aug 27, 2026
ca296b4
Merge pull request #1345 from unilabsim/feat/issue-1336-isaacgym-backend
TATP-233 Aug 27, 2026
f546b65
feat(config): onboard g1_walk_flat to the isaacgym backend
TATP-233 Aug 27, 2026
9857486
docs(backends): refresh isaacgym page status after backend landing
TATP-233 Aug 27, 2026
6ae4d88
Merge pull request #1346 from unilabsim/feat/issue-1337-isaacgym-config
TATP-233 Aug 27, 2026
27ec80b
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Aug 27, 2026
eeb41c0
cleanup: drop never-runnable G1 deploy scripts, bind docs to task owners
LeeLeno Aug 27, 2026
13bbc8b
perf(reset-state): replace np.unique duplicate check with bincount
TATP-233 Aug 27, 2026
90ff410
Merge pull request #1356 from unilabsim/perf/issue-1352-reset-state-v…
TATP-233 Aug 27, 2026
80cdf25
feat(isaacgym): auto-download the Preview 4 tarball in setup script
TATP-233 Aug 27, 2026
7e1682b
feat(config): drop appo/td3/flashsac isaacgym owners for g1_walk_flat
TATP-233 Aug 27, 2026
3b6ca88
perf(motion): defer row-wise metrics to reset(), dedup reset motion g…
TATP-233 Aug 27, 2026
be34ddf
Merge pull request #1357 from unilabsim/perf/issue-1355-motion-command
TATP-233 Aug 27, 2026
5bcef12
perf(obs): draw reset-path observation noise for reset rows only
TATP-233 Aug 27, 2026
e81cba3
Merge pull request #1358 from unilabsim/perf/issue-1349-obs-row-noise
TATP-233 Aug 27, 2026
f96e799
style: apply ruff format to test_observation_partial_reset.py
TATP-233 Aug 27, 2026
00eba2c
Merge pull request #1359 from unilabsim/chore/pr1358-format
TATP-233 Aug 27, 2026
01d1bf9
perf(noise): draw float32 noise directly instead of float64+astype
TATP-233 Aug 27, 2026
77856d3
Merge pull request #1360 from unilabsim/perf/issue-1350-noise-f32
TATP-233 Aug 27, 2026
f6fe8c3
perf(obs): share identical term computations across observation groups
TATP-233 Aug 27, 2026
e109b1f
Merge pull request #1361 from unilabsim/perf/issue-1351-obs-term-sharing
TATP-233 Aug 27, 2026
7aa143d
Merge pull request #1362 from unilabsim/dev/issue-1348-host-phase-thr…
TATP-233 Aug 27, 2026
307940a
docs(motion): document the _ingest_motion_rows subclass contract
TATP-233 Aug 27, 2026
4abd987
Merge pull request #1363 from unilabsim/docs/issue-1355-motion-subcla…
TATP-233 Aug 27, 2026
5d7a049
fix(isaacgym): real-runtime fixes from first end-to-end bring-up
TATP-233 Aug 27, 2026
a2e90fb
fix(isaacgym): lazy scene metadata and lazy materialize for env const…
TATP-233 Aug 27, 2026
2f4e75c
feat(cli): expose isaacgym via --sim and document the training guide
TATP-233 Aug 27, 2026
a78c2ac
fix(isaacgym): reproduce MJCF position actuators and disable self-col…
TATP-233 Aug 27, 2026
049a2f9
feat(isaacgym): native viewer/camera rendering for eval playback
TATP-233 Aug 27, 2026
72f0121
Merge pull request #1367 from unilabsim/cleanup/drop-broken-deploy-sc…
TATP-233 Aug 28, 2026
8c7dadc
Merge pull request #1366 from unilabsim/dev/issue-1365-isaacgym-eval-…
TATP-233 Aug 28, 2026
b39e32b
Merge pull request #1347 from unilabsim/dev/issue-1332-isaacgym-backend
TATP-233 Aug 28, 2026
01f939e
Merge remote-tracking branch 'origin/main' into dev/issue-1042-manage…
TATP-233 Aug 31, 2026
cf66e58
research(isaacsim): record feasibility contract matrix
TATP-233 Aug 31, 2026
fa49c95
refactor: extract shared locomotion sensor reward terms (#1371)
TATP-233 Aug 31, 2026
6ddb76a
refactor: migrate g1/t800 owners onto shared sensor reward terms (#1371)
TATP-233 Aug 31, 2026
8c03231
refactor: drop the motion_tracking encoder-bias re-export (#1371)
TATP-233 Aug 31, 2026
ab369be
refactor: fold SensorTermBase into common.manager_terms (#1371)
TATP-233 Aug 31, 2026
08b7f34
refactor: share the command-resolution helper in locomotion common (#…
TATP-233 Aug 31, 2026
45e5da3
Merge pull request #1374 from unilabsim/refactor/issue-1371-sensor-re…
TATP-233 Aug 31, 2026
f7f7630
feat: port MicroDuck velocity task to Manager-Based API
AlexHe99 Aug 31, 2026
c50bff5
refactor: migrate MicroDuck onto shared locomotion terms (#1371)
TATP-233 Aug 31, 2026
54b803e
research(genesis): SimBackend 契约可行性探针与 go/no-go 报告 (#1372)
TATP-233 Aug 31, 2026
05c85be
Merge pull request #1375 from unilabsim/research/issue-1372-genesis-f…
TATP-233 Aug 31, 2026
528a638
chore(deps): torch 窗口升级至 2.8(#1376)
TATP-233 Aug 31, 2026
bebc96a
test(scripts): 锁文件守卫同步 torch 2.8.0+cu128 期望(#1376)
TATP-233 Aug 31, 2026
c6fba44
Merge pull request #1379 from unilabsim/chore/issue-1376-torch-2.8
TATP-233 Aug 31, 2026
bd7acd8
feat(backend): GenesisBackend contract adapter 实现(#1378)
TATP-233 Aug 31, 2026
dbcd00b
Merge pull request #1381 from unilabsim/feat/issue-1378-genesis-backend
TATP-233 Aug 31, 2026
b5dfba5
feat: add SAC off-policy owner for the MicroDuck velocity task
TATP-233 Aug 31, 2026
4e2359e
feat(config): g1_walk_flat 接入 genesis 后端与中英文文档(#1380)
TATP-233 Aug 31, 2026
ff6f95e
fix(backend): GenesisBackend materialize 幂等/lazy 化与体帧运动学(#1382)
TATP-233 Aug 31, 2026
4f5cbdd
Merge pull request #1383 from unilabsim/fix/issue-1382-genesis-materi…
TATP-233 Aug 31, 2026
810eaa4
Merge branch 'dev/issue-1339-genesis-backend' into feat/issue-1380-g1…
TATP-233 Aug 31, 2026
710b3d8
feat(config): 解锁 genesis owner 真实 runtime smoke 并同步文档(#1380)
TATP-233 Aug 31, 2026
e6eced3
Merge pull request #1384 from unilabsim/feat/issue-1380-g1-genesis-owner
TATP-233 Aug 31, 2026
13c1e90
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Aug 31, 2026
b95a6fa
feat: add mjwarp backend for the MicroDuck SAC owner
TATP-233 Aug 31, 2026
2f0400f
feat(config): g1_walk_flat SAC owner 接入 genesis 训练支持(#1386)
TATP-233 Aug 31, 2026
a8684a7
Merge pull request #1387 from unilabsim/feat/issue-1386-sac-genesis-o…
TATP-233 Aug 31, 2026
d335523
feat(backend): genesis eval 原生渲染打通(viewer + 离屏录制)(#1388)
TATP-233 Aug 31, 2026
574d305
Merge pull request #1390 from unilabsim/feat/issue-1388-genesis-eval-…
TATP-233 Aug 31, 2026
737711f
fix(runner): collector inference tick 超时配置化(#1391)
TATP-233 Aug 31, 2026
0b37156
Merge pull request #1392 from unilabsim/fix/issue-1391-inference-requ…
TATP-233 Aug 31, 2026
42dfd38
fix(backend): viewer 关闭异常在 step 边界翻译为 RenderClosedError(#1393)
TATP-233 Aug 31, 2026
6c3fc97
Merge pull request #1394 from unilabsim/fix/issue-1393-viewer-closed-…
TATP-233 Aug 31, 2026
7c61e63
chore(docs): SAC g1_walk_flat genesis 支持等级 Configured → Tested
TATP-233 Aug 31, 2026
2e300ad
Merge pull request #1395 from unilabsim/chore/sac-genesis-tested
TATP-233 Aug 31, 2026
238b775
fix(backend): 交互 viewer 相机姿态改用 Z-up 完整矩阵(#1396)
TATP-233 Aug 31, 2026
14130f6
Merge pull request #1403 from unilabsim/fix/issue-1396-viewer-camera-up
TATP-233 Aug 31, 2026
911409b
Merge pull request #1368 from unilabsim/feat/microduck-velocity-flat
TATP-233 Aug 31, 2026
10a42fe
feat(isaacsim): add headless subprocess backend
TATP-233 Aug 31, 2026
47b31b0
feat: add generic stage-based curriculum engine (#1397)
TATP-233 Aug 31, 2026
89a9e9e
feat: add generic IMU misalignment observation terms (#1400)
TATP-233 Aug 31, 2026
60f4ceb
Merge branch 'dev/issue-1389-mba-capability-gaps' into feat/issue-139…
TATP-233 Aug 31, 2026
739e2f2
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Aug 31, 2026
632e302
Merge pull request #1405 from unilabsim/feat/issue-1400-imu-misalignm…
TATP-233 Aug 31, 2026
9b8d1b2
Merge branch 'dev/issue-1389-mba-capability-gaps' into feat/issue-139…
TATP-233 Aug 31, 2026
0ca26bb
Merge pull request #1406 from unilabsim/feat/issue-1397-curriculum-en…
TATP-233 Aug 31, 2026
de4b4d9
feat: add shared locomotion reward/termination terms (#1398)
TATP-233 Aug 31, 2026
979a416
Merge branch 'dev/issue-1389-mba-capability-gaps' into feat/issue-139…
TATP-233 Aug 31, 2026
fa83b8e
Merge pull request #1408 from unilabsim/feat/issue-1398-locomotion-te…
TATP-233 Aug 31, 2026
f6a30b1
feat: extend MBA event/DR terms (#1399)
TATP-233 Aug 31, 2026
181160d
feat: add mjwarp per-world DR consumption (#1401)
TATP-233 Aug 31, 2026
58b20ae
Merge branch 'dev/issue-1389-mba-capability-gaps' into feat/issue-139…
TATP-233 Aug 31, 2026
e7ee56f
Merge pull request #1409 from unilabsim/feat/issue-1399-event-dr-terms
TATP-233 Aug 31, 2026
28bf765
Merge branch 'dev/issue-1389-mba-capability-gaps' into feat/issue-140…
TATP-233 Aug 31, 2026
a256c8a
fix: align mjwarp apply_body_force signature with SimBackend torque p…
TATP-233 Aug 31, 2026
19b4656
Merge pull request #1410 from unilabsim/feat/issue-1401-mjwarp-dr-con…
TATP-233 Aug 31, 2026
16b499c
style: ruff format canonical form for #1401
TATP-233 Aug 31, 2026
c634bda
Merge pull request #1411 from unilabsim/feat/issue-1401-mjwarp-dr-con…
TATP-233 Aug 31, 2026
095bdb2
feat: add step-staged command/event curricula and privileged foot obs…
TATP-233 Aug 31, 2026
8730751
feat: align MicroDuck velocity recipe with legacy via MBA capabilitie…
TATP-233 Aug 31, 2026
f15b02b
Merge pull request #1412 from unilabsim/feat/issue-1402-microduck-vel…
TATP-233 Aug 31, 2026
f06b3b0
Merge pull request #1415 from unilabsim/dev/issue-1389-mba-capability…
TATP-233 Aug 31, 2026
161f720
feat(isaacsim): add eval rendering modes
TATP-233 Sep 1, 2026
4a7c228
Merge pull request #1419 from unilabsim/feat/issue-1416-isaacsim-rend…
TATP-233 Sep 1, 2026
568d55f
Merge pull request #1407 from unilabsim/dev/issue-1369-isaacsim-backend
TATP-233 Sep 1, 2026
13e8106
fix:Overexposed scene
LeeLeno Sep 1, 2026
b3b9aee
fix:fixed camera of interactive model
LeeLeno Sep 1, 2026
14977fd
fix:floor
LeeLeno Sep 1, 2026
e9baa68
Merge pull request #1420 from unilabsim/dev/issue-1369-isaacsim-backend
LeeLeno Sep 1, 2026
7bce63a
Merge branch 'dev/issue-1042-manager-based-api' into dev/issue-1339-g…
TATP-233 Sep 1, 2026
12939f8
Merge pull request #1385 from unilabsim/dev/issue-1339-genesis-backend
TATP-233 Sep 1, 2026
4f54d51
feat(assets): host six robots' meshes/textures on HF and slim the whe…
TATP-233 Sep 1, 2026
90b6cf1
Merge pull request #1424 from unilabsim/feat/issue-1422-robot-assets-…
TATP-233 Sep 1, 2026
bab38fd
feat: move conf/ and training entrypoints into the unilab package (#1…
TATP-233 Sep 1, 2026
e686746
Merge pull request #1427 from unilabsim/feat/issue-1421-package-layout
TATP-233 Sep 1, 2026
85bdb34
docs: record unisim extraction boundary ADR (#1430)
TATP-233 Sep 2, 2026
e9bfe48
feat: connect UniLab consumers to unisim-core (#1433)
TATP-233 Sep 2, 2026
679d946
docs: document unisim-core migration (#1434)
TATP-233 Sep 2, 2026
1c7a40e
fix: support macOS affinity and cache CI assets
TATP-233 Sep 2, 2026
8763513
chore: consume unisim-core 0.1.5
TATP-233 Sep 2, 2026
e43913e
feat(drake): document and package Drake backend
TATP-233 Sep 2, 2026
7d63201
feat(drake): add standalone setup path
TATP-233 Sep 2, 2026
fac3bb6
feat: remove in-tree physics backend implementations
TATP-233 Sep 2, 2026
81e56e1
docs: finalize unisim-core migration guidance
TATP-233 Sep 2, 2026
b894a72
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Sep 2, 2026
205474c
style: normalize Drake test imports
TATP-233 Sep 2, 2026
41e44b5
chore: consume unisim-core 0.1.11
TATP-233 Sep 2, 2026
6800377
docs: clarify Drake installation and training
TATP-233 Sep 2, 2026
ed5cdab
chore: consume unisim-core 0.1.12
TATP-233 Sep 2, 2026
74ace13
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Sep 2, 2026
07c4b44
Merge pull request #1438 from unilabsim/chore/issue-1428-final
TATP-233 Sep 2, 2026
6aca651
fix(cli): expose Drake simulation route
TATP-233 Sep 2, 2026
47354c5
Merge pull request #1439 from unilabsim/dev/issue-1428-unisim-extraction
TATP-233 Sep 2, 2026
41215d5
test: remove local unisim checkout dependency
TATP-233 Sep 2, 2026
1b2b31c
docs: reorganize backend documentation
TATP-233 Sep 2, 2026
0a00805
Merge pull request #1441 from unilabsim/fix/issue-1428-no-local-unisi…
TATP-233 Sep 2, 2026
2c9ebf6
Merge pull request #1440 from unilabsim/fix/docs-backend-index
TATP-233 Sep 2, 2026
2ea9a48
fix: preserve interactive viewer camera controls
TATP-233 Sep 2, 2026
70e1503
feat: route MuJoCo interactive eval to viewer script
TATP-233 Sep 2, 2026
0b1f450
feat(drake): render Drake physics with native MuJoCo
TATP-233 Sep 2, 2026
081042f
fix: enable policy actions in interactive eval
TATP-233 Sep 2, 2026
8fe3221
Merge pull request #1443 from unilabsim/fix/interactive-camera-manual…
TATP-233 Sep 2, 2026
f9fb9e0
feat(drake): support macOS batch training
TATP-233 Sep 2, 2026
704877b
Merge pull request #1444 from unilabsim/fix/drake-macos-training
TATP-233 Sep 2, 2026
0bcfc1e
merge: resolve Drake rendering conflicts
TATP-233 Sep 2, 2026
96b1139
Merge pull request #1442 from unilabsim/feat/drake-mujoco-native-render
TATP-233 Sep 2, 2026
12e15fd
build: use released unisim-core from PyPI
TATP-233 Sep 2, 2026
fd9c942
Merge pull request #1445 from unilabsim/chore/use-pypi-unisim-core
TATP-233 Sep 2, 2026
2a4b917
fix(drake): detect system Eigen headers
TATP-233 Sep 2, 2026
2488a41
fix(test): make MuJoCo affinity test hermetic
TATP-233 Sep 2, 2026
e2cbe50
fix(assets): compact asset download output
TATP-233 Sep 2, 2026
3d6bdf5
Merge pull request #1446 from unilabsim/fix/pull-assets-compact-progress
TATP-233 Sep 2, 2026
31a21ec
fix(assets): print per-robot pull progress
TATP-233 Sep 2, 2026
675da74
test: remove obsolete audit scaffolding
TATP-233 Sep 2, 2026
e0c9088
style: normalize cleaned test modules
TATP-233 Sep 2, 2026
03f5ece
ci: lint test modules for dead names
TATP-233 Sep 2, 2026
1223b78
test: name registry policy by current contract
TATP-233 Sep 2, 2026
3fa9546
feat: complete minimal manager-based microduck slice
TATP-233 Sep 2, 2026
870a9a9
fix(test): assert removed backend module path
TATP-233 Sep 2, 2026
4062320
refactor(mba): keep task semantics out of shared terms
TATP-233 Sep 2, 2026
422e1c0
refactor(mba): keep scalar metric in shared catalog
TATP-233 Sep 2, 2026
42f18f8
Merge pull request #1449 from unilabsim/dev/issue-1447-tests-audit-cl…
TATP-233 Sep 3, 2026
7630448
Merge branch 'dev/issue-1042-manager-based-api' into feat/issue-1448-…
TATP-233 Sep 3, 2026
06b6ef1
Merge pull request #1450 from unilabsim/feat/issue-1448-manager-api-m…
TATP-233 Sep 3, 2026
2c2bede
feat(microduck): baseline alignment contract and controlled compariso…
TATP-233 Sep 3, 2026
8dfc5e5
Merge pull request #1458 from Motphys/feat/issue-1453-microduck-align…
TATP-233 Sep 3, 2026
ec38852
fix(assets): aggregate pull summary and silence HF download logs
TATP-233 Sep 3, 2026
b27e59e
fix(assets): drop Namespace deletion; apply ruff format
TATP-233 Sep 3, 2026
73dd240
Merge pull request #1459 from Motphys/fix/pull-assets-compact-progress
TATP-233 Sep 3, 2026
37fe416
feat(microduck): align physics layer with upstream recipe (issue #1454)
TATP-233 Sep 3, 2026
d786bf1
feat(microduck): align velocity reward stack with upstream HEAD (issu…
TATP-233 Sep 3, 2026
04d0652
Merge pull request #1460 from Motphys/feat/issue-1454-microduck-physi…
TATP-233 Sep 3, 2026
af5759d
Merge branch 'dev/issue-1452-microduck-rl-alignment' into feat/issue-…
TATP-233 Sep 3, 2026
c7e47e7
feat(microduck): align training infra with upstream recipe (issue #1456)
TATP-233 Sep 3, 2026
d53461d
Merge pull request #1461 from Motphys/feat/issue-1455-microduck-rewar…
TATP-233 Sep 3, 2026
d3def50
Merge branch 'dev/issue-1452-microduck-rl-alignment' into feat/issue-…
TATP-233 Sep 3, 2026
ae3941d
Merge pull request #1462 from Motphys/feat/issue-1456-microduck-infra…
TATP-233 Sep 3, 2026
582f4d2
feat(scripts): add microduck UniLab vs upstream PPO metrics comparison
TATP-233 Sep 3, 2026
8cd43ac
docs(microduck): comparison benchmark report against upstream microdu…
TATP-233 Sep 3, 2026
196cf44
fix: bump tensorboard to >=2.21.0 to drop pkg_resources dependency
TATP-233 Sep 3, 2026
2861ae1
Merge pull request #1463 from Motphys/feat/issue-1457-microduck-compa…
TATP-233 Sep 3, 2026
ed88d1b
Merge remote-tracking branch 'origin/dev/issue-1042-manager-based-api…
TATP-233 Sep 3, 2026
a2b0850
Merge pull request #1465 from Motphys/fix/tensorboard-pkg-resources
TATP-233 Sep 3, 2026
530a20d
Merge pull request #1464 from Motphys/dev/issue-1452-microduck-rl-ali…
TATP-233 Sep 3, 2026
c4587e1
docs(microduck): move comparison report out of repo to PR comment (is…
TATP-233 Sep 3, 2026
8164712
feat(cli): route mjwarp interactive eval through the MuJoCo viewer
TATP-233 Sep 3, 2026
d2c4c0c
feat(cli): fall back to sibling owner config for eval without backend…
TATP-233 Sep 3, 2026
51e549e
Merge pull request #1467 from Motphys/feat/mjwarp-interactive-eval
TATP-233 Sep 3, 2026
402d215
Merge pull request #1466 from Motphys/chore/issue-1457-drop-report-file
TATP-233 Sep 3, 2026
dd3bbfa
Merge branch 'dev/issue-1042-manager-based-api' into feat/eval-sim-ow…
TATP-233 Sep 3, 2026
c49c880
fix(locomotion): gate foot contact on the contact-frame normal column…
TATP-233 Sep 3, 2026
d9859c6
Merge pull request #1469 from Motphys/feat/eval-sim-owner-fallback
TATP-233 Sep 3, 2026
4a2546f
fix(go2): disable drake contact reward until drake reports contact-fr…
TATP-233 Sep 3, 2026
f624aaf
test(go2): pin drake contact reward as disabled in train-script confi…
TATP-233 Sep 3, 2026
d4aa34a
fix(tools): repair stale install prefix when ISAACGYM/ISAACSIM_HOME w…
TATP-233 Sep 3, 2026
f302551
Merge pull request #1473 from Motphys/fix/setup-env-relocation-repair
TATP-233 Sep 3, 2026
4d60e5e
Merge pull request #1470 from Motphys/fix/issue-1468-contact-force-co…
TATP-233 Sep 3, 2026
e9c0094
feat(microduck): port BAM xl330-m6 voltage actuator model (issue #1474)
TATP-233 Sep 3, 2026
8371566
docs: regenerate support matrix for MicroduckVelocityBamFlat (#1474)
TATP-233 Sep 3, 2026
3ba89e3
Merge pull request #1475 from Motphys/feat/issue-1474-microduck-bam-a…
TATP-233 Sep 3, 2026
c7f631c
feat: split RL algorithm layer into standalone uni_rl package (roadma…
TATP-233 Sep 4, 2026
1d1ea3e
chore: remove in-repo T800 task after externalization to engineai_rl_…
TATP-233 Sep 4, 2026
f6d9564
chore: switch unilab-rl distribution from TestPyPI to PyPI (#1492)
TATP-233 Sep 4, 2026
9d1782e
feat(microduck): port velstand + standup tasks from upstream microduc…
TATP-233 Sep 4, 2026
f97c19e
chore: remove in-repo microduck tasks after externalization to microd…
TATP-233 Sep 4, 2026
6b9d8a9
chore(deps): bump unilab-rl to 1.0.0 (#1496)
TATP-233 Sep 4, 2026
36ae101
docs: refresh product README and installation guides
TATP-233 Sep 4, 2026
f914b3a
docs: move asset hosting details from README to installation guide
TATP-233 Sep 4, 2026
87f84ff
ci: add tag-based PyPI release workflow
TATP-233 Sep 4, 2026
d07c521
chore: relax published torch requirement for ROCm substitution
TATP-233 Sep 4, 2026
a887997
ci: extend PR test job timeout to 30 minutes for merged suite
TATP-233 Sep 4, 2026
9692587
update news: accepted by corl2026
TATP-233 Sep 4, 2026
a70d3d3
ci: cache uv deps and move single-core-slow test modules to the slow …
TATP-233 Sep 4, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
# Core algorithm and training flows
/src/unilab/algos/ @TATP-233 @caozx1110
/src/unilab/ipc/ @TATP-233
/scripts/train_*.py @TATP-233 @caozx1110
/src/unilab/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 train --algo sac --task g1_walk_flat --sim mujoco ...
validations:
required: true

Expand Down
21 changes: 20 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ jobs:
persist-credentials: false
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
- name: Install dependencies(only dev group)
run: uv sync --only-group dev
- name: Check
Expand All @@ -49,6 +51,8 @@ jobs:
persist-credentials: false
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
- name: Install dependencies(only dev group)
run: uv sync --only-group dev
- name: Check
Expand All @@ -65,6 +69,8 @@ jobs:
persist-credentials: false
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
- name: Install dependencies
run: uv sync
- name: Check
Expand All @@ -81,6 +87,8 @@ jobs:
persist-credentials: false
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
- name: Install dependencies
run: uv sync
- name: Check
Expand All @@ -98,6 +106,7 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
python-version: '3.11'
- name: Install dependencies
run: |
Expand All @@ -124,7 +133,9 @@ jobs:

test:
if: github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
timeout-minutes: 15
# The merged manager-based suite needs ~20 min on ubuntu-slim; 15 min
# cancels the step at ~60%.
timeout-minutes: 30
strategy:
matrix:
os: [ubuntu-slim]
Expand All @@ -138,6 +149,7 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
# python-version: ${{ matrix.python-version }}
python-version: '3.11'
- name: Install system dependencies
Expand All @@ -162,5 +174,12 @@ jobs:
--no-install-package nvidia-nvtx-cu12 \
--no-install-package triton
uv pip install torch==2.7.0 --index-url https://download.pytorch.org/whl/cpu
- name: Cache robot assets
uses: actions/cache@v4.2.3
with:
path: src/unilab/assets/robots
key: ${{ runner.os }}-robot-assets-v1-${{ hashFiles('src/unilab/assets/hub.py') }}
- name: Pull robot assets
run: uv run --no-sync unilab-pull-assets --robot all
- name: Test with coverage
run: uv run --no-sync pytest -m "not slow" --cov=src/unilab --cov-report "markdown-append:${GITHUB_STEP_SUMMARY:-/dev/null}" --cov-fail-under=25
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
- "docs/README.md"
- "src/unilab/**"
- "scripts/generate_support_matrix.py"
- "conf/**"
- "src/unilab/conf/**"
- "README.md"
- "CONTRIBUTING.md"
- "AGENTS.md"
Expand All @@ -21,7 +21,7 @@ on:
- "docs/README.md"
- "src/unilab/**"
- "scripts/generate_support_matrix.py"
- "conf/**"
- "src/unilab/conf/**"
- "README.md"
- "CONTRIBUTING.md"
- "AGENTS.md"
Expand Down
96 changes: 96 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
name: release

on:
push:
tags: ["v*"]
workflow_dispatch:

permissions:
contents: read
actions: read

jobs:
build-dist:
name: Build and verify distributions
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: false
- name: Verify tag matches project version
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
project_version="$(python3 -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
tag_version="${GITHUB_REF_NAME#v}"
test "$tag_version" = "$project_version" || {
echo "Tag v$tag_version does not match pyproject.toml version $project_version" >&2
exit 1
}
- name: Verify CI passed for tagged commit
if: startsWith(github.ref, 'refs/tags/v')
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
successful_runs="$(gh api \
"/repos/${GITHUB_REPOSITORY}/actions/workflows/ci.yml/runs?head_sha=${GITHUB_SHA}&status=completed&per_page=100" \
--jq '[.workflow_runs[] | select(.conclusion == "success")] | length')"
test "$successful_runs" -gt 0 || {
echo "No successful ci.yml run found for tagged commit $GITHUB_SHA" >&2
echo "ci.yml only runs on pull_request and workflow_dispatch; dispatch it on the commit to release, then tag." >&2
exit 1
}
- name: Build source distribution and wheel
run: uv build --out-dir dist
- name: Check distribution metadata
run: uvx --from twine twine check dist/*
- name: Install the freshly built wheel
run: |
uv venv .release-venv
uv pip install --python .release-venv/bin/python --reinstall --no-deps \
--no-binary unilab --no-cache --find-links dist --no-index unilab
- name: Smoke test installed wheel
shell: bash
run: |
tag_version=""
case "$GITHUB_REF" in
refs/tags/v*) tag_version="${GITHUB_REF_NAME#v}" ;;
esac
.release-venv/bin/python -c "
import unilab
assert unilab.ROOT_PATH.is_dir()
assert (unilab.ROOT_PATH / 'conf').is_dir()
version = unilab.__version__
assert version != '0.0.0', version
ref = '$tag_version'
if ref:
assert version == ref, f'{version} != {ref}'
print('installed unilab', version)
"
- uses: actions/upload-artifact@v4.2.3
with:
name: release-dist
path: dist/*

publish:
needs: build-dist
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
environment: pypi
steps:
- uses: actions/download-artifact@v4.2.3
with:
name: release-dist
path: dist
- name: Publish distributions to PyPI with trusted publishing
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist
skip-existing: true
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ run_summary.json
src/unilab/assets/checkpoints/

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

third-party
temp/
Expand All @@ -81,6 +80,13 @@ 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/g1/assets/
src/unilab/assets/robots/g1/textures/
src/unilab/assets/robots/go2/assets/
src/unilab/assets/robots/a2/assets/
src/unilab/assets/robots/allegro_hand/assets/
src/unilab/assets/robots/sharpa_wave/meshes/
src/unilab/assets/robots/go2_arm/assets/

# Grasp cache assets (downloaded from HF at runtime)
src/unilab/assets/caches/*.npy
Expand Down
39 changes: 29 additions & 10 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

UniLab 是一个 **高性能、模块化、contract 驱动** 的 RL infrastructure 仓库。

RL 算法与异步 runtime(PPO/APPO/SAC/TD3/HORA 的 runner、learner、collector、IPC、训练日志)由独立包 **uni_rl**(仓库 [unilabsim/unilab_rl](https://github.com/unilabsim/unilab_rl),distribution 名 `unilab-rl`,发布在 PyPI)承载;UniLab 不构造 uni_rl 消费的 env,而是通过注入式 env contract 对接:`uni_rl.env_contract.EnvFactory = Callable[[int, Mapping | None], EnvProtocol]`(必须可被 pickle 引用,collector 跑在 spawn 子进程),UniLab 侧适配器为 `src/unilab/base/env_factory.py` 的 `registry_env_factory`,mjwarp 设备绑定经 `src/unilab/base/process_device.py` 的 `bind_backend_process_device` 注入。unilab 可以 import uni_rl;uni_rl 永远不 import unilab / unisim。

## Core Principles

1. **Contract first**: 不为了一次通过绕过 env / backend / runner contract。
Expand Down Expand Up @@ -32,34 +34,40 @@ UniLab 是一个 **高性能、模块化、contract 驱动** 的 RL infrastructu
| Env | `NpEnvState.obs` 必须是 dict;`reset()` 返回 `(obs_dict, info_dict)`;`obs_groups_spec` 影响 wrapper 和 learner 维度。 |
| Config / Reward | reward 通过 Hydra 注入;后端切换必须通过 `task=<task>/<backend>` 选择 owner YAML,`training.sim_backend` 只是 owner YAML 的身份字段,不能单独 override 来切后端。算法超参数直接走 YAML compose,不经 Python 层解释。 |
| Backend | backend-specific 逻辑留在 backend / env 适配层,不向训练脚本扩散。env 层只能调用 `SimBackend`(`base.py`)中已声明的方法;若某方法只在 MuJoCo 或 Motrix 中存在,必须先将其加入 `SimBackend` 抽象接口(可抛 `NotImplementedError`),禁止直接在 env 里调用 backend 子类的私有方法(即"功能泄漏/feature leakage")。新增 backend 专有能力时,需同步更新 `SimBackend`。 |
| Asset / Metadata | `ASSETS_ROOT_PATH`、`model_file`、XML / asset 元数据只允许在 init / materialization / cache 等低频路径访问;`step/reset/domain randomization` 等热路径不得解析 asset 或基于 asset 元数据做运行时分支。 |
| Asset / Metadata | `ASSETS_ROOT_PATH`、`model_file`、XML / asset 元数据只允许在 init / materialization / cache 等低频路径访问;`step/reset/domain randomization` 等热路径不得解析 asset 或基于 asset 元数据做运行时分支。机器人 mesh/纹理不入 git:托管在 HF 数据集 `unilabsim/unilab-robots`,注册表为 `src/unilab/assets/hub.py` 的 `ROBOT_ASSET_SPECS`,由 `create_backend` 冷路径自动下载(也可 `unilab-pull-assets` 预拉取),落盘回原路径使 XML `meshdir` 引用不变;这些目录在 `.gitignore` 与 `pyproject.toml` 的 `tool.uv.build-backend.source-exclude` 中同步排除。 |
| Asset / XML structure | `<keyframe>` 必须放在 task-level XML(`scene_*.xml` 或 `locomotion_task.xml` 等 fragment),**禁止放进 robot.xml**。robot.xml 是纯机器人描述(body / joint / actuator / sensor),跟 task / 场景无关;keyframe 是 task 起始姿态,属于场景或 task 资源。motrix 后端需要 keyframe 时通过 `scene.fragment_files` 引用 fragment XML。 |
| Async | 不绕开 runner lifecycle,也不另起 collector / learner 同步协议。 |
| Async | 不绕开 runner lifecycle(实现在 uni_rl 仓库的 `uni_rl.ipc.async_runner`),也不另起 collector / learner 同步协议。 |
| Sim2Sim 契约 | 跨后端 play 时,影响策略 I/O / 网络结构的字段必须跨后端一致;不一致即 `CrossBackendIncompatibleError`。详见下方 Sim2Sim 章节。 |

## 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 配置中显式声明并保持跨后端一致(范例:`src/unilab/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`
- PPO: `src/unilab/scripts/train_rsl_rl.py`
- APPO: `src/unilab/scripts/train_appo.py`
- SAC / TD3 / FlashSAC: `src/unilab/scripts/train_sac.py` / `src/unilab/scripts/train_td3.py` / `src/unilab/scripts/train_flashsac.py`
- env contract: `src/unilab/base/np_env.py`
- backend contract: `src/unilab/base/backend/base.py`
- backend contract: `unisim.backend.base.SimBackend`(由 `unisim-core` 仓库维护)
- UniLab backend owner factory: `src/unilab/base/backend_factory.py`
- isaacgym subprocess 后端(Python 3.8 worker + shm 协议): `unisim.backend.isaacgym`(由 `unisim-core` 仓库维护)
- 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`
- async runner: `uni_rl.ipc.async_runner`(独立 uni_rl 仓库 / `unilab-rl` 包)
- algo 实现(runner / learner / collector): uni_rl 包(独立仓库,distribution 名 `unilab-rl`);UniLab 只保留入口脚本与 play 编排
- uni_rl env factory 适配: `src/unilab/base/env_factory.py`
- HORA APPO play 编排: `src/unilab/scripts/play_hora_appo.py`;HORA distill 配置组合: `src/unilab/training/hora_distill_config.py`
- sim2sim 跨后端契约: `src/unilab/utils/sim2sim.py`
- new algorithm recipe(三档扩展方式 + 约定式 CLI 路由 footprint): `docs/sphinx/source/zh_CN/4-developer_guide/3-extending/3-new_algorithm.md`

## GitHub CLI (gh) 速查

Expand Down Expand Up @@ -101,6 +109,17 @@ git push -u origin fix/issue-174-ppo-config-alignment
gh pr create --title "fix: xxx" --body "Fixes #174" --base <target-branch>
```

## PyPI Release

`.github/workflows/release.yml` 是生产发布路径,由 `v*` tag 推送触发(`workflow_dispatch` 只做构建与验证,不发布):

1. 更新 `pyproject.toml` 的 `[project].version`(版本单一来源)及相关文档,本地 `make test-all` 与 `uv build` 通过。
2. 确认目标 commit 有成功的 `ci.yml` 运行:ci.yml 只在 PR 与 `workflow_dispatch` 上运行,若目标 commit 没有记录,先对该 commit 手动 dispatch 一次 ci.yml 再发 tag。
3. 推送与 `[project].version` 完全一致的 annotated tag(如 `v0.1.0`)。release workflow 会校验 tag 与版本一致、该 commit CI 已通过,然后构建 sdist + wheel、twine check、`--no-deps` 安装 wheel 并做 import / 版本 smoke test。
4. 构建验证通过后,`publish` job 通过 trusted publishing(OIDC,`environment: pypi`)上传到 PyPI,无 token 入仓;`skip-existing: true` 支持安全重跑。

发布失败时:产物未变可用同一 tag 修复重跑;改了代码必须升级版本与新 tag,绝不覆盖已发布版本。

## Context

- 架构标准与验证详情:[docs/sphinx/source/zh_CN/4-developer_guide/0-index.md](docs/sphinx/source/zh_CN/4-developer_guide/0-index.md)
Expand Down
9 changes: 6 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ Languages: English | [简体中文](docs/sphinx/source/zh_CN/4-developer_guide/4

1. Fork and clone the repository.
2. Install dependencies for your platform:
- macOS (MPS, installs PyPI torch wheels): `uv sync`
- Linux default (installs PyTorch cu128 wheels; requires an NVIDIA GPU/driver supported by current PyTorch cu128 wheels): `uv sync`
- macOS (MPS, installs PyPI torch wheels): `make setup-motrix` (or `make setup-mujoco`)
- Linux default (installs PyTorch cu128 wheels; requires an NVIDIA GPU/driver supported by current PyTorch cu128 wheels): `make setup`
- Linux AMD / ROCm workstation: `make sync-rocm`, then run commands with `uv run --no-sync ...`
- When you need Motrix, append `--extra motrix`
- For direct uv setup, use `uv sync --extra mujoco --extra motrix`; replace it
with `--extra mujoco` or `--extra motrix` for a single backend
- Physics adapters are supplied by the production PyPI package
`unisim-core>=0.1.14` (import namespace `unisim`).
3. Create a branch such as `git checkout -b docs/improve-readme` or `git checkout -b fix/backend-bug`.

## Development Rules
Expand Down
19 changes: 17 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ setup-mujoco:
uv sync --extra mujoco
uv run --no-sync unilab-complete install

# Installs the Python extra and builds DrakeUni's native extension. By default
# the host-compatible official tarball is downloaded; use DRAKE_HOME=<prefix>
# to build against an existing installation.
.PHONY: setup-drake
setup-drake:
@ if [ -n "$(DRAKE_HOME)" ]; then \
bash scripts/tools/setup_drake_env.sh --drake-home "$(DRAKE_HOME)"; \
else \
bash scripts/tools/setup_drake_env.sh --download-drake; \
fi

.PHONY: setup-motrix
setup-motrix:
uv sync --extra motrix
Expand Down Expand Up @@ -56,7 +67,11 @@ type:
uv run pyright

.PHONY: check
check: format type
check: format type check-tests

.PHONY: check-tests
check-tests:
uv run ruff check tests --select F401,F821,F811,F841 --output-format concise

.PHONY: test
test:
Expand Down Expand Up @@ -88,7 +103,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
Loading
Loading