---
title: Drake v1.19.0
date: 2023-07-13
released: 2023-07-13
---

# Announcements

* None

# Breaking changes since v1.18.0

* `multibody::MultibodyPlant` now rejects duplicate frame names. ([#19724][_#19724])
* `geometry::optimization::ConvexSet::AddPointInSetConstraints` now returns the new variables/constraints created.  This is a breaking change for subclasses of `ConvexSet`, which must now implement the new return type in their NVI overrides. ([#19634][_#19634])
* Methods previously returning `multibody::ConstraintIndex` (which could not be used) now return `multibody::MultibodyConstraintId` (which can be used to get constraint information from the multibody plant). ([#19698][_#19698])

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

# Changes since v1.18.0

## Dynamical Systems

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

New features

* Allow specifying a time offset in `ZeroOrderHold`. ([#19650][_#19650])
* Add `systems::System<T>::ExecuteInitializationEvents`. ([#19577][_#19577])
* Add `UpdateCoefficients` to `AffineSystem`. ([#19707][_#19707])
* All RGBD sensors now have an `image_time` output port. ([#19696][_#19696])

Fixes

* [#19419][_#19419]: Fix a crash in `FiniteHorizonLinearQuadraticRegulator`. ([#19653][_#19653])
* [#19198][_#19198]: Add a zero-order hold to the pose output of `RgbdSensorDiscrete`. ([#19696][_#19696])
* [#19198][_#19198]: Reject negative event trigger times in `RgbdSensorAsync`. ([#19696][_#19696])
* [#19198][_#19198]: In `RgbdSensorAsync` port accessors, throw instead of returning `nullptr` when the requested name is not present. ([#19696][_#19696])
* Split `RgbdSensorDiscrete` into its own file. ([#19649][_#19649])
* [#19752][_#19752] Support non-templatized `System`s in `GetDowncastSubsystemByName()`. ([#19755][_#19755])

## Mathematical Program

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

New features

* Add `math::SoftOverMax`, `SoftOverMin`,`SoftUnderMax`, `SoftUnderMin`. ([#19591][_#19591])
* For `geometry::optimization::CspaceFreePolytope` subclasses, fix state dependencies for computing separating planes from kinematic chains. ([#19609][_#19609])
* Add `Serialize` to `Hyperellipsoid`. ([#19670][_#19670])
* `geometry::optimization::VPolytope` and `IrisInConfigurationSpace` support `geometry::Mesh` geometry. ([#19672][_#19672])
* A variety of fixes to the sampling and guessing logic in `IrisInConfigurationSpace`. ([#19728][_#19728], [#19751][_#19751])
* `geometry::optimization::GraphOfConvexSets` returns `kInfeasibleConstraints` when no path exists. ([#19719][_#19719])
* Add `solvers::MakeSemidefiniteRelaxation` to construct a new `MathematicalProgram` which implements  the SDP relaxation of the original program with non-convex quadratic constraints.
. ([#19632][_#19632])
* `MosekSolver` takes convex `QuadraticConstraint`s. ([#19705][_#19705])
* `solvers::MathematicalProgram::AddConstraint` parses quadratic constraints as `QuadraticConstraint` rather than `ExpressionConstraint`. ([#19633][_#19633])
* Add optional upper bound to minimum distance constraints. ([#19718][_#19718])
* Add `IsEmpty` methods to `geometry::optimization::ConvexSet` and derived classes. ([#19716][_#19716])
* Add new optional default options for `geometry::optimization::GraphOfConvexSets`. ([#19720][_#19720])
* Add method `geometry::optimization::HPolyhedron::Scale()`. ([#19733][_#19733])

Fixes

* [#19657][_#19657]: Acquire a local `GurobiSolver` license at most once per process. ([#19713][_#19713])
* Improve error messages when an empty set is passed to `geometry::optimization::Hyperellipsoid::MinimumUniformScalingToTouch`. ([#19671][_#19671])

## Multibody Dynamics and Geometry

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

New features

* Added `SpatialInertia::[Object]WithMass()` functions (solid capsule, solid cylinder, solid ellipsoid). ([#19737][_#19737])
* [#19592][_#19592]: Added method `multibody::ContactResults::SelectHydroelastic` which allows selecting a subset of hydroelastic ContactResults. ([#19663][_#19663])
* Added methods `multibody::MultibodyPlant::MakeVelocityToQDotMap` and `MakeQDotToVelocityMap`. ([#19675][_#19675])
* Added joint locking support to SAP solver. ([#18983][_#18983])
* Added `geometry::Meshcat::GetRealtimeRate`. ([#19700][_#19700])
* Improved handling of glTF in `geometry` and `visualization`:
  * Meshcat can handle glTF meshes. ([#19635][_#19635])
  * `DrakeVisualizer` warns when visualizing glTF meshes instead of crashing. ([#19692][_#19692])
  * `RenderEngineGltfClient` accepts glTF files. ([#19684][_#19684])
  * Handle `geometry::Mesh("foo.gltf", 1)` throughout Drake: ([#19739][_#19739])
    * `RenderEngineGltfClient` can render Mesh/Convex which uses a glTF file.
    * Meshcat can visualize a Mesh/Convex which uses a glTF file.
    * Meldis (via `DrakeVisualizer`) can likewise visualize glTF files.
    * All other consumers of such meshes either dispatch exceptions or warning messages that the geometry will be ignored.
* Use `BlockSparseSuperNodalSolver` in SAP solver by default. ([#19757][_#19757])

Fixes

* Avoid copying the mesh in distance queries. ([#19679][_#19679])
* Fix incorrect Meshcat "realtime rate" after pausing/resuming simulation. ([#19667][_#19667])
* Correct the applied spatial forces returned by `MultibodyPlant`. ([#19548][_#19548])

## Planning

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

New features

* `DifferentialIK` supports `num_positions != num_velocities`. ([#19522][_#19522])

Fixes

* Use the plant's default configuration rather than its zero configuration `CollisionChecker` validates distance and interpolation functions. ([#19736][_#19736])

## Tutorials and examples

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

* [#19641][_#19641] Fix images and formatting of _Hydroelastic Contact: Basics_ in Deepnote. ([#19660][_#19660], [#19643][_#19643])

## Miscellaneous features and fixes

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

* Enable inertia visualization by default. ([#19743][_#19743])
* Fix `InertiaVisualizer` to show the correct rotations. ([#19589][_#19589])
* Add `trajectories::BezierCurve::ElevateOrder()` to convert Bezier curves to higher order. ([#19620][_#19620])
* Fix `trajectories::BezierCurve` move operators. ([#19648][_#19648])
* Add acceleration limits and collision filtering for Panda arm. ([#19689][_#19689])
* Avoid false self collisions in `iiwa_primitive_collision.urdf` by adding collision filters. ([#19674][_#19674])
* Improve error message for YAML parser when parsing a non-Mapping root node. ([#19730][_#19730])
* Support inertia visualization in Meldis. ([#19677][_#19677])

## pydrake bindings

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

New features

* `systems.CacheEntry.is_out_of_date` ([#19669][_#19669])
* `systems.CacheEntry.is_cache_entry_disabled` ([#19669][_#19669])
* `systems.CacheEntry.disable_caching` ([#19669][_#19669])
* `systems.CacheEntry.enable_caching` ([#19669][_#19669])
* `systems.CacheEntry.disable_caching_by_default` ([#19669][_#19669])
* `systems.CacheEntry.is_disabled_by_default` ([#19669][_#19669])
* `systems.CacheEntry.description` ([#19669][_#19669])
* `systems.CacheEntry.has_default_prerequisites` ([#19669][_#19669])
* `systems.LeafOutputPort.cache_entry` ([#19669][_#19669])
* `solvers.ExpressionCost` ([#19706][_#19706])
* `solvers.ExpressionConstraint` ([#19706][_#19706])

Fixes

* Fix incorrect type casting in `SortedPair<T>`. ([#19753][_#19753])
* Add more `solvers.MixedIntegerBranchAndBound.Options` bindings, fixing some ugly generated documentation. ([#19639][_#19639])
* Use vanilla `py::cast()` for keep alive behavior. ([#19655][_#19655])
* Handle empty derivatives in `forwarddiff.jacobian`. ([#19638][_#19638])
* Add constructor overloads for `autodiff` unit derivatives vector. ([#19623][_#19623])
* Remove error when `None` is passed as a callback function. ([#19697][_#19697])
* Add environment variable `DRAKE_PYTHON_LOGGING` to disable redirection of the
  text log. ([#19685][_#19685])

## Build system

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

* Update default Ubuntu version for Docker to be Jammy. ([#19701][_#19701])

## Build dependencies

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

* Add the header-only nlohmann library as an internal vendored library. ([#19625][_#19625])

## Newly-deprecated APIs

* `solvers::FindNonconvexQuadraticCost` ([#19668][_#19668])
* `solvers::MinimumValueConstraint::minimum_value` ([#19665][_#19665])
* `geometry::optimization::CSpaceSeparatingPlane` five-argument constructor. ([#19526][_#19526])

## Removal of deprecated items

* `drake::geometry::render::kHasRenderEngineGl` ([#19714][_#19714])
* `drake::geometry::render::MakeRenderEngineGl` ([#19714][_#19714])
* `drake::geometry::render::RenderEngineGlParams` ([#19714][_#19714])

# Notes

This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.19.0) named
``drake-YYYYMMDD-{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> -->
[_#18983]: https://github.com/RobotLocomotion/drake/pull/18983
[_#19198]: https://github.com/RobotLocomotion/drake/pull/19198
[_#19419]: https://github.com/RobotLocomotion/drake/pull/19419
[_#19522]: https://github.com/RobotLocomotion/drake/pull/19522
[_#19526]: https://github.com/RobotLocomotion/drake/pull/19526
[_#19548]: https://github.com/RobotLocomotion/drake/pull/19548
[_#19577]: https://github.com/RobotLocomotion/drake/pull/19577
[_#19589]: https://github.com/RobotLocomotion/drake/pull/19589
[_#19591]: https://github.com/RobotLocomotion/drake/pull/19591
[_#19592]: https://github.com/RobotLocomotion/drake/pull/19592
[_#19609]: https://github.com/RobotLocomotion/drake/pull/19609
[_#19620]: https://github.com/RobotLocomotion/drake/pull/19620
[_#19623]: https://github.com/RobotLocomotion/drake/pull/19623
[_#19625]: https://github.com/RobotLocomotion/drake/pull/19625
[_#19632]: https://github.com/RobotLocomotion/drake/pull/19632
[_#19633]: https://github.com/RobotLocomotion/drake/pull/19633
[_#19634]: https://github.com/RobotLocomotion/drake/pull/19634
[_#19635]: https://github.com/RobotLocomotion/drake/pull/19635
[_#19638]: https://github.com/RobotLocomotion/drake/pull/19638
[_#19639]: https://github.com/RobotLocomotion/drake/pull/19639
[_#19641]: https://github.com/RobotLocomotion/drake/pull/19641
[_#19643]: https://github.com/RobotLocomotion/drake/pull/19643
[_#19648]: https://github.com/RobotLocomotion/drake/pull/19648
[_#19649]: https://github.com/RobotLocomotion/drake/pull/19649
[_#19650]: https://github.com/RobotLocomotion/drake/pull/19650
[_#19653]: https://github.com/RobotLocomotion/drake/pull/19653
[_#19655]: https://github.com/RobotLocomotion/drake/pull/19655
[_#19657]: https://github.com/RobotLocomotion/drake/pull/19657
[_#19660]: https://github.com/RobotLocomotion/drake/pull/19660
[_#19663]: https://github.com/RobotLocomotion/drake/pull/19663
[_#19665]: https://github.com/RobotLocomotion/drake/pull/19665
[_#19667]: https://github.com/RobotLocomotion/drake/pull/19667
[_#19668]: https://github.com/RobotLocomotion/drake/pull/19668
[_#19669]: https://github.com/RobotLocomotion/drake/pull/19669
[_#19670]: https://github.com/RobotLocomotion/drake/pull/19670
[_#19671]: https://github.com/RobotLocomotion/drake/pull/19671
[_#19672]: https://github.com/RobotLocomotion/drake/pull/19672
[_#19674]: https://github.com/RobotLocomotion/drake/pull/19674
[_#19675]: https://github.com/RobotLocomotion/drake/pull/19675
[_#19677]: https://github.com/RobotLocomotion/drake/pull/19677
[_#19679]: https://github.com/RobotLocomotion/drake/pull/19679
[_#19684]: https://github.com/RobotLocomotion/drake/pull/19684
[_#19685]: https://github.com/RobotLocomotion/drake/pull/19685
[_#19689]: https://github.com/RobotLocomotion/drake/pull/19689
[_#19692]: https://github.com/RobotLocomotion/drake/pull/19692
[_#19696]: https://github.com/RobotLocomotion/drake/pull/19696
[_#19697]: https://github.com/RobotLocomotion/drake/pull/19697
[_#19698]: https://github.com/RobotLocomotion/drake/pull/19698
[_#19700]: https://github.com/RobotLocomotion/drake/pull/19700
[_#19701]: https://github.com/RobotLocomotion/drake/pull/19701
[_#19705]: https://github.com/RobotLocomotion/drake/pull/19705
[_#19706]: https://github.com/RobotLocomotion/drake/pull/19706
[_#19707]: https://github.com/RobotLocomotion/drake/pull/19707
[_#19713]: https://github.com/RobotLocomotion/drake/pull/19713
[_#19714]: https://github.com/RobotLocomotion/drake/pull/19714
[_#19716]: https://github.com/RobotLocomotion/drake/pull/19716
[_#19718]: https://github.com/RobotLocomotion/drake/pull/19718
[_#19719]: https://github.com/RobotLocomotion/drake/pull/19719
[_#19720]: https://github.com/RobotLocomotion/drake/pull/19720
[_#19724]: https://github.com/RobotLocomotion/drake/pull/19724
[_#19728]: https://github.com/RobotLocomotion/drake/pull/19728
[_#19730]: https://github.com/RobotLocomotion/drake/pull/19730
[_#19733]: https://github.com/RobotLocomotion/drake/pull/19733
[_#19736]: https://github.com/RobotLocomotion/drake/pull/19736
[_#19737]: https://github.com/RobotLocomotion/drake/pull/19737
[_#19739]: https://github.com/RobotLocomotion/drake/pull/19739
[_#19743]: https://github.com/RobotLocomotion/drake/pull/19743
[_#19751]: https://github.com/RobotLocomotion/drake/pull/19751
[_#19752]: https://github.com/RobotLocomotion/drake/pull/19752
[_#19753]: https://github.com/RobotLocomotion/drake/pull/19753
[_#19755]: https://github.com/RobotLocomotion/drake/pull/19755
[_#19757]: https://github.com/RobotLocomotion/drake/pull/19757
<!-- <end issue links> -->

<!--
  Current oldest_commit 381370dced7e311343a034ca881247c621ae0061 (exclusive).
  Current newest_commit b35fa8277c449aee51024adc5103c2bbaf330f08 (inclusive).
-->
