Download applications/avoiding/README.md from GlobalMotionPlanning/GlobMP: direct link, hf CLI and curl.
- Browser
- Download file 4.8 kB
-
https://huggingface.co/GlobalMotionPlanning/GlobMP/resolve/main/applications/avoiding/README.md
- Command line
-
hf download hf://GlobalMotionPlanning/GlobMP/applications/avoiding/README.md
-
curl -L -o README.md https://huggingface.co/GlobalMotionPlanning/GlobMP/resolve/main/applications/avoiding/README.md
D3IL avoiding-v0: GlobMP as the projector of DiRecT's diffusion sampler
GlobMP replaces DiRecT's IPOPT projection inside DiRecT's own sampler, on the shared checkpoint of the D3IL avoiding-v0
benchmark with the twelve-constraint (hard) set: ten circular keep-outs (the enlarged pillar, the original pillars and three
virtual 2 cm keep-outs in the middle band) and two half-planes. Everything else (checkpoint, sampler, 32 sampling steps,
dynamics fit, normalizer, environment, scoring) is DiRecT's released code in avoiding_baselines/.
Result
On DiRecT's own evaluation episodes (seed 0, 100 episodes), GlobMP is safe in 0.95 of them and reaches the goal in 0.98, against DiRecT's 0.87 and 0.97 (paper Table, same checkpoint and constraint set), and every plan it returns is feasible at every instant. Over four seeds (0-3, 400 episodes) GlobMP averages 0.865 and 0.968, on par with DiRecT's single seed; it is slower (safe rollouts take 78 steps against 61, and each plan takes longer to compute). The setting is replanning every 4 steps (the execution horizon the paper states; DiRecT's released evaluation defaults to 8), with the projector described below.
All GlobMP runs (100 episodes each; deadline = per projection / a plan's first projection, in s; time = seconds per plan for a batch of 50 environments on the run's CPU workers, so it is comparable within this table only):
| run | seed | replan | margin (m) | deadline (s) | guidance steps | safety | goal | steps | time/plan (s) |
|---|---|---|---|---|---|---|---|---|---|
| T3_r4 | 0 | 4 | 0.02 | 3 / 12 | all | 0.95 | 0.98 | 77.9 | 15.1 |
| U1_seed1 | 1 | 4 | 0.02 | 3 / 12 | all | 0.88 | 0.96 | 76.1 | 17.0 |
| T4_effort | 0 | 8 | 0.02 | 5 / 20 | all | 0.85 | 0.96 | 75.6 | 32.8 |
| U2_seed2 | 2 | 4 | 0.02 | 3 / 12 | all | 0.82 | 0.98 | 76.5 | 17.1 |
| U8_seed3 | 3 | 4 | 0.02 | 3 / 12 | all | 0.81 | 0.95 | 77.1 | 17.5 |
| T1_r8 | 0 | 8 | 0.02 | 3 / 12 | all | 0.81 | 0.96 | 74.3 | 22.5 |
| U7_r3 | 0 | 3 | 0.02 | 3 / 12 | all | 0.75 | 0.93 | 76.3 | 15.0 |
| U4_last16 | 0 | 4 | 0.02 | 3 / 12 | last 16 | 0.74 | 0.96 | 69.0 | 10.3 |
| T2_m25 | 0 | 8 | 0.025 | 3 / 12 | all | 0.74 | 0.83 | 78.1 | 23.8 |
| U5_last8 | 0 | 4 | 0.02 | 3 / 12 | last 8 | 0.72 | 0.95 | 67.2 | 5.6 |
| U3_fastdl | 0 | 4 | 0.02 | 1 / 6 | all | 0.55 | 0.91 | 75.2 | 10.2 |
| U6_fastest | 0 | 4 | 0.02 | 1 / 6 | last 16 | 0.48 | 0.93 | 68.5 | 6.0 |
DiRecT's released evaluation replans every 8 steps (its default); the best GlobMP settings replan every 4.
What GlobMP solves at each projection
DiRecT projects the clean-trajectory estimate (16 transitions) onto the constraint set with the fitted linear dynamics,
minimizing 1/2 ||X - X_ref||^2 and imposing the keep-outs at the 16 states. globmp_projector.py solves the same
projection with GlobMP (the globmp package at the repository root):
- variables: the 15 future end-effector positions, joined by straight segments (C^0 spline of degree-1 pieces, the current position fixed, the end free); actions and commanded positions are affine in them through the dynamics fit, so the cost is DiRecT's own, over all channels;
- every keep-out (radius + margin) and both half-planes hold at every point of the motion, not only at the 16 states (sphere and half-space blocks);
- the environment clips each action (dx in [-1.25, 1.25] cm, dy in [0, 1.25] cm per step): action bounds and an action-rate bound (99th percentile of the 96 demonstrations) are imposed as linear blocks, so every plan is executable;
- margin recovery: a robot that starts a plan closer to a keep-out than the margin gets a plan that wins the margin back (at most 1 cm per step) instead of grazing the keep-out;
- warm starts: within a plan the state is fixed, so the previous denoising step's solution is feasible for the next one; Algorithm 2 then descends the new cost from a feasible start. A plan's first projection gets a longer deadline.
Setup
- Environment:
avoiding_baselines/env/direct-d3il.yml(DiRecT's export). On drivers below CUDA 12.8 install thecu126build of torch 2.11 instead ofcu128; install the pip pins with--no-deps(the export is a full freeze) and run withPYTHONNOUSERSITE=1andLD_LIBRARY_PATH=$CONDA_PREFIX/lib. run/run_eval.shcopies the checkpoint into DiRecT'slogs/, appliesrun/direct_hook.patch(three lines inpolicy/direct.py:DIRECT_PROJECTOR=globmpselectsGlobMPProjector), and runs the evaluation:
PY=<direct-d3il>/bin/python DEVICE=cuda:0 NWORK=28 bash run/run_eval.sh 0 1 2 3 # seeds 0-3, 100 episodes each
Results land in avoiding_baselines/DiRecT/logs/avoiding-v0/eval/globmp_seed<s>/summary.json (safety_rate, success_rate).