Repository navigation
SolverCoupledADMM: Kamino+VBD cross-solver joint coupling breaks with 2+ attachment points (works fine with MuJoCo, works fine with exactly 1 VBD attachment) #4055
Unanswered
dougrag-hmc
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Body:
Environment
newton)Summary
SolverCoupledADMM'sjoint_proximal_bodiesmechanism (auto-detecting a "free"/unowned BALL/REVOLUTE/FIXED joint whose parent and child belong to two different entries, and turning it into a cross-solver ADMM attachment) works correctly for a single cross-solver joint between aSolverKaminoentry and aSolverVBDentry. It breaks as soon as there are two or more such joints between the same Kamino/VBD entry pair.The same pattern (2+ cross-solver joints) works fine when the non-Kamino entry is
SolverMuJoCoinstead ofSolverVBD— both in a minimal repro and in Newton's ownexample_kamino_mujoco_admm_solver.py(which uses 4 cross-solver REVOLUTE joints). This suggests the bug is specific to the Kamino↔VBD pairing, not a general limitation on the number of cross-solver joints.Two failure modes observed
Minimal model (2 free-floating Kamino boxes + a short VBD rod, 2 cross-solver FIXED joints): fails at
SolverCoupledADMM(...)construction time with:ValueError: SolverKamino cannot simulate this model due to unsupported features:
This happens even though the CABLE joints belong entirely to the "vbd" entry and are never in the "kamino" entry's
joints=[...]list. It looks like per-entry compaction falls back to an uncompacted view for the Kamino entry once there are 2+ cross-solver joints, andSolverKamino._validate_model_compatibilitythen sees the full (uncompacted)joint_typearray, including the VBD entry's own CABLE joints.Larger model (a 14-body URDF-imported robot arm with a closed kinematic loop as the Kamino entry, ~45-segment Cosserat rod as the VBD entry, 2-3 cross-solver FIXED joints): construction succeeds, but the first
solver.step(...)call crashes with:RuntimeError: Error launching kernel: _apply_dual_preconditioner_to_state on device cuda:0:
Warp CUDA error 700: an illegal memory access was encountered
raised from inside
SolverKamino's own PADMM solve (kamino/_src/solvers/padmm/solver.py:_update_solution).Routing each attachment through a small intermediate "anchor" rigid body (added to the VBD entry, internally jointed to the rod with a normal owned joint, with only the anchor cross-jointed to Kamino) does not avoid either failure — same crash, just confirming it isn't specifically about which VBD body is targeted.
Minimal repro (fails at construction with the CABLE ValueError above)
All reactions