Skip to content
Draft
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
83ce92f
prismatic + revolute.
jumyungc Feb 27, 2026
1b1c4a1
Consistent implementation of ball, fixed, revolute, prismatic.
jumyungc Mar 3, 2026
890454a
Added prismatic and revolute joint drive.
jumyungc Mar 3, 2026
2f0d060
List joint type:cable in xpbd for warning suppression.
jumyungc Mar 3, 2026
6cd42b2
D6 trial.
jumyungc Mar 3, 2026
e8b33c1
Merge remote-tracking branch 'origin/main' into vbd-prismatic-revolute
jumyungc Mar 3, 2026
8fdc391
Testing D6.
jumyungc Mar 5, 2026
bc5a5ae
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 5, 2026
f41dc87
More unit tests.
jumyungc Mar 6, 2026
037d3d9
VBD joint refactor.
jumyungc Mar 6, 2026
9b2c567
Support joint_enabled.
jumyungc Mar 6, 2026
ecb8728
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 6, 2026
1ca16bb
Removed uncovered test.
jumyungc Mar 6, 2026
42cb226
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 6, 2026
bf59254
Clean up examples.
jumyungc Mar 7, 2026
421f03f
Make prev_pose more robust against eval_fk and kinematic interruption.
jumyungc Mar 7, 2026
6166b88
drive and limit kd: use vbd convention.
jumyungc Mar 7, 2026
c10adc3
Zero ke, non-zero kd not supported according to vbd convention.
jumyungc Mar 7, 2026
6f879c3
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 8, 2026
d5dcd08
Merge branch 'vbd-prismatic-revolute' of https://github.com/jumyungc/…
jumyungc Mar 8, 2026
92c148a
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 9, 2026
b151bd6
Updated feature matrix.
jumyungc Mar 9, 2026
312a38b
Removed didactic examples.
jumyungc Mar 10, 2026
e96377c
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 10, 2026
1cbdbf9
Updated missing docstring.
jumyungc Mar 10, 2026
bad6c62
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 10, 2026
b92ca1f
Merge branch 'main' into vbd-prismatic-revolute
jumyungc Mar 10, 2026
02335ed
Reflected reviews.
jumyungc Mar 10, 2026
2340606
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 10, 2026
911b669
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 14, 2026
29f3857
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 15, 2026
f821ee8
Joint constraint refactor.
jumyungc Mar 15, 2026
898598f
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 16, 2026
515ef48
Updated basic_urdf.
jumyungc Mar 16, 2026
1054c78
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 16, 2026
3d03e93
Fix VBD drive/limit targets ignoring rest-pose angle offsets from eva…
jumyungc Mar 17, 2026
72ac32e
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 17, 2026
c530de6
Merge branch 'refs/heads/main' into vbd-prismatic-revolute
jumyungc Mar 17, 2026
0848e39
VBD hard-constraint: fixed-k ALM
jumyungc Mar 31, 2026
7f422ed
Contact and friction improvement. Lazy allocation
jumyungc Apr 2, 2026
f96f066
Merge branch 'main' into vbd-contact-lambda
jumyungc Apr 2, 2026
902c533
Polished rigid body VBD.
jumyungc Apr 4, 2026
de6bce2
Fixed minor formatting.
jumyungc Apr 4, 2026
936b4ba
Merge branch 'main' into vbd-contact-lambda
jumyungc Apr 4, 2026
4a7f654
Fixed examples
jumyungc Apr 4, 2026
61cc806
Fixed examples
jumyungc Apr 4, 2026
3cee83e
Merge branch 'refs/heads/main' into vbd-contact-lambda
jumyungc Apr 4, 2026
477a150
Warmstart force-off for soft penalty contact
jumyungc Apr 4, 2026
0daf011
Rigid contact warmstart default off
jumyungc Apr 5, 2026
c8e6ef8
Updated images
jumyungc Apr 6, 2026
b923caf
ramping penalty + hard constraints
jumyungc Apr 14, 2026
f377013
minor format
jumyungc Apr 14, 2026
300a56b
minor format
jumyungc Apr 14, 2026
34af9e2
Replace Schur 6x6 solve with direct LDL^T, strengthen contact matching
jumyungc Apr 15, 2026
ad6f7a1
Merge main
jumyungc Apr 15, 2026
13171c0
Updated change log
jumyungc Apr 15, 2026
8714f1f
Minor test change
jumyungc Apr 15, 2026
ff33830
Minor test change
jumyungc Apr 15, 2026
170a564
Merge branch 'refs/heads/main' into vbd-contact-lambda
jumyungc Apr 15, 2026
ca600ab
Cuda graph issue fixed for stale velocity
jumyungc Apr 17, 2026
e4125d4
Merge branch 'refs/heads/main' into vbd-contact-lambda
jumyungc Apr 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
- Add `ViewerGL.log_scalar()` for live scalar time-series plots in the viewer
- Add `deterministic` flag to `CollisionPipeline` and `NarrowPhase` for GPU-thread-scheduling-independent contact ordering via radix sort and deterministic fingerprint tiebreaking in contact reduction
- Add `ViewerBase.log_arrows()` for arrow rendering (wide line + arrowhead) in the GL viewer with a dedicated geometry shader
- Add `SolverVBD.set_joint_constraint_mode()` and `SolverVBD.JointSlot` for runtime hard/soft constraint toggling per joint
- Add `rigid_contact_hard`, `rigid_contact_history`, `rigid_avbd_contact_alpha`, `rigid_avbd_joint_alpha` params to `SolverVBD` for augmented-Lagrangian contact and joint control

### Changed

