Drake v1.58.0

Back to Release Notes

Announcements

  • Drake now supports Xcode 27 (#25067).
  • The minimum supported macOS is now Tahoe (26) (#24988).
  • Keying an STL container (e.g., map, set, unordered_set, unordered_map) on drake::symbolic::Expression or drake::symbolic::Variable now requires additional syntax (#25014).
    • When using an ordered container (e.g., map, set), you must supply Expression::CompareLess (or Variable::CompareLess) as the Compare template argument.
    • When using an unordered container (e.g., unordered_map, unordered_set), you must supply Expression::CompareEqualTo (or Variable::CompareEqualTo) as the KeyEqual template argument.
    • The prior spelling (leaving the template argument at its default value) will continue to work during the 3-month deprecation period, but after that will fail to compile. (When using Xcode 27, no deprecation period is possible so it will break immediately without the change.)
    • Background: Newer libc++ introduced a map and set lookup optimization that requires std::less specializations to be equivalent to operator<. Any other behavior is non-conforming. For more context on the change, see the discussion on the LLVM issues #178847 and #179319. For Expression and Variable, their operator<s are used for logical comparison while their std::less specializations are used for structural comparison (and ditto for std::equal_to vs. operator==) so we must stop using the std::less specialization for containers and spell out the CompareLess functor instead.

Breaking changes since v1.57.0

  • None

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

Changes since v1.57.0

Dynamical Systems

New features

  • Add input_required option to PassThrough (#24929)

Fixes

  • Validate region of attraction SOS certificates (#25003)

Mathematical Program

New features

  • Support setting NLopt local solver and other options (#24996, #25002)
  • Add NloptSolver passthrough for nlopt_set_param (#25072)

Fixes

  • Restore support for solving quadratic programs with CLP (#25019, #25020, #25055)
  • Fix CSDP linesearch under small N (#25025)
  • Fix NLopt Solver Error Due to Vacuous Constraint Rows (#24981)
  • Ensure NLopt Returns Success = False for NaN Solutions (#25053)
  • Prove exact membership in VPolytope::PointInSet (#25069)

Multibody Dynamics and Geometry

New features

  • None

Fixes

  • Remove light limit (and streamline shaders) in RenderEngineGl (#24953)
  • Report nested URDF world-weld prefix errors via DiagnosticPolicy (#24965)
  • Report model directives errors via DiagnosticPolicy (#24938)
  • Throw an exception if CalcSpatialInertia frame is not in the plant (#24934)
  • Treat world body safely in joint-locking contact filter (#25082)

Planning

New features

  • Add CollisionChecker::CalcRobotClearances (#25073)

Fixes

  • Fix SceneGraphCollisionChecker signed distance gradient sign flip with padding (#25017)

Tutorials and examples

  • None

Miscellaneous features and fixes

  • Resolve a merge key whose source itself uses a merge key in yaml processing (#25085)
  • Prefer dedicated mathematical comparators over specializations (#25014)

pydrake bindings

New features

  • Switch default binder to nanobind for wheel builds (#24971)

Fixes

  • Fix yaml_load_typed for Optional and nested typing.List and typing.Dict (#25039)

Build system

  • Drake now supports Xcode 27 (#25067)
  • Prepare for Bazel 10 (#25065)
  • Improve handling of unstamped builds in version macros (#25005)

Build dependencies

  • Update Python venv to latest (#25046)
  • Update crate_universe to latest (#25044)
  • Update dependency apple_support to 2.9.1 (#25037)
  • Update dependency bazel to 9.3.0 (#25066)
  • Update dependency buildifier_prebuilt to 10.1.0 (#25033)
  • Update dependency curl_internal to 8.22.0 (#25050)
  • Update dependency dm_control_internal to 1.0.47 (#25043)
  • Update dependency doxygen_internal to 1.18.0 (#25031)
  • Update dependency fcl_internal to latest (#25006)
  • Update dependency glib to 2.82.2.bcr.11 (#25038)
  • Update dependency ipopt_internal to 3.14.20 (#25048)
  • Update dependency llvm to 0.8.24 (#25041)
  • Update dependency nanobind to 3.1.0 (#25007)
  • Update dependency patchelf to 0.19.1 (#25034)
  • Update dependency rules_cc to 0.2.25 (#25029)
  • Update dependency rules_jvm_external to 7.2 (#25077)
  • Update dependency rules_python to 2.3.4 (#25030)
  • Update dependency rules_rs to 0.0.112 (#25036)
  • Update dependency rust to 1.99.0 (#25084)
  • Update dependency scs_internal to 3.3.1 (#25047)
  • Update dependency sphinx to 8.2.3 (#24970)
  • Update dependency uwebsockets_internal to 20.80.0 (#25043)
  • Update dependency vtk_internal to latest commit (#25049)
  • Update dependency zlib to 1.3.2.bcr.2 (#25052)

Newly-deprecated APIs

  • std::less_to<drake::symbolic::Expression> specialization (#25014)
    • Instead, use drake::symbolic::Expression::CompareLess
  • std::equal_to<drake::symbolic::Expression> specialization (#25014)
    • Instead, use drake::symbolic::Expression::CompareEqualTo
  • std::less_to<drake::symbolic::Variable> specialization (#25014)
    • Instead, use drake::symbolic::Variable::CompareLess
  • std::equal_to<drake::symbolic::Variable> specialization (#25014)
    • Instead, use drake::symbolic::Variable::CompareEqualTo

Removal of deprecated items

  • None

Notes

This release provides pre-compiled binaries. See Installation 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.