Skip to content

Commit

Permalink
[doc] Add release notes v1.37.0 (#22413)
Browse files Browse the repository at this point in the history
Co-Authored-By: Jeremy Nimmer <[email protected]>
  • Loading branch information
xuchenhan-tri and jwnimmer-tri authored Jan 15, 2025
1 parent 0965a43 commit 707ae4c
Show file tree
Hide file tree
Showing 3 changed files with 342 additions and 5 deletions.
10 changes: 5 additions & 5 deletions doc/_pages/from_binary.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,18 @@ Mac are available to download as attachments from Drake's GitHub
[releases](https://github.com/RobotLocomotion/drake/releases) page.

The most recent release is
[v1.36.0](https://github.com/RobotLocomotion/drake/releases/tag/v1.36.0):
[v1.37.0](https://github.com/RobotLocomotion/drake/releases/tag/v1.37.0):

* [https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-jammy.tar.gz](https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-jammy.tar.gz)
* [https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-noble.tar.gz](https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-noble.tar.gz)
* https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-mac-arm64.tar.gz (for arm64)
* [https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-jammy.tar.gz](https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-jammy.tar.gz)
* [https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-noble.tar.gz](https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-noble.tar.gz)
* https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-mac-arm64.tar.gz (for arm64)

Users of macOS must download using a command-line tool such as ``curl`` instead
of using a web browser, to avoid hassles from Gatekeeper checks for malicious
software. For example:

```
curl -fsSLO https://github.com/RobotLocomotion/drake/releases/download/v1.36.0/drake-1.36.0-mac-arm64.tar.gz
curl -fsSLO https://github.com/RobotLocomotion/drake/releases/download/v1.37.0/drake-1.37.0-mac-arm64.tar.gz
```

### Use as a C++ library
Expand Down
333 changes: 333 additions & 0 deletions doc/_release-notes/v1.37.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,333 @@
---
title: Drake v1.37.0
date: 2025-01-15
released: 2025-01-15
---

# 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](https://arxiv.org/abs/2312.03908)
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][_#21294]).
* Drake now officially supports macOS 15 Sequoia ([#22324][_#22324]).
* On macOS, Ipopt is now compiled from source instead of using Homebrew ([#22331][_#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](https://bazel.build/external/module) instead of repository
rules ([#22338][_#22338], [#22432][_#22432]).
* Please start porting your project to the new technology. See the
[drake_bazel_external](https://github.com/RobotLocomotion/drake-external-examples/tree/main/drake_bazel_external)
example for how to use this from your project.
* Refer to the comments in
[drake/tools/flags/BUILD.bazel](https://github.com/RobotLocomotion/drake/blob/master/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][_#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][_#22421]).
* YAML load/save can now handle bytes and paths ([#22288][_#22288], [#22318][_#22318]).
* Drake now uses AVX512 instructions (when available) for hand-coded Highway (SIMD) functions. ([#22423][_#22423]).
To opt-out for reproducible results, see
<a href="/doxygen_cxx/group__environment__variables.html">DRAKE_DISABLE_CPU_FEATURES</a>.

# Breaking changes since v1.36.0

* `InitialValueProgram` changed the data type of some static constants ([#22358][_#22358])
* Remove LinearModelPredictiveControl ([#22306][_#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][_#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][_#22315])

Refer to our [Drake Stability Guidelines](/stable.html) for our policy
on API changes.

# Changes since v1.36.0

## Dynamical Systems

<!-- <relnotes for systems go here> -->



New features

* Add SparseMatrixGain as a primitive system ([#22314][_#22314])
* Add DiagramBuilder overloads for shared_ptr ([#22347][_#22347])
* Add LuenbergerObserver and KalmanFilter support for shared_ptr ([#22351][_#22351])
* Add PidControlledSystem and RgbdSensorDiscrete support for shared_ptr ([#22347][_#22347])
* Add SteadyStateKalmanFilter overload to accept the context by-const-ref ([#22351][_#22351])

Fixes

* Fix JointStiffnessController to output actuation instead of generalized_force ([#22329][_#22329])
* Fix InverseDynamicsController to output actuation instead of generalized_force ([#22315][_#22315])

## Mathematical Program

<!-- <relnotes for solvers go here> -->

New features

* Add MathematicalProgram::AddQuadraticCost w*‖x-x_d‖² ([#22424][_#22424])
* SolverOptions is serializable to/from YAML ([#22078][_#22078])

Fixes

* Change solver names to upstream's preferred case ([#22407][_#22407])
* Fix MobyLCPSolver to use Drake logging not cerr ([#22359][_#22359])
* IpoptSolver by default now uses SPRAL (not MUMPS) ([#22385][_#22385])
* Relax the tolerance in IpoptSolver ([#22426][_#22426])

## Multibody Dynamics and Geometry

<!-- <relnotes for geometry,multibody go here> -->

New features

* Add a Parser::scene_graph() accessor ([#22317][_#22317])
* Implement `ref` for joints in MuJoCo parser ([#22446][_#22446])
* Add functionality to create Convex shapes from vertices and enable geometry::VPolytope to use it to create its corresponding Convex shape. ([#22390][_#22390], [#22442][_#22442])
* AddUnitQuaternionConstraintOnPlant also adds the constraint that quaternion variables lie in [-1,1] ([#22373][_#22373])
* Implement AddMultibodyPlantConstraints() that maps from the constraints used in MultibodyPlant to the constraints used in MathematicalProgram ([#22327][_#22327])
* Use AddMultibodyPlantConstraints in InverseKinematics ([#22361][_#22361])
* Add RenderEngine support for shared_ptr ([#22353][_#22353])

Fixes

* Fix "more than one orientation" error in mujoco parser ([#22387][_#22387])
* Fix a throw from RotationalInertia in debug mode ([#22401][_#22401])
* Improve Mujoco parser's error message for "size from mesh" ([#22389][_#22389])
* Make SAP the default discrete contact solver ([#21294][_#21294])

## Planning

<!-- <relnotes for planning go here> -->


New features

* None

Fixes

* None

## Tutorials and examples

<!-- <relnotes for examples,tutorials go here> -->

* None

## Miscellaneous features and fixes

<!-- <relnotes for common,math,lcm,lcmtypes,manipulation,perception,visualization go here> -->

* Improvements to YAML serialization:
* Add support for `std::filesystem::path` and `pathlib.Path` ([#22288][_#22288])
* Add support for `drake::FileSource` ([#22288][_#22288])
* Add support for YAML's `!!binary` tag ([#22318][_#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][_#22394])
* Add PiecewiseConstantCurvatureTrajectory ([#22214][_#22214])

## pydrake bindings

<!-- <relnotes for bindings go here> -->

New features

* Add binding for MultibodyPlant::GetActuationFromArray() ([#22356][_#22356])

Fixes

* Fix diagram memory leaks ([#22221][_#22221], [#22343][_#22343])

## Build system

<!-- <relnotes for cmake,doc,setup,third_party,tools go here> -->

* Officially support macOS 15 Sequoia ([#22324][_#22324])
* The command line option `--define=DRAKE_WERROR=ON` no longer has any effect ([#22335][_#22335])
* The `DRAKE_OS` environment variable no longer has any effect ([#22432][_#22432])
* Use AVX512 instructions when available ([#22423][_#22423])

## Build dependencies

<!-- <relnotes for workspace go here> -->

* Require Bazel >= 7.4 ([#22305][_#22305])
* Use `MODULE.bazel` for all dependencies ([#22338][_#22338])
* Modular Bazel builds use eigen, fmt, spdlog from bzlmod by default ([#22432][_#22432])
* CMake builds prefer find_package over pkg-config ([#22421][_#22421])
* Provide new Bazel flag to opt-out of spdlog entirely ([#22432][_#22432])
* Provide new Bazel flags to control solver dependencies ([#22393][_#22393])
* Add `rules_java` external ([#22305][_#22305])
* Add `rules_shell` external ([#22305][_#22305])
* Use `ipopt_internal` on macOS (previously was Ubuntu-only) ([#22331][_#22331])
* Use `py_cc_toolchain` for configuring pybind11 ([#22346][_#22346])
* Update `styleguide` to latest commit ([#22409][_#22409])
* Upgrade `abseil_cpp_internal` to latest commit ([#22375][_#22375], [#22411][_#22411])
* Upgrade `crate_universe` to latest ([#22310][_#22310])
* Upgrade `crate_universe` to latest ([#22375][_#22375])
* Upgrade `curl_internal` to latest release 8.11.1 ([#22376][_#22376])
* Upgrade `dm_control_internal` to latest release 1.0.26 ([#22375][_#22375])
* Upgrade `drake_models` to latest commit ([#22321][_#22321], [#22408][_#22408])
* Upgrade `ipopt_internal` to latest release 3.14.17 ([#22388][_#22388])
* Upgrade `lcm` to latest release v1.5.1 ([#22458][_#22458])
* Upgrade `mypy_internal` to latest release 1.14.1 ([#22375][_#22375])
* Upgrade `rules_rust` to latest release 0.56.0 ([#22319][_#22319])
* Upgrade `rules_cc` to latest release 0.1.0 -- for MODULE only, not WORKSPACE ([#22432][_#22432])
* Upgrade `tinygltf_internal` to latest release 2.9.4 ([#22375][_#22375])
* Upgrade `vtk_internal` to latest commit ([#22384][_#22384])
* Remove vendored `libcrypt` from wheel builds ([#22392][_#22392])
* (macOS only) Upgrade Python venv lockfile to latest versions ([#22381][_#22381])

## Newly-deprecated APIs

* Subclassing `drake::multibody::MultibodyPlant` ([#22397][_#22397])
* Setting the `drake::solvers::IpoptSolver` solver option named `linear_solver` to the value `mumps` ([#22385][_#22385])
* `drake::solvers::MathematicalProgram::GetSolverOptionsDouble()` ([#22078][_#22078])
* `drake::solvers::MathematicalProgram::GetSolverOptionsInt()` ([#22078][_#22078])
* `drake::solvers::MathematicalProgram::GetSolverOptionsStr()` ([#22078][_#22078])
* `drake::solvers::MobyLCPSolver::SetLoggingEnabled` ([#22359][_#22359])
* `drake::solvers::SolverOptions::CheckOptionKeysForSolver()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::GetOptionsDouble()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::GetOptionsInt()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::GetOptionsStr()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::GetOptions()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::GetSolverIds()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::common_solver_options()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::get_max_threads()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::get_print_file_name()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::get_print_to_console()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::get_standalone_reproduction_file_name()` ([#22078][_#22078])
* `drake::solvers::SolverOptions::operator<<()` ([#22078][_#22078])
* `drake::solvers::to_string(const &SolverOptions)` ([#22078][_#22078])
* `drake::systems::controllers::JointStiffnessController::get_output_port_generalized_force()` ([#22329][_#22329])
* `drake::systems::controllers::JointStiffnessController` output port named `generalized_force` ([#22329][_#22329])
* `drake::trajectories::Trajectory` virtual interface for subclasses ([#22395][_#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][_#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][_#22346])
* `@python//:python_direct_link` label in Bazel ([#22346][_#22346])
* The `@cc` external ([#22335][_#22335])
* The `@common_robotics_utilities` external ([#22334][_#22334])
* The `@ipopt` external ([#22331][_#22331])
* The `@voxelized_geometry_tools` external ([#22334][_#22334])

## Removal of deprecated items

* `//manipulation/util:meshlab_to_sdf` ([#22368][_#22368])
* `//manipulation/util:show_model` ([#22368][_#22368])
* `drake::geometry::ReadObjToTriangleSurfaceMesh` overload that takes a `std::istream` ([#21914][_#21914], [#22368][_#22368])
* `drake::multibody::FrameBase` ([#21891][_#21891], [#22368][_#22368])
* `drake::multibody::MultibodyPlant::set_discrete_contact_solver()` ([#20672][_#20672], [#21294][_#21294])
* `drake::systems::sensors::RgbdSensor::X_BC` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::X_BD` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::X_PB` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::color_render_camera` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::depth_camera_info` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::depth_render_camera` ([#21937][_#21937], [#22368][_#22368])
* `drake::systems::sensors::RgbdSensor::parent_frame_id` ([#21937][_#21937], [#22368][_#22368])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.37.0) named
``drake-1.37.0-{jammy|noble|mac-arm64}.tar.gz``. See [Stable Releases](/from_binary.html#stable-releases) for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of [SNOPT](https://ccom.ucsd.edu/~optimizers/solvers/snopt/) as part of the
[Mathematical Program toolbox](https://drake.mit.edu/doxygen_cxx/group__solvers.html). Thanks to
Philip E. Gill and Elizabeth Wong for their kind support.

<!-- <begin issue links> -->
[_#20672]: https://github.com/RobotLocomotion/drake/pull/20672
[_#20731]: https://github.com/RobotLocomotion/drake/pull/20731
[_#21294]: https://github.com/RobotLocomotion/drake/pull/21294
[_#21891]: https://github.com/RobotLocomotion/drake/pull/21891
[_#21914]: https://github.com/RobotLocomotion/drake/pull/21914
[_#21937]: https://github.com/RobotLocomotion/drake/pull/21937
[_#22078]: https://github.com/RobotLocomotion/drake/pull/22078
[_#22214]: https://github.com/RobotLocomotion/drake/pull/22214
[_#22221]: https://github.com/RobotLocomotion/drake/pull/22221
[_#22288]: https://github.com/RobotLocomotion/drake/pull/22288
[_#22305]: https://github.com/RobotLocomotion/drake/pull/22305
[_#22306]: https://github.com/RobotLocomotion/drake/pull/22306
[_#22310]: https://github.com/RobotLocomotion/drake/pull/22310
[_#22314]: https://github.com/RobotLocomotion/drake/pull/22314
[_#22315]: https://github.com/RobotLocomotion/drake/pull/22315
[_#22317]: https://github.com/RobotLocomotion/drake/pull/22317
[_#22318]: https://github.com/RobotLocomotion/drake/pull/22318
[_#22319]: https://github.com/RobotLocomotion/drake/pull/22319
[_#22321]: https://github.com/RobotLocomotion/drake/pull/22321
[_#22324]: https://github.com/RobotLocomotion/drake/pull/22324
[_#22327]: https://github.com/RobotLocomotion/drake/pull/22327
[_#22329]: https://github.com/RobotLocomotion/drake/pull/22329
[_#22331]: https://github.com/RobotLocomotion/drake/pull/22331
[_#22334]: https://github.com/RobotLocomotion/drake/pull/22334
[_#22335]: https://github.com/RobotLocomotion/drake/pull/22335
[_#22338]: https://github.com/RobotLocomotion/drake/pull/22338
[_#22343]: https://github.com/RobotLocomotion/drake/pull/22343
[_#22346]: https://github.com/RobotLocomotion/drake/pull/22346
[_#22347]: https://github.com/RobotLocomotion/drake/pull/22347
[_#22351]: https://github.com/RobotLocomotion/drake/pull/22351
[_#22353]: https://github.com/RobotLocomotion/drake/pull/22353
[_#22356]: https://github.com/RobotLocomotion/drake/pull/22356
[_#22358]: https://github.com/RobotLocomotion/drake/pull/22358
[_#22359]: https://github.com/RobotLocomotion/drake/pull/22359
[_#22361]: https://github.com/RobotLocomotion/drake/pull/22361
[_#22368]: https://github.com/RobotLocomotion/drake/pull/22368
[_#22373]: https://github.com/RobotLocomotion/drake/pull/22373
[_#22375]: https://github.com/RobotLocomotion/drake/pull/22375
[_#22376]: https://github.com/RobotLocomotion/drake/pull/22376
[_#22381]: https://github.com/RobotLocomotion/drake/pull/22381
[_#22384]: https://github.com/RobotLocomotion/drake/pull/22384
[_#22385]: https://github.com/RobotLocomotion/drake/pull/22385
[_#22387]: https://github.com/RobotLocomotion/drake/pull/22387
[_#22388]: https://github.com/RobotLocomotion/drake/pull/22388
[_#22389]: https://github.com/RobotLocomotion/drake/pull/22389
[_#22390]: https://github.com/RobotLocomotion/drake/pull/22390
[_#22392]: https://github.com/RobotLocomotion/drake/pull/22392
[_#22393]: https://github.com/RobotLocomotion/drake/pull/22393
[_#22394]: https://github.com/RobotLocomotion/drake/pull/22394
[_#22395]: https://github.com/RobotLocomotion/drake/pull/22395
[_#22397]: https://github.com/RobotLocomotion/drake/pull/22397
[_#22401]: https://github.com/RobotLocomotion/drake/pull/22401
[_#22407]: https://github.com/RobotLocomotion/drake/pull/22407
[_#22408]: https://github.com/RobotLocomotion/drake/pull/22408
[_#22409]: https://github.com/RobotLocomotion/drake/pull/22409
[_#22410]: https://github.com/RobotLocomotion/drake/pull/22410
[_#22411]: https://github.com/RobotLocomotion/drake/pull/22411
[_#22421]: https://github.com/RobotLocomotion/drake/pull/22421
[_#22423]: https://github.com/RobotLocomotion/drake/pull/22423
[_#22424]: https://github.com/RobotLocomotion/drake/pull/22424
[_#22426]: https://github.com/RobotLocomotion/drake/pull/22426
[_#22432]: https://github.com/RobotLocomotion/drake/pull/22432
[_#22442]: https://github.com/RobotLocomotion/drake/pull/22442
[_#22446]: https://github.com/RobotLocomotion/drake/pull/22446
[_#22458]: https://github.com/RobotLocomotion/drake/pull/22458
<!-- <end issue links> -->

<!--
Current oldest_commit b95c19c62d2eab2c2a6a3e37d11788e696b2111f (exclusive).
Current newest_commit 6e2350171d34d51cb66b8d5e520252a638c2729a (inclusive).
-->
4 changes: 4 additions & 0 deletions tools/release_engineering/relnotes.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@ def _format_commit(gh, drake, commit):
continue
severity = label["name"][len(label_needle):]
severities.append(severity)
else:
# If we failed to associate the commit with a PR, ask the user to
# manually check the label.
severities = ["check label"]
if severities == ["none"]:
return [], ["none"], ""

Expand Down

0 comments on commit 707ae4c

Please sign in to comment.