Drake v1.52.0

Back to Release Notes

Announcements

  • Drake now officially supports Amazon Linux 2023 when installing via pip (#24250).
  • Drake now offers pre-release beta support for Ubuntu 26.04 (“Resolute”) (#24378).
    • We do not provide stable release binaries attached to this release, but nightly binaries are available and building from source should work.
  • Drake no longer supports Ubuntu 22.04 (“Jammy”). End of life timelines are documented as part of the Supported Configurations.
  • Drake has upgraded minimum requirements for supported versions:
  • As previously announced, Drake is switching to a new AutoDiff implementation (#23870).
    • As of this release, the new implementation is now the default (#24298).
    • Users can still opt-out back to the old implementation, via:
      • CMake builds: -DDRAKE_USE_EIGEN_LEGACY_AUTODIFF=ON.
      • Bazel builds: --@drake//tools/flags:use_eigen_legacy_autodiff=True.
    • On 2026-07-01 the old implementation will be removed.
  • The drake-apt site at https://drake-apt.csail.mit.edu is deprecated (#24282).
    • The site will continue to be updated with stable releases for Ubuntu 24.04 (“Noble”) for the next two years, but will not add support for newer versions of Ubuntu.
    • Instead of using the drake-apt site, users should switch to directly installing the *.deb package attached to Drake releases. See drake_cmake_installed_apt for an example.
  • Drake has added more decoration to fmt_eigen default layout (#24363).
    • Specifically, the default format now contains brackets and commas. Add the “#” format spec option to opt-out back to the prior behavior.
    • fmt_eigen now also supports fmt’s range format specs “s”, “?s”, and “n”.
    • Consider these changes in code that uses fmt_eigen:
      • Remove brackets from hand-written format strings surrounding a formatted Eigen, because it’s built-in now.
      • Remove calls to transpose() within fmt_eigen(vec.transpose()) because the default format no longer has unwanted newlines for column vectors.
      • Note that fmt::to_string(fmt_eigen(thing)) now has different output; use fmt::format("{:#}", fmt_eigen(thing)) to restore the original formatting.

Previously announced

  • Docker images are deprecated and will no longer be published after 2026-06-01 (#24048).

Breaking changes since v1.51.1

  • The drake/common/text_logging.h header no longer includes <spdlog/spdlog.h> directly (#24202).
    • Instead, we provide a re-implementation with a subset of the same API. Code that was using rare parts of the spdlog API may now fail to build.
    • For downstream code that manipulates log levels, use drake::logging::level to configure log severity (#24201).
    • Code that needs to adjust the logging sink may continue to include drake/common/text_logging_spdlog.h and use the functions therein to adjust log settings.
    • Other than text_logging_spdlog.h, spdlog should now be considered a private implementation detail of Drake.

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

Changes since v1.51.1

Dynamical Systems

New features

  • None

Fixes

  • Fix MultilayerPerceptron vector-indexing contract violation (#24283)
  • Reject malformed event periods at declaration time (#24288)

Mathematical Program

New features

  • None

Fixes

  • None

Multibody Dynamics and Geometry

New features

  • Allow CENIC to accept nested diagrams (#24207)
  • Allow using CENIC on diagrams without SceneGraph (#24245)
  • Implement weld constraint for CENIC (#24174)

Fixes

  • Allow geometry names through RenderEngineGltfClient (#24209)
  • Rewrite internal geometry memoization for thread-safety and C++20 (#24265)
  • CENIC accepts 0-duration step as no-op (#24338)

Planning

New features

  • None

Fixes

  • Fix IrisNp2 constraint tolerance truncation in the RaySampler (#24241)
  • Fix IrisNp2 to draw additional samples if the user requests more than the number needed for the probabilistic certificate (#24243)

Tutorials and examples

  • None

Miscellaneous features and fixes

  • Add more decoration to fmt_eigen default layout (#24363)
  • Provide scalar format strings for fmt_eigen (#24349)
  • Fix default precision of fmt_eigen floating point (#24351)
  • Change default “use eigen legacy autodiff” to false (#24298)
  • Move spdlog to an implementation detail (#24202)
  • Change symbolic::Variable::Id to be an object, not a size_t (#24333)
  • Widen symbolic::Variable::Id to 128 bits + random entropy (#24331)
  • Add StackedTrajectory::children accessor (#24311)

pydrake bindings

New features

  • Make pydrake.polynomial.Polynomial picklable (#24271)
  • Make pydrake.symbolic.Variable picklable (#24320)
  • Make pydrake.trajectories.BezierCurve picklable (#24286)
  • Make pydrake.trajectories.CompositeTrajectory picklable (#24287)
  • Make pydrake.trajectories.DiscreteTimeTrajectory picklable (#24296)
  • Make pydrake.trajectories.PathParameterizedTrajectoy picklable (#24295)
  • Make pydrake.trajectories.PiecewisePolynomial picklable (#24273)
  • Make pydrake.trajectories.PiecewisePose picklable (#24322)
  • Make pydrake.trajectories.PiecewiseQuaternionSlerp picklable (#24322)
  • Make pydrake.trajectories.StackedTrajectory picklable (#24303)

Fixes

  • Bind pydrake.geometry.SceneGraphInspector.GetParentFrame (#24332)
  • Bind pydrake.multibody.plant.BaseBodyJointType (#24294)
  • Bind pydrake.multibody.plant.MultibodyPlant.GetBaseBodyJointType (#24294)
  • Bind pydrake.multibody.plant.MultibodyPlant.SetBaseBodyJointType (#24294)
  • Bind pydrake.symbolic.Variable default constructor (#24330)

Build system

  • CMake builds now respect the CMAKE_Fortran_COMPILER setting (#24249)
  • Bazel builds now respect the FC environment variable (#24249)
  • Install Python importlib metadata (#24342)
  • Enable OpenMP by default on Linux (#24370)

Build dependencies

  • Add dependency on ca-certificates to our Ubuntu tar.gz binary releases (#24398)
  • Add dependencies on build-essential, ca-certificates, cmake, and pkg-config to our APT package releases (#24398, #24399)
  • Support user-provided zlib on macOS (#24254)
  • Move libclang out of default source prereqs on Ubuntu (#24300)
  • Update crate_universe to latest (#24324)
  • Update python venv to latest (#24334)
  • Update dependency apple_support to 2.5.2 (#24313)
  • Update dependency bazel to 9.0.2 (#24379)
  • Update dependency bazel_features to 1.44.0 (#24317)
  • Update dependency clang-format to 21.1.8 (#24344)
  • Update dependency clp_internal to 1.17.11 (#24323)
  • Update dependency coinutils_internal to 2.11.13 (#24323)
  • Update dependency common_robotics_utilities_internal to latest commit (#24323)
  • Update dependency curl_internal to 8.19.0 (#24325)
  • Update dependency dm_control_internal to 1.0.38 (#24323)
  • Update dependency gurobi to 13.0.1 (#24234)
  • Update dependency gz_math_internal to 9.1.0 (#24326)
  • Update dependency libpng_internal to 1.6.56 (#24323)
  • Update dependency mujoco_menagerie_internal to latest commit (#24323)
  • Update dependency nasm to 2.16.03.bcr.3 (#24314)
  • Update dependency rules_rust to 0.69.0 (#24257)
  • Update dependency rules_shell to 0.7.1 (#24316)
  • Update dependency tinygltf to 3.0.0 (#24327)
  • Update dependency tinyobjloader_internal to latest commit (#24328)
  • Update dependency toolchains_llvm to 1.7.0 (#24344)
  • Update dependency uwebsockets_internal to 20.76.0 (#24323)
  • Update dependency voxelized_geometry_tools_internal to latest commit (#24348)
  • Update dependency vtk_internal to latest commit (#24329)
  • Update supported Clang on Ubuntu to 20 (#24275)
  • Update supported macOS CMake to 4.3 (#24277)
  • Update supported Xcode on macOS Tahoe to 26.4 (#24277)

Newly-deprecated APIs

  • DRAKE_FMT8_CONST (#24223)
  • HAVE_SPDLOG (#24253)
  • drake::fmt_runtime (#24223)
  • drake::fmt_streamed (#24223)
  • drake::logging::kHaveSpdlog (#24253)
  • drake::multibody::DifferentialInverseKinematicsStatus::operator<< (#24252)
  • drake::ostream_formatter (#24223)
  • drake::solvers::IntervalBinning::operator<< (#24258)
  • drake::solvers::MathematicalProgram::operator<< (#24258)
  • drake::solvers::SolutionResult::operator<< (#24258)
  • drake::symbolic::Environment::operator<< (#24258)
  • drake::symbolic::Expression::operator<< (#24258)
  • drake::symbolic::Formula::operator<< (#24258)
  • drake::symbolic::Variables::operator<< (#24258)
  • drake::systems::Context::operator<< (#24258)
  • drake::to_string(drake::FileSource) (#24255)
  • https://drake-apt.csail.mit.edu (#24282)

Removal of deprecated items

  • drake/math/jacobian.h header file (#24308)
  • drake::math::hessian() (#24308)
  • drake::math::jacobian() (#24308)

Notes

This release provides pre-compiled binaries named drake-1.52.0-{noble|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.