Expand Down Expand Up @@ -73,6 +75,8 @@
- Pin `mujoco` and `mujoco-warp` dependencies to `~=3.6.0`
- Update default environment map texture in GL viewer (source: https://polyhaven.com/a/brown_photostudio_02)
- Increase conveyor rail roughness in `example_basic_conveyor` to reduce mirror-like reflections
- Reduce default `stretch_stiffness` from `1.0e9` to `1.0e4` in `add_rod()` and `add_rod_graph()`
- VBD solver uses augmented-Lagrangian hard constraints for body-body contacts by default (`rigid_contact_hard=True`)

### Deprecated

Expand All @@ -90,6 +94,7 @@
- Deprecate `ModelBuilder.add_shape_ellipsoid()` parameters `a`, `b`, `c` in favor of `rx`, `ry`, `rz`
- Deprecate passing a `Gaussian` as the second positional argument to `ModelBuilder.add_shape_gaussian()`; use the `gaussian=` keyword argument instead
- Deprecate `SensorTiledCamera.utils.assign_random_colors_per_world()` and `assign_random_colors_per_shape()` in favor of per-shape colors via `ModelBuilder.add_shape_*(color=...)`
- Deprecate `rigid_enable_dahl_friction` in `SolverVBD`; Dahl friction is now auto-detected from model attributes (`model.vbd.dahl_eps_max` / `model.vbd.dahl_tau`)

### Removed

Expand Down
Binary file modified docs/images/examples/example_cable_pile.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions newton/_src/sim/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4213,7 +4213,7 @@ def add_joint_cable(

"""
# Linear DOF (stretch)
se_ke = 1.0e9 if stretch_stiffness is None else stretch_stiffness
se_ke = 1.0e4 if stretch_stiffness is None else stretch_stiffness
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Default stretch_stiffness silently reduced by 5 orders of magnitude

This changes the default from 1.0e9 to 1.0e4. The same change also appears in add_rod() (line 6424) and add_rod_graph() (line 6602).

Most users rely on the default since the examples omit stretch_stiffness. After this PR, every simulation using cables or rods will behave differently without any explicit opt-in. The rationale (ALM hard constraints now handle stretch enforcement) makes sense, but the silent nature of the change is risky.

At minimum this needs a Changed entry in CHANGELOG.md explaining the new default and why. Consider whether a one-release deprecation warning is warranted given the magnitude of the behavior shift, for example:

if stretch_stiffness is None:
    warnings.warn(
        "Default stretch_stiffness changed from 1e9 to 1e4. "
        "Pass stretch_stiffness=1e4 explicitly to silence this warning.",
        FutureWarning, stacklevel=2,
    )

se_kd = 0.0 if stretch_damping is None else stretch_damping
ax_lin = ModelBuilder.JointDofConfig(target_ke=se_ke, target_kd=se_kd)

Expand Down Expand Up @@ -6421,7 +6421,7 @@ def add_rod(
cfg = self.default_shape_cfg

# Stretch defaults: high stiffness to keep neighboring capsules tightly coupled
stretch_stiffness = 1.0e9 if stretch_stiffness is None else stretch_stiffness
stretch_stiffness = 1.0e4 if stretch_stiffness is None else stretch_stiffness
stretch_damping = 0.0 if stretch_damping is None else stretch_damping

# Bend defaults: 0.0 (users must explicitly set for bending resistance)
Expand Down Expand Up @@ -6599,7 +6599,7 @@ def add_rod_graph(
cfg = self.default_shape_cfg

# Stretch defaults: high stiffness to keep neighboring capsules tightly coupled
stretch_stiffness = 1.0e9 if stretch_stiffness is None else stretch_stiffness
stretch_stiffness = 1.0e4 if stretch_stiffness is None else stretch_stiffness
stretch_damping = 0.0 if stretch_damping is None else stretch_damping

# Bend defaults: 0.0 (users must explicitly set for bending resistance)
Expand Down
8 changes: 3 additions & 5 deletions newton/_src/solvers/vbd/particle_vbd_kernels.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import warp as wp

from newton._src.math import orthonormal_basis
from newton._src.solvers.vbd.rigid_vbd_kernels import evaluate_body_particle_contact
from newton._src.solvers.vbd.rigid_vbd_kernels import _eval_body_particle_contact, evaluate_body_particle_contact

from ...geometry import ParticleFlags
from ...geometry.kernels import triangle_closest_point
Expand Down Expand Up @@ -2439,7 +2439,7 @@ def accumulate_contact_force_and_hessian_no_self_contact(
contact_kd = body_particle_contact_material_kd[t_id]
contact_mu = body_particle_contact_material_mu[t_id]

body_contact_force, body_contact_hessian = evaluate_body_particle_contact(
body_contact_force, body_contact_hessian = _eval_body_particle_contact(
particle_idx,
pos[particle_idx],
pos_anchor[particle_idx],
Expand All @@ -2449,7 +2449,6 @@ def accumulate_contact_force_and_hessian_no_self_contact(
contact_mu,
friction_epsilon,
particle_radius,
shape_material_mu,
shape_body,
body_q,
body_q_prev,
Expand Down Expand Up @@ -2940,7 +2939,7 @@ def accumulate_particle_body_contact_force_and_hessian(
contact_kd = body_particle_contact_material_kd[t_id]
contact_mu = body_particle_contact_material_mu[t_id]

body_contact_force, body_contact_hessian = evaluate_body_particle_contact(
body_contact_force, body_contact_hessian = _eval_body_particle_contact(
particle_idx,
pos[particle_idx],
pos_anchor[particle_idx],
Expand All @@ -2950,7 +2949,6 @@ def accumulate_particle_body_contact_force_and_hessian(
contact_mu,
friction_epsilon,
particle_radius,
shape_material_mu,
shape_body,
body_q,
body_q_prev,
Expand Down
Loading
Loading