Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
0f8a1f5
Add process-aware structs, settings, and utility infrastructure
yichao-liang Mar 24, 2026
6c76e3e
Refactor PyBullet base env, controllers, motion planning, and add robots
yichao-liang Mar 24, 2026
aea1f6d
Add URDF assets for new PyBullet environments
yichao-liang Mar 24, 2026
8683610
Add reusable skill factory framework for PyBullet environments
yichao-liang Mar 24, 2026
b2e0f24
Add 15 PyBullet environments with ground truth models
yichao-liang Mar 24, 2026
de6ec49
Add process-aware planning engine and learning infrastructure
yichao-liang Mar 24, 2026
47334bc
Refactor main pipeline with process-aware execution and logging
yichao-liang Mar 24, 2026
87c6342
Add Agent SDK with MCP tools and Claude-based planning approaches
yichao-liang Mar 24, 2026
07b2f0d
Add human interaction, VLM online invention, and classification appro…
yichao-liang Mar 24, 2026
31d90e4
Add mara adapter, prompts, docs, configs, scripts, and tests
yichao-liang Mar 24, 2026
3cb916f
Trigger CI rerun
yichao-liang Mar 25, 2026
f64250a
yapf
yichao-liang Mar 25, 2026
c758086
Improve motion planning and skill factories
yichao-liang Mar 27, 2026
ee8b630
Improve bilevel planning infrastructure
yichao-liang Mar 27, 2026
cb944dc
Add agent bilevel approach with plan sketch and backtracking refinement
yichao-liang Mar 27, 2026
e60f12a
Add composable config system with includes support
yichao-liang Mar 27, 2026
96ea5ad
Merge pull request #14 from BasisResearch/pr/motion-planning-skills
yichao-liang Mar 27, 2026
a574265
Merge pull request #16 from BasisResearch/pr/composable-config
yichao-liang Mar 27, 2026
4ce31e5
Merge pull request #17 from BasisResearch/pr/agent-bilevel
yichao-liang Mar 27, 2026
f233f3f
Merge pull request #15 from BasisResearch/pr/bilevel-planning-infra
yichao-liang Mar 27, 2026
6bc15fe
Fix CI checks: lint, type, and test fixes (#18)
yichao-liang Apr 1, 2026
70fd9aa
Parameterize Wait option with target atoms for noise-robust terminati…
yichao-liang Apr 1, 2026
0e7aa3f
Unify backtracking refinement into shared function (#20)
yichao-liang Apr 1, 2026
fb37935
Add gymnasium-API benchmark wrapper and retire mara_adapter (#21)
yichao-liang Apr 14, 2026
f8c317a
Add VisualPredicator (ICLR 2025) and ExoPredicator (ICLR 2026) to REA…
yichao-liang Apr 14, 2026
66f3bce
Rebrand MARA RoboSim to RoboDisco (Robot Model Discovery Benchmark) (…
yichao-liang Apr 14, 2026
7a942a4
Stop tracking CLAUDE.md and switch to pybullet-arm64 (#29)
yichao-liang Apr 28, 2026
e551684
Add agent simulation learning workflow (#30)
yichao-liang May 5, 2026
727d3b3
Fix pybullet block tipping freeze and add GUI entry points (#31)
yichao-liang May 8, 2026
8039dca
Make human_low_level_control approach work across all pybullet envs (…
yichao-liang May 9, 2026
3aa2770
Rename human_interaction approach and fix Wait crash (#33)
yichao-liang May 9, 2026
868c866
Predicate invention sub-approach, refinement/execution fidelity fixes…
yichao-liang May 20, 2026
daf7b36
Agent-sim predicate invention, partial-observability simulators, and …
yichao-liang May 31, 2026
d5ea0b7
PO boil end-to-end + robust switch cap (solves 5/5 across 5 seeds) (#37)
yichao-liang Jun 4, 2026
bd3fbf9
Info-seeking active experiments, recurrent LM fit, and subgoal replan…
yichao-liang Jun 12, 2026
a364aa2
Agent bilevel: LLM-proposed params, domino domain, and agent-SDK tool…
yichao-liang Jun 25, 2026
95239a7
Agent-bilevel: horizon-faithful plan capture + explorer fixes (solves…
yichao-liang Jun 29, 2026
0d22d98
domino oracle: generator-faithful rank-sum place sampler + InFront na…
yichao-liang Jun 30, 2026
ed7620b
Domino system-ID tasks: reach-limited min-block (friction) + heavy-bl…
yichao-liang Jul 4, 2026
9c37cdb
Extract per-skill sampler learning into SamplerLearningMixin (#45)
yichao-liang Jul 4, 2026
7961b7d
Infra: PyBullet env-leak fix, adaptive-thinking SDK, scene-snapshot g…
yichao-liang Jul 7, 2026
503cb9d
Land domino sysID + fan + configs + bridge on master (#47-#51 consoli…
yichao-liang Jul 7, 2026
b154456
infra: pin setuptools<81 so pkg_resources stays importable in CI (#60)
yichao-liang Jul 10, 2026
770e1d5
online learning: skip redundant early-stop re-test (#61)
yichao-liang Jul 10, 2026
41c05f4
sysID: fit determinism + lateral_friction rename (#56)
yichao-liang Jul 10, 2026
8a8d284
Real-world domino env (pybullet_domino_real) (#54)
amburger66 Jul 10, 2026
a04d56d
agent-bilevel/explorer: robustness + prompt/formatting cleanups (#57)
yichao-liang Jul 10, 2026
af30b38
domino min-block: cascade certificate, yaw/arm calibration, gym-style…
yichao-liang Jul 10, 2026
0686645
fan: replan-free oracle and demo generation (#59)
yichao-liang Jul 10, 2026
ea043b5
motion_planning: keep bystander clearance during BiRRT + collision di…
yichao-liang Jul 12, 2026
1ad1df2
agent_sdk: best-effort submission on turn-cap + cap render resolution…
yichao-liang Jul 12, 2026
5f6cf72
domino: certificate rules a2/a3 + DominoEvaluator on plain chain task…
yichao-liang Jul 12, 2026
e1af83d
main/early-stopping: require per-task reward bar and honest solve acc…
yichao-liang Jul 12, 2026
bfba601
log_viewer: web-based viewer for agent run logs (#64)
yichao-liang Jul 12, 2026
486331d
sysid: overhaul rollout fit pipeline (#68)
yichao-liang Jul 12, 2026
e92222e
Real domino: open-loop robot execution at test time (Phase 3 + bridge…
amburger66 Jul 13, 2026
4a677ac
Make Panda's home pose the canonical Franka configuration (#70)
amburger66 Jul 14, 2026
89dd812
agent_sdk: harden plan capture with strict parsing and legitimacy gat…
yichao-liang Jul 14, 2026
df35b13
domino: high-friction retune, cascade-certificate hardening, generato…
yichao-liang Jul 14, 2026
b07356b
exp_domino launcher: run both friction arms, skip predicate invention…
yichao-liang Jul 14, 2026
10a2450
task evaluator: public solved bit and unified agent reward surfaces (…
yichao-liang Jul 14, 2026
19ed2b8
bilevel refinement: region annotations, near-miss reports, sampler-sy…
yichao-liang Jul 14, 2026
f118b7f
agent/domino: side-push default, contact-gated certificate exemption,…
yichao-liang Jul 14, 2026
c576349
domino/configs: blue-only rearrangement rule, arm lineup cleanup (900…
yichao-liang Jul 15, 2026
f5c4272
video: stream episode videos to disk, fix int64 render OOM; log_viewe…
yichao-liang Jul 15, 2026
fb3859b
domino: counterfactual push-probe certificate, unified turn-task gene…
yichao-liang Jul 16, 2026
aaeddf0
domino/agent_sdk: fingertips-only probe replay, staging-only certific…
yichao-liang Jul 17, 2026
d891a32
agent_sdk: explore_python probe facade, evaluator-gated refinement, m…
yichao-liang Jul 17, 2026
4db0007
log_viewer: live-run tracking + duration column; agent_sdk probe audi…
yichao-liang Jul 17, 2026
fdfa127
skill_factories: carried-object planning margins + grasp-relative rel…
yichao-liang Jul 18, 2026
87bffba
agent_sdk/approaches: plan-capture validation hardening, Wait quiesce…
yichao-liang Jul 18, 2026
4265df9
approaches: time-boxed solve restarts with a cross-attempt journal (#92)
yichao-liang Jul 18, 2026
dba292c
approaches: agent approach restructure (model-free/model-based rename…
yichao-liang Jul 19, 2026
1d7fa08
agent_sdk, code_sim_learning: characterization tests, rehash fix, con…
yichao-liang Jul 19, 2026
cd6b7d6
agent_sdk, code_sim_learning: layer protocols, typed configs, leaf-mo…
yichao-liang Jul 19, 2026
6c77133
agent_sdk, code_sim_learning: split physical_sysid, bilevel_sketch, t…
yichao-liang Jul 19, 2026
d4809df
agent_sdk: session-manager base, pure capture decision, refine-search…
yichao-liang Jul 19, 2026
dfe2e51
domino turns: explore observability (evaluator verdicts, contacts) + …
yichao-liang Jul 19, 2026
207aec9
[Real-world active learning] PR 4: in-process RealRobot + babyrobot s…
amburger66 Jul 27, 2026
577bf1f
[Real-world active learning] PR 5: observation conversion + twin-sync…
amburger66 Jul 28, 2026
ffe136d
agent_sdk: session-probe tool surface, sysID subset fits, solve-journ…
yichao-liang Jul 30, 2026
5ccd34f
main+agent_sdk: test-blind early-stopping controls, run robustness, l…
yichao-liang Jul 30, 2026
a8b7259
code_sim_learning: sysID verdicts, shared orchestrator, anchor-ablati…
yichao-liang Jul 30, 2026
e963127
agent_sdk+code_sim_learning: physics-margin capture gate on honest sy…
yichao-liang Jul 30, 2026
30fde6d
pybullet_domino+agent_sdk: certificate criterion experiments, BeliefP…
yichao-liang Jul 30, 2026
f9269b5
pybullet_domino+code_sim_learning: heavy-turn tasks at true friction,…
yichao-liang Jul 30, 2026
84e2390
agent_sdk+scripts: explore videos, capture-verdict outcomes, deepest-…
yichao-liang Jul 30, 2026
1b72994
sim_learning+agent_sdk: open-loop rollout residuals, combined-substra…
yichao-liang Jul 30, 2026
9a6cb9f
[Real-world active learning] PR 6: real-robot execution as an injecte…
amburger66 Jul 30, 2026
73862fe
[Real-world active learning] PR 7: human-gated task rebuild on the st…
amburger66 Jul 30, 2026
6d40af7
docs: consolidate slide decks under docs/slides/ and redraw the sysID…
yichao-liang Jul 31, 2026
2a8e94c
Make the Push EE yaw offset a per-robot property (#109)
amburger66 Jul 31, 2026
5b04483
domino_real: fold perceived roll modulo pi (#106)
amburger66 Jul 31, 2026
2e9c372
replay_plan: the oracle approach has no NSRTs for this env (#108)
amburger66 Jul 31, 2026
56900fe
Domino system-ID arm on the Franka: new env + two Panda-only skill fi…
amburger66 Aug 3, 2026
1014be3
agent_sdk: write sandbox files as utf-8, not the locale default (#110)
amburger66 Aug 3, 2026
b883467
domino_real: a dry-arm rung, and carry sampled plans from sim to the …
amburger66 Aug 3, 2026
509361c
domino: fix Pick/Push heights, the Place release, the real wrist, and…
amburger66 Aug 4, 2026
5437b60
real robot: a fixed-plan explorer, and a record of every look (#115)
amburger66 Aug 5, 2026
e8a8800
domino_real: let a real task carry a DominoEvaluator (#116)
amburger66 Aug 7, 2026
ce8917d
submodule: bump BabyRobotPredicator to main (#63 merged) (#118)
amburger66 Aug 7, 2026
cd12d89
real robot: five fixes the hardware found that sim could not (#119)
amburger66 Aug 7, 2026
01e1b1b
Add Engaging (ORCD) job submission scripts (#120)
yichao-liang Aug 13, 2026
9d46488
configs: fan/domino arm selection, seeds, fan test grid (#122)
yichao-liang Aug 13, 2026
f9534ce
log_viewer: Slurm-aware liveness and job/run pinning (#121)
yichao-liang Aug 13, 2026
58f490e
agent_bilevel: one query per solve attempt; split explore prompt cont…
yichao-liang Aug 13, 2026
dc143de
sim.residuals(rollout=True): registry sweep opt-in, phys_params point…
yichao-liang Aug 13, 2026
4b0918a
Rename process dynamics to residual dynamics across the sim-learning …
yichao-liang Aug 13, 2026
bcddc32
fan: sim/real fixes, blocker geometry as observed state, postmortem d…
yichao-liang Aug 13, 2026
0b1255a
Residual rules gain a physics-command channel; split fan env into vis…
yichao-liang Aug 13, 2026
4236969
cascade certificate: a topple must persist, not just occur once (#130)
amburger66 Aug 13, 2026
89fbf0d
panda: stop fingers crushing through grasped objects (#131)
yichao-liang Aug 13, 2026
43ef3be
docs: add weekly sync 2026-08-13 slide deck (fan wind-through-engine)…
yichao-liang Aug 14, 2026
52613d5
domino Push: do not motion-plan the phases meant to make contact (#129)
amburger66 Aug 14, 2026
7079d7d
Open-loop execution and continuous recording for the real domino fric…
amburger66 Aug 17, 2026
1d809f3
Score the friction fit against the markerless pose track (#135)
amburger66 Aug 18, 2026
b802ae3
Match the pose track to the twin in one frame, and once per episode (…
amburger66 Aug 18, 2026
eac8665
Retry a learned artifact's pickle once, after a collection (#142)
amburger66 Aug 19, 2026
7e769d5
Cut markerless post-processing: give stage 4 the cores it has, drop a…
amburger66 Aug 19, 2026
cdaf1b9
Open the ZED take in front of the push, not the whole episode (#139)
amburger66 Aug 19, 2026
03a0d9c
add support for two camera fusion pose detection
amburger66 Aug 20, 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
[run]
omit =
predicators/third_party/**
# Git submodules; covered by their own repos' suites.
submodules/**
predicators/envs/kitchen.py
predicators/perception/kitchen_perceiver.py
predicators/ground_truth_models/kitchen/**
Expand Down
74 changes: 59 additions & 15 deletions .github/workflows/predicators.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,64 @@ jobs:
unit-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10.14"]
group: [1, 2, 3, 4, 5, 6, 7, 8]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-${{ hashFiles('setup.py') }}
restore-keys: |
pip-${{ matrix.python-version }}-
- run: |
pip install -e .
pip install pytest-cov==2.12.1
- name: Pytest
pip install pytest-cov==2.12.1 pytest-split
- name: Pytest (group ${{ matrix.group }}/8)
run: |
pytest -s tests/ --cov-config=.coveragerc --cov=predicators/ --cov=tests/ --cov-fail-under=100 --cov-report=term-missing:skip-covered
pytest -s tests/ --splits 8 --group ${{ matrix.group }} --splitting-algorithm least_duration --cov-config=.coveragerc --cov=predicators/ --cov=tests/ --cov-report=term-missing:skip-covered
env:
PYTHONHASHSEED: 0
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-group-${{ matrix.group }}
path: .coverage
include-hidden-files: true

coverage:
runs-on: ubuntu-latest
needs: unit-tests
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.10.14
uses: actions/setup-python@v2
with:
python-version: "3.10.14"
- run: |
pip install coverage
- name: Download coverage artifacts
uses: actions/download-artifact@v4
with:
pattern: coverage-group-*
path: coverage-data
- name: Merge and report coverage
run: |
i=1
for dir in coverage-data/coverage-group-*; do
cp "$dir/.coverage" ".coverage.$i"
i=$((i + 1))
done
coverage combine
coverage report --show-missing --skip-covered

static-type-checking:
runs-on: ubuntu-latest
strategy:
Expand All @@ -35,8 +75,13 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-${{ hashFiles('setup.py') }}
restore-keys: |
pip-${{ matrix.python-version }}-
- name: Install dependencies
run: |
pip install -e .
Expand All @@ -55,8 +100,13 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-${{ hashFiles('setup.py') }}
restore-keys: |
pip-${{ matrix.python-version }}-
- name: Install dependencies
run: |
pip install -e .
Expand All @@ -77,8 +127,6 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Install dependencies
run: |
pip install yapf==0.32.0
Expand All @@ -101,8 +149,6 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Install dependencies
run: |
pip install isort==5.10.1
Expand All @@ -122,8 +168,6 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/setup.py'
- name: Install dependencies
run: |
pip install docformatter==1.4
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
__pycache__
*.pyc
.DS_Store
CLAUDE.md
.vscode
*.egg-info
*.pkl
Expand All @@ -21,6 +22,7 @@ logs*
saved_approaches
saved_datasets
scripts/results
scripts/robodisco_getting_started_output/
pretrained_model_cache*
tests/datasets/mock_vlm_datasets/cache/
machines.txt
Expand All @@ -33,5 +35,9 @@ Gymnasium-Robotics/
predicators/datasets/vlm_input_data_prompts/vision_api/prompt.txt
predicators/datasets/vlm_input_data_prompts/vision_api/response.txt

.mypy_cache/

# Jetbrains IDEs
.idea/

paper/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "submodules/BabyRobotPredicator"]
path = submodules/BabyRobotPredicator
url = git@github.com:BasisResearch/BabyRobotPredicator.git
2 changes: 1 addition & 1 deletion .predicators_pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ extension-pkg-whitelist=numpy,pybullet,torch,tensorflow,pyrealsense2
ignore=CVS

# Add paths to the blacklist.
ignore-paths=predicators/envs/assets,predicators/third_party,venv
ignore-paths=predicators/envs/assets,predicators/third_party,venv,docs

# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
Expand Down
Loading