Announcements
- The default
DiscreteContactApproximationfor 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_EIGENandWITH_USER_FMTandWITH_USER_SPDLOGis nowON. In other words, CMake will usefind_packageto 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
InitialValueProgramchanged 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
reffor 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=ONno longer has any effect (#22335) - The
DRAKE_OSenvironment variable no longer has any effect (#22432) - Use AVX512 instructions when available (#22423)
Build dependencies
- Require Bazel >= 7.4 (#22305)
- Use
MODULE.bazelfor 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_javaexternal (#22305) - Add
rules_shellexternal (#22305) - Use
ipopt_internalon macOS (previously was Ubuntu-only) (#22331) - Use
py_cc_toolchainfor configuring pybind11 (#22346) - Update
styleguideto latest commit (#22409) - Upgrade
abseil_cpp_internalto latest commit (#22375, #22411) - Upgrade
crate_universeto latest (#22310) - Upgrade
crate_universeto latest (#22375) - Upgrade
curl_internalto latest release 8.11.1 (#22376) - Upgrade
dm_control_internalto latest release 1.0.26 (#22375) - Upgrade
drake_modelsto latest commit (#22321, #22408) - Upgrade
ipopt_internalto latest release 3.14.17 (#22388) - Upgrade
lcmto latest release v1.5.1 (#22458) - Upgrade
mypy_internalto latest release 1.14.1 (#22375) - Upgrade
rules_rustto latest release 0.56.0 (#22319) - Upgrade
rules_ccto latest release 0.1.0 – for MODULE only, not WORKSPACE (#22432) - Upgrade
tinygltf_internalto latest release 2.9.4 (#22375) - Upgrade
vtk_internalto latest commit (#22384) - Remove vendored
libcryptfrom 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::IpoptSolversolver option namedlinear_solverto 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::JointStiffnessControlleroutput port namedgeneralized_force(#22329)drake::trajectories::Trajectoryvirtual 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_typedbehavior 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//:pythonlabel in Bazel (#22346)@python//:python_direct_linklabel in Bazel (#22346)- The
@ccexternal (#22335) - The
@common_robotics_utilitiesexternal (#22334) - The
@ipoptexternal (#22331) - The
@voxelized_geometry_toolsexternal (#22334)
Removal of deprecated items
//manipulation/util:meshlab_to_sdf(#22368)//manipulation/util:show_model(#22368)drake::geometry::ReadObjToTriangleSurfaceMeshoverload 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.