Drake v1.51.0

Back to Release Notes

Announcements

  • Add drake::logging::level aliases in preparation for changes to Drake’s logging API (#24201).
    • For downstream code that uses drake/common/text_logging.h and manipulates log levels, this provides a glidepath from using spdlog::level to configure log severity to its future replacement drake::logging::level.
    • In this release, the levels are aliases into spdlog. In the next release, Drake’s levels will become de-coupled from spdlog. Users are advised to port to the new aliases to prevent disruption.
  • The TAMSI solver is deprecated and will be removed from Drake on 2026-09-01 (#24089).

Previously announced

  • This release will be the last version that supports Ubuntu 22.04 (“Jammy”).
    • As a result, we will have some new lower bounds on supported versions starting with the next release (v1.52.0):
      • C++ standard >= 23
      • GCC >= 13
      • Clang >= 19
      • Python >= 3.12
      • fmt >= 9.1
      • spdlog >= 1.12
    • End of life timelines are documented as part of the Supported Configurations.
  • Docker images are deprecated are will no longer be published after 2026-06-01 (#24048).
  • Drake is switching to a new AutoDiff implementation (#23870).
    • The old implementation is still the default, but on 2026-04-01 the default will change to the new implementation, and on 2026-07-01 the old implementation will be removed.
    • Users should experiment with the new implementation as soon as practical, to discover any problems early and file Drake issues when relevant. To switch to the new implementation:
      • CMake builds: -DDRAKE_USE_EIGEN_LEGACY_AUTODIFF=OFF.
      • Bazel builds: --@drake//tools/flags:use_eigen_legacy_autodiff=False.

Breaking changes since v1.50.0

  • MultibodyPlant now enforces effort limits in all plant modes (#24115).
    • When computing a dynamic step, actuation effort limits set on a MultibodyPlant are always enforced now via clamping, whether in continuous-time mode or discrete-time mode (and with all discrete solvers). Previously, effort limits were only enforced when an active PD controller was used with the SAP solver.
    • To remove any unwanted limit(s), users who don’t want effort limiting can opt-out specific joints with joint.set_effort_limit(np.inf) or all joints with plant.RemoveAllJointActuatorEffortLimits().

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

Changes since v1.50.0

Dynamical Systems

New features

  • None

Fixes

  • None

Mathematical Program

New features

  • None

Fixes

  • None

Multibody Dynamics and Geometry

New features

  • MultibodyPlant supports continuous-time desired_state input ports (#24107)
  • Add JointActuator::set_effort_limit() (#24108)
  • Add MultibodyPlant::RemoveAllJointActuatorEffortLimits() (#24108)
  • Add p_BQ as a free variable in PositionConstraint (#23967)

Fixes

  • Enforce effort limits in all plant modes (#24115)
  • Refine CENIC feature support checks (#24079)
  • Fix a CENIC bug with joint index handling (#24100)

Planning

New features

  • None

Fixes

  • None

Tutorials and examples

  • None

Miscellaneous features and fixes

  • Add drake::logging::level aliases (#24201)
  • Fix LCM segfault on network misconfiguration (#24137)

pydrake bindings

New features

  • None

Fixes

  • Fix memory leaks due to event callbacks (#24117)
  • Add bindings for CenicIntegrator params (#24097)

Build system

  • Update supported Xcode to 26.3 (#24150)
  • Fix syntax errors in *.pyi files (#24127)

Build dependencies

  • Update dependency abseil_cpp_internal to 20260107.1 (#24178)
  • Update dependency apple_support to 2.3.0 (#24153)
  • Update dependency bazel_features to 1.42.0 (#24155)
  • Update dependency common_robotics_utilities_internal to latest commit (#23834)
  • Update dependency crate_universe to latest (#24182)
  • Update dependency drake_models to latest commit (#24178)
  • Update dependency eigen to 5.0.1.bcr.1 (#24156)
  • Update dependency gklib_internal to latest commit (#24178)
  • Update dependency implib_so_internal to latest commit (#24178)
  • Update dependency libpng_internal to 1.6.55 (#24178)
  • Update dependency libx11 to 1.8.12.bcr.5 (#24158)
  • Update dependency nlopt_internal to 2.10.1 (#24178)
  • Update dependency ruff_prebuilt to 0.15.0.1 (#24160)
  • Update dependency rules_cc to 0.2.17 (#24106)
  • Update dependency rules_java to 9.6.1 (#24163)
  • Update dependency rules_python to 1.9.0 (#24191, #24154)
  • Update dependency rules_rust to 0.69.0 (#24164)
  • Update dependency suitesparse_internal to 7.12.2 (#24178)
  • Update dependency tinyobjloader_internal to latest commit (#24178)
  • Update dependency uwebsockets_internal to 20.75.0 (#24178)
  • Update dependency voxelized_geometry_tools_internal to latest commit (#23834)
  • Update dependency vtk_internal to latest commit (#24181)
  • Update dependency zlib to 1.3.2 (#24159)
  • Update python venv to latest (#24184)

Newly-deprecated APIs

  • TAMSI solver (#24089)
  • drake::multibody::SpatialAcceleration::operator<< (#24195)
  • drake::multibody::SpatialForce::operator<< (#24195)
  • drake::multibody::SpatialMomentum::operator<< (#24195)
  • drake::multibody::SpatialVelocity::operator<< (#24195)
  • drake::perception::Fields::operator<< (#24093)
  • drake::solvers::Binding::operator<< (#24173)
  • drake::solvers::EvaluatorBase::operator<< (#24173)
  • drake::solvers::MixedIntegerRotationConstraintGenerator::Approach::operator<< (#24132)
  • drake::solvers::ProgramAttribute::operator<< (#24105)
  • drake::solvers::ProgramAttributes::operator<< (#24105)
  • drake::solvers::ProgramType::operator<< (#24105)
  • drake::solvers::SolverId::operator<< (#24132)
  • drake::systems::VectorBase::operator<< (#24187)

Removal of deprecated items

  • drake::geometry::GeometryProperties::operator<< (#23800, #24165)
  • drake::geometry::Rgba::operator<< (#23800, #24165)
  • drake::geometry::Role::operator<< (#23800, #24165)
  • drake::geometry::render::LightFrame::operator<< (#23800, #24165)
  • drake::geometry::render::LightType::operator<< (#23800, #24165)
  • drake::geometry::render::RenderLabel::operator<< (#23800, #24165)
  • drake::geometry::render::to_string(RenderLabel) (#23800, #24165)
  • drake::logging::get_disk_sink but only when included via drake/common/text_logging.h or if spdlog is disabled (#23815, #24166)
  • drake::solvers::MobyLCPSolver (#23776, #24165)

Notes

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