Drake v1.37.0

Back to Release Notes

Announcements

  • The default DiscreteContactApproximation for MultibodyPlant has been updated to kLagged.
    • 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 and WITH_USER_FMT and WITH_USER_SPDLOG is now ON. In other words, CMake will use find_package to locate dependencies, instead of pkg-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 through get_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 support for std::filesystem::path and pathlib.Path (#22288)
    • Add support for drake::FileSource (#22288)
    • Add support for YAML’s !!binary tag (#22318)
      • In C++ the type is std::vector<std::byte>.
      • In Python the type is bytes.
    • Fix Python yaml_dump_typed for Union on str (#22394)
  • 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 named linear_solver to the value mumps (#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 named generalized_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 of cols().
  • 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 a std::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.