From 707ae4c2db170eaf9285febc4ecb9c65f151eb10 Mon Sep 17 00:00:00 2001 From: xuchenhan-tri Date: Wed, 15 Jan 2025 14:58:21 -0800 Subject: [PATCH] [doc] Add release notes v1.37.0 (#22413) Co-Authored-By: Jeremy Nimmer --- doc/_pages/from_binary.md | 10 +- doc/_release-notes/v1.37.0.md | 333 ++++++++++++++++++++++++++ tools/release_engineering/relnotes.py | 4 + 3 files changed, 342 insertions(+), 5 deletions(-) create mode 100644 doc/_release-notes/v1.37.0.md diff --git a/doc/_pages/from_binary.md b/doc/_pages/from_binary.md index d2aa601b2af8..1773c90e4aac 100644 --- a/doc/_pages/from_binary.md +++ b/doc/_pages/from_binary.md @@ -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 diff --git a/doc/_release-notes/v1.37.0.md b/doc/_release-notes/v1.37.0.md new file mode 100644 index 000000000000..44b6c8dc8bcc --- /dev/null +++ b/doc/_release-notes/v1.37.0.md @@ -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 + DRAKE_DISABLE_CPU_FEATURES. + +# 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 + + + + + +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 + + + +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 + + + +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 + + + + +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][_#22288]) + * Add support for `drake::FileSource` ([#22288][_#22288]) + * Add support for YAML's `!!binary` tag ([#22318][_#22318]) + * In C++ the type is `std::vector`. + * In Python the type is `bytes`. + * Fix Python `yaml_dump_typed` for Union on str ([#22394][_#22394]) +* Add PiecewiseConstantCurvatureTrajectory ([#22214][_#22214]) + +## pydrake bindings + + + +New features + +* Add binding for MultibodyPlant::GetActuationFromArray() ([#22356][_#22356]) + +Fixes + +* Fix diagram memory leaks ([#22221][_#22221], [#22343][_#22343]) + +## Build system + + + +* 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 + + + +* 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. + + +[_#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 + + + diff --git a/tools/release_engineering/relnotes.py b/tools/release_engineering/relnotes.py index 1c4372ab2e8a..5d80923f4f5d 100644 --- a/tools/release_engineering/relnotes.py +++ b/tools/release_engineering/relnotes.py @@ -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"], ""