02Overview
Conference on Robot Learning (CoRL) 2026
CS-Pi: Constraint-Satisfying Flow Policy Sampling
Rejection sampling that knows where to look
Robotics Institute, Carnegie Mellon University
Steer a flow policy around obstacles it never saw: safe actions the policy would still choose, with no retraining and no constraint gradients.
01Hardware
Zero-shot on a Franka with π₀.₅
Pick up the apple and place it on the blue plate, around obstacles the policy never saw.
03Four methods
Four ways to enforce a constraint
Click a method to see how it samples.
Gradient guidance
Steers each denoising step with a cost gradient evaluated at a proxy and can still violate the constraint.
Projection
Moves the draw to the safe set, yielding an action the policy would rarely sample.
Rejection sampling
Redraws from pure noise until a draw is safe.
CS-Pi (ours)
Projects the draw, renoises the projection to time n = k/(k + δ) set by the projection residual δ (larger δ renoises more), and re-runs the policy until a draw is safe and plausible.
04Method
Our intuition
We start from rejection sampling: it gives exactly the distribution we want, safe and on-policy.
Our idea: at every sample, the projection tells us roughly how far we are from the safe set. We use it to bias the next sample.
Why the projection helps
The projected sample tells us where to look. The distance δ between the policy’s sample and its projection estimates our uncertainty.
Moved a lot (large δ)
The projection is less likely to be near an on-policy safe sample: add more noise and search more widely.
Moved a little (small δ)
The projection is more likely to be near an on-policy safe sample: add less noise and refine it.
This intuition gives the algorithm:
Algorithm 1 Constraint-Satisfying Flow Policy Sampling 1 a₀ ~ 𝒩(0, I); â⁽⁰⁾ ← πθ(a₀; 0) ▷ initial policy draw 2 for i = 0, …, Kmax−1: 3 ac⁽ⁱ⁾ ← 𝒫(â⁽ⁱ⁾); δ⁽ⁱ⁾ ← ‖â⁽ⁱ⁾ − ac⁽ⁱ⁾‖ 4 if δ⁽ⁱ⁾ ≤ τ: return â⁽ⁱ⁾ 5 n⁽ⁱ⁾ ← k / (k + δ⁽ⁱ⁾); ε⁽ⁱ⁾ ~ 𝒩(0, I) 6 an⁽ⁱ⁾ ← n⁽ⁱ⁾ ac⁽ⁱ⁾ + (1 − n⁽ⁱ⁾) ε⁽ⁱ⁾ 7 â⁽ⁱ⁺¹⁾ ← πθ(an⁽ⁱ⁾; n⁽ⁱ⁾) ▷ re-denoise from time n 8 return 𝒫(â⁽ᴷᵐᵃˣ⁾) ▷ optional terminal projection
We also generalize to arbitrary cost functions
For a continuous cost, the projection becomes a proximal step toward lower cost; nothing else changes. Below, the preference is a gripper orientation: reach the blue goal with the gripper (bold axes) matching the target (pale axes).
The goal and the preference agree
They conflict: CS-Pi can prioritize either
Task aligned: no projection step at the end of the loop. Cost aligned: a projection step at the end of the loop.
A hard constraint and a soft preference together
05Head to head
Same scenario, same policy: CS-Pi vs a baseline
Shelf pick-and-place with a deployment-time obstacle. Left is CS-Pi; right is the strongest baseline that fails this scenario. Currently showing: Clutter combo.
06Interactive explorer
Pick a task, a scenario, and a method
Real world
Simulation
Pick a cube from a shelf and place it on the table, past obstacles added at deployment.
Scenario
Method
07Results
Safe success on four benchmarks
Hardware: pick the apple, place it on the blue plate
Show the table
| Method | Layout 1 ↑ | Layout 2 ↑ | Averaged ↑ | Time/step (s) ↓ | logL ↑ |
|---|---|---|---|---|---|
| Unconstrained | 20 | 0 | 10 | 0.069 | −470.2 ± 1.0 |
| Gradient Guidance | 40 | 10 | 25 | 0.139 | −464.9 ± 1.4 |
| Trust Sampling | 20 | 20 | 20 | 0.135 | −474.8 ± 2.1 |
| Projection | 40 | 40 | 40 | 0.099 | −473.2 ± 2.3 |
| CS-Pi (ours) | 60 | 50 | 55 | 0.143 | −471.8 ± 1.7 |
Safe success (%), two layouts, 10 trials each. logL of executed actions (unconstrained policy: −470.2). The CS-Pi row is highlighted; bold is best per column.
Shelf pick-and-place
Show the table
| Method | Safe-SR (%) ↑ | Goal reach (%) ↑ | Collision (%) ↓ | logL ↑ | NFE ↓ |
|---|---|---|---|---|---|
| Unconstrained | 3.3 | 75.3 | 80.0 | 15.02 | 240 |
| Gradient Guidance (α=0.20) | 32.0 | 32.0 | 0.7 | 10.42 | 240 |
| Trust Sampling (w=0.1, J=5) | 53.3 | 60.7 | 12.0 | 12.23 | 1104 |
| Rejection (B=100) | 34.7 | 68.0 | 38.7 | 14.22 | 8745 |
| Projection | 55.3 | 58.7 | 6.0 | 11.41 | 240 |
| SafeDiffuser | 13.3 | 16.7 | 19.3 | 7.50† | 240 |
| SafeFlowMatcher | 44.7 | 48.7 | 8.0 | 10.90 | 432 |
| CS-Pi (k=50, Kmax=5) (ours) | 81.3 | 84.7 | 3.3 | 17.96 | 271 |
150 tasks over 5 scenarios. Safe-SR: collision-free pick and place. logL in nats/dim (unconstrained policy: 15.02). NFE: model calls per trajectory. †Median. The CS-Pi row is highlighted; bold is best per column.
2D Avoidance (macro over 6 scenarios)
Show the table
| Method | Safe-SR (%) ↑ | Fully-in-supp. ↑ | logL ↑ | NFE ↓ |
|---|---|---|---|---|
| Unconstrained | 5.2 | 0.800 | 1.66 | 456 |
| Gradient Guidance | 67.2 | 0.410 | 1.49 | 298 |
| Trust Sampling | 34.9 | 0.350 | 1.43 | 4421 |
| Rejection | 79.4 | 0.750 | 1.66 | 73921 |
| Projection | 99.8 | 0.640 | −85.89 | 52 |
| SafeDiffuser | 100.0 | 0.830 | 1.44 | 92 |
| SafeFlowMatcher | 45.2 | 0.000 | −463 | 220 |
| CS-Pi (ours) | 99.0 | 0.857 | 1.53 | 283 |
200 rollouts per cell. Fully-in-supp.: share of rollouts entirely inside the demonstration support. The CS-Pi row is highlighted; bold is best per column.
3D-Orient (reach with an orientation preference)
Show the table
| Method | Success ↑ | Goal reach ↑ | logL ↑ | Max step (m) | NFE ↓ |
|---|---|---|---|---|---|
| Unconstrained | 2.2% | 98.9% | 13.46 | 0.07 | 138 |
| Gradient Guidance (α=0.003) | 2.2% | 70.0% | 12.30 | 0.08 | 154 |
| Gradient Guidance (α=0.03) | 6.7% | 7.8% | 9.62 | 0.40 | 160 |
| Trust Sampling (w=0.001) | 1.1% | 98.9% | 13.44 | 0.07 | 1379 |
| CS-Pi (k=10, Kmax=3) (ours) | 65.6% | 98.9% | 10.21 | 0.07 | 210 |
90 rollouts per cell. Success: within 10 cm and 0.36 rad of the target. Max step: largest end-effector jump in one step. The CS-Pi row is highlighted; bold is best per column.
08Cite
BibTeX
@inproceedings{cspi2026, title = {CS-Pi: Constraint-Satisfying Flow Policy Sampling}, author = {Soumojit Bhattacharya and Oliver Kroemer and Shubham Tulsiani}, booktitle = {Conference on Robot Learning (CoRL)}, year = {2026}}