---
title: Drake v1.20.0
date: 2023-08-16
released: 2023-08-16
---

# Announcements

* Drake Gym is now available, to simplify combining Drake simulations with reinforcement learning toolkits. See [the documentation here](https://github.com/RobotLocomotion/drake/tree/v1.20.0/bindings/pydrake/gym). ([#19831][_#19831])
* The new `DRAKE_PYTHON_LOGGING` environment variable offers more control over logging when using `pydrake`. In certain cases where C++ multi-threaded code is bound in Python, it may be detrimental to use existing spdlog Python redirection for either performance (e.g. control loop) or deadlock issues (GIL). These settings allow users to avoid these issues, at the cost of having inconsistent logging from Python. See [the documentation here](https://drake.mit.edu/doxygen_cxx/group__environment__variables.html). ([#19703][_#19703])
* Drake now includes a fix_inertia tool, to compute inertia tensors from masses and geometries in models. It works on both URDF and SDFormat models, and outputs a complete updated model file. See [the documentation here](https://drake.mit.edu/pydrake/pydrake.multibody.fix_inertia.html). ([#19731][_#19731])
* `MultibodyPlant::CalcReactionForces()` has been fixed and now gives correct results in discrete mode for both TAMSI and SAP, including contributions from constraints. ([#19920][_#19920])

# Breaking changes since v1.19.0

*  C++ code that was reading from the `systems::sensors::CameraConfig::renderer_class` field now gets a `std::variant` back, instead of a `std::string` directly. Downstream code will need to adapt with  `std::get_if<std::string>(&params.renderer_class)` to compensate.  ([#19863][_#19863])
* `geometry::optimization::GraphOfConvexSets` no longer has `VertexId` and `EdgeId` overloads. The class is marked experimental, so some changes are made without  deprecation. In particular, python users of the removed overloads should get a useful message telling them to use the other overload. `AddEdge`, `RemoveVertex`, and `RemoveEdge` have changed (without deprecation) from taking `const Vertex&` to `Vertex*`. The previously asserted const-ness was incorrect. This change will not impact python users. ([#19825][_#19825])
* `geometry::optimization::CIrisSeparatingPlane` is removed. The return type of  `CspaceFreePolytopeBase::separating_planes()` is changed from  `CIrisSeparatingPlane` to `CSpaceSeparatingPlane`. ([#19756][_#19756])

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

# Changes since v1.19.0

## Dynamical Systems

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

New features

* Add `SimulatorConfig` support to `FiniteHorizonLQR`. ([#19765][_#19765])
* Add optional publish_offset to `LcmPublisherSystem`. ([#19899][_#19899])
* Add capture_offset and output_delay to `CameraConfig`. ([#19898][_#19898])
* `CameraConfig` can use RenderEngineParams. ([#19863][_#19863])

Fixes

* Improve `DiagramBuilder::Build` performance. ([#19746][_#19746])
* Fix wrong `SystemId` on the ports of a cloned system. ([#19875][_#19875])
* Allow `GetDowncastSubsystemByName` to work with non-templatized systems. ([#19925][_#19925])
* Propagate `EventStatus` through `Event` handlers. ([#19989][_#19989])

## Mathematical Program

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

New features

* MathematicalProgram
  * Add `MathematicalProgramResult::SetSolution()`. ([#19790][_#19790])
  * Add `MathematicalProgramResult::get_decision_variable_index()` ([#19814][_#19814])
  * Implement `MathematicalProgram::ToLatex()`. ([#19942][_#19942])
* GraphOfConvexSets
  * Add `GraphOfConvexSets::SolveConvexRestriction()`. ([#19785][_#19785])
  * Add `GraphOfConvexSets::GetSolutionPath()` and supporting introspection methods. ([#19792][_#19792])
  * Use `GraphOfConvexSets::SolveConvexRestriction` in rounding. ([#19816][_#19816])
* ConvexSet
  * Implement `MaybeGetFeasiblePoint` for `ConvexSet`. ([#19804][_#19804])
  * Update `ConvexSet` logic to properly handle zero-dimensional sets. ([#19732][_#19732])
  * Improve implementations of `DoMaybeGetFeasiblePoint` for some subclasses of `ConvexSet`. ([#19824][_#19824])
  * Create base-class version for `IsBounded` in `ConvexSet`, and let `Intersection` and `Spectrahedron` use it. ([#19888][_#19888])
  * Create `AffineSubspace` subclass of `ConvexSet`. ([#19828][_#19828], [#19850][_#19850], [#19851][_#19851], [#19864][_#19864], [#19975][_#19975])
* Misc. Optimization
  * Improve `IrisInConfigurationSpace` performance: Reuse counter-examples from the previous iteration. ([#19835][_#19835])
  * Implement `Hyperellipsoid::MinimumVolumeCircumscribedEllipsoid`. ([#19857][_#19857])

Fixes

* Handle bounding box constraints in `MakeSemidefiniteRelaxation`. ([#19795][_#19795])
* Fix bug in `DoAddPointInNonnegativeScalingConstraints` for `Spectrahedron`. ([#19838][_#19838])
* Fix `ParseConstraint` for cases with infinities. ([#19903][_#19903])
* Handle converting `VPolytope` to `HPolyhedron` if it is not full dimensional. ([#19979][_#19979])

## Multibody Dynamics and Geometry

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


New features

* SAP
  * Enable/Disable SAP constraints at runtime. ([#19884][_#19884])
  * Parsing support for ball constraints in SDF/URDF. ([#19780][_#19780])
* Misc. Multibody
  * Support collision filtering for deformable geometries. ([#19897][_#19897])
  * Introduce `MultibodyPlant::RenameModelInstance()`. ([#19939][_#19939])
  * Add `SpatialInertia::SolidCylinderWithMassAboutEnd()`. ([#19803][_#19803])
* Meshcat
  * Environment mapping support. ([#19837][_#19837])
* Rendering
  * `RenderEngineGl` loads .mtl files. ([#19747][_#19747])
  * Add lights to `RenderEngineGlParams`. ([#19693][_#19693])
  * `RenderEngineGlParams` are compatible now with YAML serialization. ([#19912][_#19912])
  * `RenderEngineGltfClientParams` are compatible now with YAML serialization. ([#19906][_#19906])
  * `RenderEngineVtkParams` are compatible now with YAML serialization. ([#19911][_#19911])

Fixes

* SAP
  * Fix results of `CalcReactionForces()` in discrete mode. ([#19920][_#19920])
  * Fix SAP coupler constraint incorrect position/velocity indexing bug. ([#19902][_#19902])
* Meshcat
  * Fix `MeshcatVisualizer` initialization of alpha sliders. ([#19813][_#19813])
  * Increase range of Meshcat's search for an open port. ([#19960][_#19960])
* Rendering
  * Fix to merging gltf in `RenderEngineGltfClient`. ([#19896][_#19896])
  * Remove beta testing tag from `RenderEngineGltf` doxygen. ([#19997][_#19997])
  * Demote warning message for too many materials. ([#19815][_#19815])
* Misc. Multibody
  * Fix names shown off-by-one in `RationalForwardKinematics` var names. ([#19797][_#19797])

## Planning

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


New features

* Construct `MinimumDistanceConstraint` with a `CollisionChecker`. ([#19760][_#19760])
* Add new `DistanceAndInterpolationProvider` API to `CollisionChecker`. ([#19105][_#19105])
* Add `GcsTrajectoryOptimization::graph_of_convex_sets` accessor. ([#19873][_#19873])

Fixes

* Improve implementation of `GcsTrajectoryOptimization::Subgraph` costs and constraints. ([#19873][_#19873])

## Tutorials and examples

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

* Add option to model Strandbeest with constraints. ([#19782][_#19782])
* Add new models to the collection in `manipulation_station/models`. ([#19771][_#19771])

## Miscellaneous features and fixes

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

* Implement `BezierCurve::DerivativeControlPointCoefficients()`. ([#19867][_#19867])
* Update inertias for link 2 and link 4 for the iiwas that were mistakenly rotated by 90 degrees. ([#19830][_#19830])
* Fix integer overflow in `ToLatex` implementation. ([#19951][_#19951])
* Fix YAML round-trip bugs with `variant<string,...>`. ([#19954][_#19954])

## pydrake bindings

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


New features

* `common.use_native_cpp_logging` ([#19703][_#19703])
* `gym.DrakeGymEnv` ([#19831][_#19831])
* `math.SoftOverMax` ([#19789][_#19789])
* `math.SoftOverMin` ([#19789][_#19789])
* `math.SoftUnderMax` ([#19789][_#19789])
* `math.SoftUnderMin` ([#19789][_#19789])
* `multibody.inverse_kinematics.MinimumDistanceConstraint` constructor overloads that accept a `CollisionChecker`. ([#19921][_#19921])
* `multibody.inverse_kinematics.MinimumDistanceConstraint` constructor overloads that accept a Python penalty function. ([#19855][_#19855])
* `multibody.plant.MultibodyPlant.GetFrameIndices` ([#19964][_#19964])
* `solvers.MathematicalProgram.AddLinearConstraint` overload that accepts a row vector. ([#19962][_#19962])
* `solvers.MinimumValueConstraint` ([#19839][_#19839])
* `systems.framework.SystemBase.HasInputPort` ([#19806][_#19806])
* `systems.framework.SystemBase.HasOutputPort` ([#19806][_#19806])
* Add visualization triads in meldis. ([#19848][_#19848])

Fixes

* Add missing import to fix `DirectCollocation` bindings. ([#19938][_#19938])
* Fix Meldis to recognize mesh file content changes. ([#19878][_#19878])
* Improve error message for un-imported Value<> binding. ([#19984][_#19984])
* Add missing `pydrake.systems.sensors` import to the examples. ([#19985][_#19985])

## Build system

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

* Remove spurious lcm-gen dependency ([#19788][_#19788])
* Remove vestigial meshcat files from the install ([#19877][_#19877])
* Install the picosha2 LICENSE file ([#19879][_#19879])

## Build dependencies

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

* Add dependency on gymnasium_py ([#19831][_#19831], [#19909][_#19909])
* Build clp_internal from source ([#19928][_#19928])
* Hide symbols from clp_internal ([#19928][_#19928])
* Hide symbols from common_robotics_utilities ([#19893][_#19893])
* Hide symbols from conex_internal ([#19892][_#19892])
* Hide symbols from csdp_internal ([#19894][_#19894])
* Hide symbols from picosha2_internal ([#19879][_#19879])
* Hide symbols from tinyobjloader_internal ([#19880][_#19880])
* Hide symbols from usockets_internal ([#19889][_#19889])
* Patch googlebenchmark to avoid shadow warnings ([#19796][_#19796])
* Stop using a <drake_vendor/...> prefix on external include paths ([#19936][_#19936])
* Upgrade abseil_cpp_internal to latest commit ([#19778][_#19778], [#19929][_#19929])
* Upgrade bazel to latest release 6.3.1 ([#19891][_#19891])
* Upgrade common_robotics_utilities to latest commit ([#19729][_#19729], [#19893][_#19893])
* Upgrade curl_internal to latest release 8.2.1 ([#19934][_#19934])
* Upgrade dm_control_internal to latest commit ([#19773][_#19773], [#19929][_#19929])
* Upgrade drake_models to latest commit ([#19771][_#19771])
* Upgrade googlebenchmark to latest release 1.8.2 ([#19773][_#19773])
* Upgrade gtest to latest release 1.14.0 ([#19932][_#19932])
* Upgrade gz_math_internal to latest release 7.2.0 ([#19776][_#19776])
* Upgrade libcmaes to latest commit ([#19773][_#19773])
* Upgrade meshcat to latest commit ([#19817][_#19817], [#19837][_#19837])
* Upgrade mosek to release 10.0.46 ([#19798][_#19798])
* Upgrade msgpack_internal to latest release 6.1.0 ([#19773][_#19773])
* Upgrade mypy_internal to latest release 1.4.1 ([#19773][_#19773])
* Upgrade nanoflann_internal to latest release v1.5.0 ([#19775][_#19775])
* Upgrade optitrack_driver to latest commit ([#19929][_#19929])
* Upgrade petsc to latest release 3.19.3 ([#19773][_#19773])
* Upgrade platforms to latest release 0.0.7 ([#19929][_#19929])
* Upgrade pycodestyle to latest release 2.11.0 ([#19933][_#19933])
* Upgrade qdldl_internal to latest release 0.1.7 ([#19773][_#19773])
* Upgrade rules_python to latest release 0.24.0 ([#19773][_#19773])
* Upgrade stable_baselines3_internal to latest release 2.0.0 ([#19909][_#19909])
* Upgrade suitesparse_internal to latest release 7.1.0 ([#19773][_#19773])
* Upgrade tinyobjloader to latest commit ([#19773][_#19773])
* Upgrade typing_extensions_internal to latest release 4.7.0 ([#19773][_#19773])
* Upgrade voxelized_geometry_tools to latest commit ([#19729][_#19729], [#19929][_#19929])

## Newly-deprecated APIs

* `pydrake.manipulation.kuka_iiwa` ([#19869][_#19869])
* `pydrake.manipulation.schunk_wsg` ([#19869][_#19869])
* `pydrake.manipulation.util` ([#19869][_#19869])
* `drake::geometry::RenderEngineGlParams::default_label` ([#19912][_#19912])
* `drake::geometry::RenderEngineGltfClientParams::default_label` ([#19906][_#19906])
* `drake::geometry::RenderEngineVtkParams::default_label` ([#19911][_#19911])
* `drake::multibody::UnitInertia::AxiallySymmetric` requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::SolidCapsule` three-argument form requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::SolidCylinder` three-argument form requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::SolidCylinder` two-argument form ([#19926][_#19926])
* `drake::multibody::UnitInertia::SolidCylinderAboutEnd` three-argument form requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::StraightLine` requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::ThinRod` requires a normalized unit vector ([#19926][_#19926])
* `drake::multibody::UnitInertia::SolidCylinderAboutEnd` two-argument overload ([#19803][_#19803])
* `drake::systems::DiscreteUpdateEvent::DiscreteUpdateCallback` ([#19989][_#19989])
* `drake::systems::DiscreteUpdateEvent::DiscreteUpdateEvent` overloads taking legacy callback type signatures ([#19989][_#19989])
* `drake::systems::DiscreteUpdateEvent::SystemCallback` ([#19989][_#19989])
* `drake::systems::PublishEvent::PublishCallback` ([#19989][_#19989])
* `drake::systems::PublishEvent::PublishEvent` overloads taking legacy callback type signatures ([#19989][_#19989])
* `drake::systems::PublishEvent::SystemCallback` ([#19989][_#19989])
* `drake::systems::UnrestrictedUpdateEvent::SystemCallback` ([#19989][_#19989])
* `drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateCallback` ([#19989][_#19989])
* `drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateEvent` overloads taking legacy callback type signatures ([#19989][_#19989])
* The @clp external ([#19928][_#19928])
  * Drake now refers to @clp_internal instead⁽¹⁾.
* The @conex external ([#19883][_#19883])
  * Drake now refers to @conex_internal instead⁽¹⁾.
* The @csdp external ([#19894][_#19894])
  * Drake now refers to @csdp_internal instead⁽¹⁾.
* The @gym_py external ([#19909][_#19909])
  * Drake now refers to @gymnasium_py instead.
* The @optitrack_driver external ([#19866][_#19866])
  * Soon, drake will no longer require the optitrack driver.
* The installed optitrack_client program ([#19866][_#19866])
  * For replacement packages, see [optitrack-driver releases](https://github.com/RobotLocomotion/optitrack-driver/releases).
* The @petsc external ([#19890][_#19890], [#19929][_#19929])
  * Soon, drake will no longer require PETSc.
* The @picosha2 external ([#19879][_#19879])
  * Drake now refers to @picosha2_internal instead⁽¹⁾.
* The @rules_pkg external ([#19872][_#19872])
  * Drake no longer requires this package.
* The @tinyobjloader external ([#19880][_#19880])
  * Drake now refers to @tinyobjloader_internal instead⁽¹⁾.
* The @usockets external ([#19889][_#19889])
  * Drake now refers to @usockets_internal instead⁽¹⁾.
* The @uwebsockets external ([#19889][_#19889])
  * Drake now refers to @uwebsockets_internal instead⁽¹⁾.
* drake::systems::sensors::OptitrackLcmFrameSender ([#19866][_#19866])
  * If you still need this system, you may copy its code into your own project.
* drake::systems::sensors::OptitrackReceiver ([#19866][_#19866])
  * If you still need this system, you may copy its code into your own project.

⁽¹⁾ Packages named "internal" are not intended for end-users; if you still need
direct access to one of these packages (e.g., "@foo"), you may copy its bzl
rules (e.g., "drake/tools/workspace/foo/**") into your own project.

## Removal of deprecated items

* `pydrake.geometry.render` ([#19868][_#19868])
* `pydrake.geometry.GeometryInstance.release_shape` ([#19868][_#19868])

# Notes

This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.20.0) named
``drake-20230816-{focal|jammy|mac|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> -->
[_#19105]: https://github.com/RobotLocomotion/drake/pull/19105
[_#19693]: https://github.com/RobotLocomotion/drake/pull/19693
[_#19703]: https://github.com/RobotLocomotion/drake/pull/19703
[_#19729]: https://github.com/RobotLocomotion/drake/pull/19729
[_#19731]: https://github.com/RobotLocomotion/drake/pull/19731
[_#19732]: https://github.com/RobotLocomotion/drake/pull/19732
[_#19746]: https://github.com/RobotLocomotion/drake/pull/19746
[_#19747]: https://github.com/RobotLocomotion/drake/pull/19747
[_#19756]: https://github.com/RobotLocomotion/drake/pull/19756
[_#19760]: https://github.com/RobotLocomotion/drake/pull/19760
[_#19765]: https://github.com/RobotLocomotion/drake/pull/19765
[_#19771]: https://github.com/RobotLocomotion/drake/pull/19771
[_#19773]: https://github.com/RobotLocomotion/drake/pull/19773
[_#19775]: https://github.com/RobotLocomotion/drake/pull/19775
[_#19776]: https://github.com/RobotLocomotion/drake/pull/19776
[_#19778]: https://github.com/RobotLocomotion/drake/pull/19778
[_#19780]: https://github.com/RobotLocomotion/drake/pull/19780
[_#19782]: https://github.com/RobotLocomotion/drake/pull/19782
[_#19785]: https://github.com/RobotLocomotion/drake/pull/19785
[_#19788]: https://github.com/RobotLocomotion/drake/pull/19788
[_#19789]: https://github.com/RobotLocomotion/drake/pull/19789
[_#19790]: https://github.com/RobotLocomotion/drake/pull/19790
[_#19792]: https://github.com/RobotLocomotion/drake/pull/19792
[_#19795]: https://github.com/RobotLocomotion/drake/pull/19795
[_#19796]: https://github.com/RobotLocomotion/drake/pull/19796
[_#19797]: https://github.com/RobotLocomotion/drake/pull/19797
[_#19798]: https://github.com/RobotLocomotion/drake/pull/19798
[_#19803]: https://github.com/RobotLocomotion/drake/pull/19803
[_#19804]: https://github.com/RobotLocomotion/drake/pull/19804
[_#19806]: https://github.com/RobotLocomotion/drake/pull/19806
[_#19813]: https://github.com/RobotLocomotion/drake/pull/19813
[_#19814]: https://github.com/RobotLocomotion/drake/pull/19814
[_#19815]: https://github.com/RobotLocomotion/drake/pull/19815
[_#19816]: https://github.com/RobotLocomotion/drake/pull/19816
[_#19817]: https://github.com/RobotLocomotion/drake/pull/19817
[_#19824]: https://github.com/RobotLocomotion/drake/pull/19824
[_#19825]: https://github.com/RobotLocomotion/drake/pull/19825
[_#19828]: https://github.com/RobotLocomotion/drake/pull/19828
[_#19830]: https://github.com/RobotLocomotion/drake/pull/19830
[_#19831]: https://github.com/RobotLocomotion/drake/pull/19831
[_#19835]: https://github.com/RobotLocomotion/drake/pull/19835
[_#19837]: https://github.com/RobotLocomotion/drake/pull/19837
[_#19838]: https://github.com/RobotLocomotion/drake/pull/19838
[_#19839]: https://github.com/RobotLocomotion/drake/pull/19839
[_#19848]: https://github.com/RobotLocomotion/drake/pull/19848
[_#19850]: https://github.com/RobotLocomotion/drake/pull/19850
[_#19851]: https://github.com/RobotLocomotion/drake/pull/19851
[_#19855]: https://github.com/RobotLocomotion/drake/pull/19855
[_#19857]: https://github.com/RobotLocomotion/drake/pull/19857
[_#19863]: https://github.com/RobotLocomotion/drake/pull/19863
[_#19864]: https://github.com/RobotLocomotion/drake/pull/19864
[_#19866]: https://github.com/RobotLocomotion/drake/pull/19866
[_#19867]: https://github.com/RobotLocomotion/drake/pull/19867
[_#19868]: https://github.com/RobotLocomotion/drake/pull/19868
[_#19869]: https://github.com/RobotLocomotion/drake/pull/19869
[_#19872]: https://github.com/RobotLocomotion/drake/pull/19872
[_#19873]: https://github.com/RobotLocomotion/drake/pull/19873
[_#19875]: https://github.com/RobotLocomotion/drake/pull/19875
[_#19877]: https://github.com/RobotLocomotion/drake/pull/19877
[_#19878]: https://github.com/RobotLocomotion/drake/pull/19878
[_#19879]: https://github.com/RobotLocomotion/drake/pull/19879
[_#19880]: https://github.com/RobotLocomotion/drake/pull/19880
[_#19883]: https://github.com/RobotLocomotion/drake/pull/19883
[_#19884]: https://github.com/RobotLocomotion/drake/pull/19884
[_#19888]: https://github.com/RobotLocomotion/drake/pull/19888
[_#19889]: https://github.com/RobotLocomotion/drake/pull/19889
[_#19890]: https://github.com/RobotLocomotion/drake/pull/19890
[_#19891]: https://github.com/RobotLocomotion/drake/pull/19891
[_#19892]: https://github.com/RobotLocomotion/drake/pull/19892
[_#19893]: https://github.com/RobotLocomotion/drake/pull/19893
[_#19894]: https://github.com/RobotLocomotion/drake/pull/19894
[_#19896]: https://github.com/RobotLocomotion/drake/pull/19896
[_#19897]: https://github.com/RobotLocomotion/drake/pull/19897
[_#19898]: https://github.com/RobotLocomotion/drake/pull/19898
[_#19899]: https://github.com/RobotLocomotion/drake/pull/19899
[_#19902]: https://github.com/RobotLocomotion/drake/pull/19902
[_#19903]: https://github.com/RobotLocomotion/drake/pull/19903
[_#19906]: https://github.com/RobotLocomotion/drake/pull/19906
[_#19909]: https://github.com/RobotLocomotion/drake/pull/19909
[_#19911]: https://github.com/RobotLocomotion/drake/pull/19911
[_#19912]: https://github.com/RobotLocomotion/drake/pull/19912
[_#19920]: https://github.com/RobotLocomotion/drake/pull/19920
[_#19921]: https://github.com/RobotLocomotion/drake/pull/19921
[_#19925]: https://github.com/RobotLocomotion/drake/pull/19925
[_#19926]: https://github.com/RobotLocomotion/drake/pull/19926
[_#19928]: https://github.com/RobotLocomotion/drake/pull/19928
[_#19929]: https://github.com/RobotLocomotion/drake/pull/19929
[_#19932]: https://github.com/RobotLocomotion/drake/pull/19932
[_#19933]: https://github.com/RobotLocomotion/drake/pull/19933
[_#19934]: https://github.com/RobotLocomotion/drake/pull/19934
[_#19936]: https://github.com/RobotLocomotion/drake/pull/19936
[_#19938]: https://github.com/RobotLocomotion/drake/pull/19938
[_#19939]: https://github.com/RobotLocomotion/drake/pull/19939
[_#19942]: https://github.com/RobotLocomotion/drake/pull/19942
[_#19951]: https://github.com/RobotLocomotion/drake/pull/19951
[_#19954]: https://github.com/RobotLocomotion/drake/pull/19954
[_#19960]: https://github.com/RobotLocomotion/drake/pull/19960
[_#19962]: https://github.com/RobotLocomotion/drake/pull/19962
[_#19964]: https://github.com/RobotLocomotion/drake/pull/19964
[_#19975]: https://github.com/RobotLocomotion/drake/pull/19975
[_#19979]: https://github.com/RobotLocomotion/drake/pull/19979
[_#19984]: https://github.com/RobotLocomotion/drake/pull/19984
[_#19985]: https://github.com/RobotLocomotion/drake/pull/19985
[_#19989]: https://github.com/RobotLocomotion/drake/pull/19989
[_#19997]: https://github.com/RobotLocomotion/drake/pull/19997
<!-- <end issue links> -->

<!--
  Current oldest_commit b35fa8277c449aee51024adc5103c2bbaf330f08 (exclusive).
  Current newest_commit 75114dca8d860814de4185e1471820a25078eb84 (inclusive).
-->
