Announcements
- The default
DiscreteContactApproximation
for MultibodyPlant has been updated tokLagged
.- This approximation integrates engineering-quality, physics-based models into our convex formulations, providing strong convergence guarantees. The resulting SAP formulation is both robust and high-performing, while preserving physical accuracy. Refer to Castro et al., 2024 for further details. Keep in mind that this may cause different simulation results, and users who rely on a specific contact approximation might need to update their code and/or modeling assumptions (#21294).
- Drake now officially supports macOS 15 Sequoia (#22324).
- On macOS, Ipopt is now compiled from source instead of using Homebrew (#22331).
- One consequence is that MUMPS is no longer available as one of Ipopt’s linear solvers. The only available linear solver is SPRAL.
- For Bazel users, Drake has been ported to
Bazel modules instead of repository
rules (#22338, #22432).
- Please start porting your project to the new technology. See the drake_bazel_external example for how to use this from your project.
- Refer to the comments in drake/tools/flags/BUILD.bazel to see new flags you can use to govern the dependencies.
- After Drake has good support for modules, we plan to deprecate Drake’s repository rules for removal. For updates, follow #20731.
- When building from source with CMake, the default value for
WITH_USER_EIGEN
andWITH_USER_FMT
andWITH_USER_SPDLOG
is nowON
. In other words, CMake will usefind_package
to locate dependencies, instead ofpkg-config
(#22421). - YAML load/save can now handle bytes and paths (#22288, #22318).
- Drake now uses AVX512 instructions (when available) for hand-coded Highway (SIMD) functions. (#22423). To opt-out for reproducible results, see DRAKE_DISABLE_CPU_FEATURES.
Breaking changes since v1.36.0
InitialValueProgram
changed the data type of some static constants (#22358)- Remove LinearModelPredictiveControl (#22306)
- If downstream C++ code calls RenderEngine::Clone and the runtime type of the RenderEngine is a downstream Python subclass, then the call will now throw an exception. The C++ call must be updated to opt-in to the shared_ptr template argument. (#22353)
InverseDynamicsController::get_output_port_control()
now reports the actuation on joint actuators instead of generalized forces on all joints. The generalized forces on all joints are still reported, but throughget_output_port_generalized_force()
(#22315)
Refer to our Drake Stability Guidelines for our policy on API changes.
Changes since v1.36.0
Dynamical Systems
New features
- Add SparseMatrixGain as a primitive system (#22314)
- Add DiagramBuilder overloads for shared_ptr (#22347)
- Add LuenbergerObserver and KalmanFilter support for shared_ptr (#22351)
- Add PidControlledSystem and RgbdSensorDiscrete support for shared_ptr (#22347)
- Add SteadyStateKalmanFilter overload to accept the context by-const-ref (#22351)
Fixes
- Fix JointStiffnessController to output actuation instead of generalized_force (#22329)
- Fix InverseDynamicsController to output actuation instead of generalized_force (#22315)
Mathematical Program
New features
- Add MathematicalProgram::AddQuadraticCost w*‖x-x_d‖² (#22424)
- SolverOptions is serializable to/from YAML (#22078)
Fixes
- Change solver names to upstream’s preferred case (#22407)
- Fix MobyLCPSolver to use Drake logging not cerr (#22359)
- IpoptSolver by default now uses SPRAL (not MUMPS) (#22385)
- Relax the tolerance in IpoptSolver (#22426)
Multibody Dynamics and Geometry
New features
- Add a Parser::scene_graph() accessor (#22317)
- Implement
ref
for joints in MuJoCo parser (#22446) - Add functionality to create Convex shapes from vertices and enable geometry::VPolytope to use it to create its corresponding Convex shape. (#22390, #22442)
- AddUnitQuaternionConstraintOnPlant also adds the constraint that quaternion variables lie in [-1,1] (#22373)
- Implement AddMultibodyPlantConstraints() that maps from the constraints used in MultibodyPlant to the constraints used in MathematicalProgram (#22327)
- Use AddMultibodyPlantConstraints in InverseKinematics (#22361)
- Add RenderEngine support for shared_ptr (#22353)
Fixes
- Fix “more than one orientation” error in mujoco parser (#22387)
- Fix a throw from RotationalInertia in debug mode (#22401)
- Improve Mujoco parser’s error message for “size from mesh” (#22389)
- Make SAP the default discrete contact solver (#21294)
Planning
New features
- None
Fixes
- None
Tutorials and examples
- None
Miscellaneous features and fixes
- Improvements to YAML serialization:
- Add PiecewiseConstantCurvatureTrajectory (#22214)
pydrake bindings
New features
- Add binding for MultibodyPlant::GetActuationFromArray() (#22356)
Fixes
Build system
- Officially support macOS 15 Sequoia (#22324)
- The command line option
--define=DRAKE_WERROR=ON
no longer has any effect (#22335) - The
DRAKE_OS
environment variable no longer has any effect (#22432) - Use AVX512 instructions when available (#22423)
Build dependencies
- Require Bazel >= 7.4 (#22305)
- Use
MODULE.bazel
for all dependencies (#22338)- Modular Bazel builds use eigen, fmt, spdlog from bzlmod by default (#22432)
- CMake builds prefer find_package over pkg-config (#22421)
- Provide new Bazel flag to opt-out of spdlog entirely (#22432)
- Provide new Bazel flags to control solver dependencies (#22393)
- Add
rules_java
external (#22305) - Add
rules_shell
external (#22305) - Use
ipopt_internal
on macOS (previously was Ubuntu-only) (#22331) - Use
py_cc_toolchain
for configuring pybind11 (#22346) - Update
styleguide
to latest commit (#22409) - Upgrade
abseil_cpp_internal
to latest commit (#22375, #22411) - Upgrade
crate_universe
to latest (#22310) - Upgrade
crate_universe
to latest (#22375) - Upgrade
curl_internal
to latest release 8.11.1 (#22376) - Upgrade
dm_control_internal
to latest release 1.0.26 (#22375) - Upgrade
drake_models
to latest commit (#22321, #22408) - Upgrade
ipopt_internal
to latest release 3.14.17 (#22388) - Upgrade
lcm
to latest release v1.5.1 (#22458) - Upgrade
mypy_internal
to latest release 1.14.1 (#22375) - Upgrade
rules_rust
to latest release 0.56.0 (#22319) - Upgrade
rules_cc
to latest release 0.1.0 – for MODULE only, not WORKSPACE (#22432) - Upgrade
tinygltf_internal
to latest release 2.9.4 (#22375) - Upgrade
vtk_internal
to latest commit (#22384) - Remove vendored
libcrypt
from wheel builds (#22392) - (macOS only) Upgrade Python venv lockfile to latest versions (#22381)
Newly-deprecated APIs
- Subclassing
drake::multibody::MultibodyPlant
(#22397) - Setting the
drake::solvers::IpoptSolver
solver option namedlinear_solver
to the valuemumps
(#22385) drake::solvers::MathematicalProgram::GetSolverOptionsDouble()
(#22078)drake::solvers::MathematicalProgram::GetSolverOptionsInt()
(#22078)drake::solvers::MathematicalProgram::GetSolverOptionsStr()
(#22078)drake::solvers::MobyLCPSolver::SetLoggingEnabled
(#22359)drake::solvers::SolverOptions::CheckOptionKeysForSolver()
(#22078)drake::solvers::SolverOptions::GetOptionsDouble()
(#22078)drake::solvers::SolverOptions::GetOptionsInt()
(#22078)drake::solvers::SolverOptions::GetOptionsStr()
(#22078)drake::solvers::SolverOptions::GetOptions()
(#22078)drake::solvers::SolverOptions::GetSolverIds()
(#22078)drake::solvers::SolverOptions::common_solver_options()
(#22078)drake::solvers::SolverOptions::get_max_threads()
(#22078)drake::solvers::SolverOptions::get_print_file_name()
(#22078)drake::solvers::SolverOptions::get_print_to_console()
(#22078)drake::solvers::SolverOptions::get_standalone_reproduction_file_name()
(#22078)drake::solvers::SolverOptions::operator<<()
(#22078)drake::solvers::to_string(const &SolverOptions)
(#22078)drake::systems::controllers::JointStiffnessController::get_output_port_generalized_force()
(#22329)drake::systems::controllers::JointStiffnessController
output port namedgeneralized_force
(#22329)drake::trajectories::Trajectory
virtual interface for subclasses (#22395)- Subclasses are no longer allowed to override public virtual methods. They
must now override the NVI (“non-virtual interface”) protected methods, e.g.,
do_cols()
instead ofcols()
.
- Subclasses are no longer allowed to override public virtual methods. They
must now override the NVI (“non-virtual interface”) protected methods, e.g.,
pydrake.common.yaml.yaml_load_typed
behavior with certain implicit primitive conversions (#22410); the following behaviors are deprecated:- writing a bool in a document and loading it into an int;
- writing a bool in a document and loading it into a float;
- writing a bool in a document and loading it into a string;
- writing an int in a document and loading it into a bool;
- writing an int in a document and loading it into a string;
- writing a float in a document and loading it into a bool;
- writing a non-integral float in a document and loading it into an int;
- writing a float in a document and loading it into a string;
- writing a string in a document and loading it into a bool.
@python//:python
label in Bazel (#22346)@python//:python_direct_link
label in Bazel (#22346)- The
@cc
external (#22335) - The
@common_robotics_utilities
external (#22334) - The
@ipopt
external (#22331) - The
@voxelized_geometry_tools
external (#22334)
Removal of deprecated items
//manipulation/util:meshlab_to_sdf
(#22368)//manipulation/util:show_model
(#22368)drake::geometry::ReadObjToTriangleSurfaceMesh
overload that takes astd::istream
(#21914, #22368)drake::multibody::FrameBase
(#21891, #22368)drake::multibody::MultibodyPlant::set_discrete_contact_solver()
(#20672, #21294)drake::systems::sensors::RgbdSensor::X_BC
(#21937, #22368)drake::systems::sensors::RgbdSensor::X_BD
(#21937, #22368)drake::systems::sensors::RgbdSensor::X_PB
(#21937, #22368)drake::systems::sensors::RgbdSensor::color_render_camera
(#21937, #22368)drake::systems::sensors::RgbdSensor::depth_camera_info
(#21937, #22368)drake::systems::sensors::RgbdSensor::depth_render_camera
(#21937, #22368)drake::systems::sensors::RgbdSensor::parent_frame_id
(#21937, #22368)
Notes
This release provides pre-compiled binaries named
drake-1.37.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.