Drake v1.24.0

Back to Release Notes


  • Drake now supports Clarabel, an open-source convex conic solver. This solver can solve convex optimization problems with linear, second-order, positive semidefinite or exponential cone constraints and linear/quadratic objective functions (#20604).

  • Drake now supports macOS Sonoma (#20678).

  • We introduce two new convex approximations of contact, Similar (multibody::DiscreteContactApproximation::kSimilar) and Lagged (multibody::DiscreteContactApproximation::kLagged), in the SAP solver. Users can now use the model previously implemented in TAMSI (compliant contact with Hunt and Crossley dissipation and regularized friction) in the SAP solver. These new models are preferred given that the Hunt and Crossley model is based on physics and experimental observations. Moreover, unlike the TAMSI solver, the SAP solver provides theoretical and practical convergence guarantees. Practically this means:

    • Exactly the same physical parameters that apply to TAMSI (multibody::DiscreteContactApproximation::kTamsi) now apply to the Similar and the Lagged model. Users simply need to flip a single switch in multibody::DiscreteContactApproximation to take advantage of the new convex approximations.
    • The relaxation_time parameter for dissipation only applies to the multibody::DiscreteContactApproximation::kSap approximation, as before.
    • MultibodyPlant::set_discrete_contact_approximation() or MultibodyPlantConfig::discrete_contact_approximation should be used to configure the model of discrete contact approximation. The solver type is inferred from the type of contact approximation. MultibodyPlant::set_discrete_contact_solver() and MultibodyPlantConfig::discrete_contact_solver are deprecated.
    • We encourage you to start using the multibody::DiscreteContactApproximation::kLagged and multibody::DiscreteContactApproximation::kSimilar models in your own simulations. Refer to the documentation for the differences between the two approximations. One of them will become the default contact model, and your feedback in advance is appreciated.
    • Refer to our paper, available at https://arxiv.org/abs/2312.03908, if you want to learn more about this new feature and its underlying theory.

Breaking changes since v1.23.0

  • Drake no longer supports the $SDF_PATH environment variable for resolving SDFormat <include> statements (#20642).
    • SDFormat include statements should use package:// URIs, instead.

Refer to our Drake Stability Guidelines for our policy on API changes.

Changes since v1.23.0

Dynamical Systems

New features

  • Configure label image publishing in CameraConfig (#20554)
  • ConcatenateImages allows for variable size inputs (#20599)
  • Add ImageIo (#20447)


  • None

Mathematical Program

New features

  • Add ClarabelSolver to ChooseBestSolver (#20587)
  • Enable Clarabel by default (#20604)
  • Get dual solution from Clarabel (#20597)
  • ClarabelSolver obeys SolverOptions (#20602)
  • Add Clarabel to preferred_solvers in MinimumUniformScalingToTouch (#20677)
  • Add constraints for enforcing that a principal submatrix of a symmetric matrix be positive semidefinite (#20586)
  • Add an environment variable to disable SnoptSolver (#20636)


  • Reset IRIS consecutive_failures after falsifying lower bound (#20627)
  • Check ConvexSet::IsBounded first in MaybeCalcAxisAlignedBoundingBox (#20680)

Multibody Dynamics and Geometry

New features

  • Support downloading meshcat html files via URLs (#20504)
  • Meshcat can report “current” meshcat camera pose (#20484)
  • Compute gradient of signed distance when boxes touch (#20033)
  • MultibodyPlant supports Hunt and Crossley constraint (#20654)


  • Correct phong-to-pbr promotion in presence of diffuse texture (#20607)


New features

  • Add wraparound edges to GcsTrajectoryOptimization, for unbounded revolute joints (#20509)
  • Add GetContinuousRevoluteJointIndices as a helper function for GCS (#20652)


  • None

Tutorials and examples

Miscellaneous features and fixes

  • model_visualizer enables camera tracking and makes use of the pose (#20484)
  • Use PYTHON_VERSION (not UBUNTU_RELEASE) to toggle DrakeGym example on/off (#20574)
  • Add ExtractPrincipalSubmatrix and ToLowerTriangularColumnsFromMatrix utility functions (#20646)(#20670)

pydrake bindings

New features

  • Add python bindings for FlattenModelDirectives (#20608)
  • Add python bindings for ClarabelSolver (#20569)


  • None

Build system

  • Prune unnecessary dependencies (#20563)
  • Avoid installing vestigial drake_visualizer scripts (#20564)
  • Cull SDFormat use of environment and subprocess. In particular, Drake no longer supports the $SDF_PATH environment variable for resolving SDFormat <include> statements. SDFormat include statements should use package:// URIs, instead. (#20642)
  • Fix some errors with Bazel 7 (#20658)
    • This might not yet achieve full Bazel 7 compatibility, but it does fix some acute problems for users that are merely installing Drake.
  • Offically support macOS Sonoma (#20678)

Build dependencies

  • Add rules_license 0.0.7 (#20560)
  • Upgrade abseil_cpp_internal to latest commit (#20630)
  • Upgrade bazelisk to latest release v1.19.0 (#20631)
  • Upgrade bazel_skylib to latest release 1.5.0 (#20630)
  • Upgrade fcl_internal to latest commit (#20630)
  • Upgrade gz_utils_internal to latest release gz-utils2_2.2.0 (#20637)
  • Upgrade meshcat to latest commit (#20484)
  • Upgrade MOSEK to latest release 10.1.21 (#20634)
  • Upgrade mypy_internal to latest release v1.7.1 (#20630)
  • Upgrade nanoflann_internal to latest release v1.5.2 (#20630)
  • Upgrade nlohmann_internal to latest release v3.11.3 (#20630)
  • Upgrade rules_python to latest release 0.27.1 (#20630)
  • Upgrade rules_rust to latest release 0.32.0 (#20630)
  • Upgrade stable_baselines3_internal to latest release v2.2.1 (#20632)
  • Upgrade suitesparse_internal to latest release v7.3.1 (#20630)

Newly-deprecated APIs

  • drake::multibody::Body::node_index (#20603)
  • The @drake_detected_os external (#20600)
  • drake::multibody::MultibodyPlant::set_discrete_contact_solver and drake::multibody::MultibodyPlantConfig::discrete_contact_solver (#20672)
    • Instead of choosing a solver, users now must choose a discrete contact approximation. The solver is inferred from the approximation. Users can select an approximation with drake::multibody::MultibodyPlant::set_discrete_contact_approximation or via drake::multibody::MultibodyPlantConfig::discrete_contact_approximation.

Removal of deprecated items

  • drake::geometry::RenderEngineGlParams::default_label (#20589)
  • drake::geometry::RenderEngineGltfClientParams::default_label (#20589)
  • drake::geometry::RenderEngineVtkParams::default_label (#20589)
  • drake::systems::sensors::Image<drake::systems::sensors::PixelType::kExpr> (#20590)
  • drake::systems::sensors::PixelFormat::kExpr (#20590)
  • drake::systems::sensors::PixelType::kExpr (#20590)
  • drake::systems::DiscreteUpdateEvent::DiscreteUpdateCallback (#20591)
  • drake::systems::DiscreteUpdateEvent::DiscreteUpdateEvent overloads taking legacy callback type signatures (#20591)
  • drake::systems::DiscreteUpdateEvent::SystemCallback (#20591)
  • drake::systems::PublishEvent::PublishCallback (#20591)
  • drake::systems::PublishEvent::PublishEvent overloads taking legacy callback type signatures (#20591)
  • drake::systems::PublishEvent::SystemCallback (#20591)
  • drake::systems::UnrestrictedUpdateEvent::SystemCallback (#20591)
  • drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateCallback (#20591)
  • drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateEvent overloads taking legacy callback type signatures (#20591)
  • The @clp external (#20592)
  • The @gym_py external (#20592)
  • drake::multibody::UnitInertia::SolidCylinder two-argument form (#20593)
  • drake::multibody::UnitInertia::SolidCylinderAboutEnd two-argument overload (#20593)
  • The following functions’ semantics have changed even though their signature have not:
    • drake::multibody::UnitInertia::AxiallySymmetric now requires a normalized unit vector (#20593)
    • drake::multibody::UnitInertia::SolidCapsule three-argument form now requires a normalized unit vector (#20593)
    • drake::multibody::UnitInertia::SolidCylinder three-argument form now requires a normalized unit vector (#20593)
    • drake::multibody::UnitInertia::SolidCylinderAboutEnd three-argument form now requires a normalized unit vector (#20593)
    • drake::multibody::UnitInertia::StraightLine now requires a normalized unit vector (#20593)
    • drake::multibody::UnitInertia::ThinRod now requires a normalized unit vector (#20593)


This release provides pre-compiled binaries named drake-1.24.0-{focal|jammy|mac|mac-arm64}.tar.gz. See Stable Releases for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of SNOPT as part of the Mathematical Program toolbox. Thanks to Philip E. Gill and Elizabeth Wong for their kind support.