---
title: Drake v1.16.0
date: 2023-05-18
released: 2023-05-18
---

# Announcements

* The powerful Graph of Convex Sets ("GCS") Trajectory Optimization class makes
  its first appearance in this release. The initial release only offers a few
  costs and constraints. Future releases will grow the feature set.
  * See ["Motion Planning around Obstacles with Convex Optimization"](https://arxiv.org/abs/2205.04422)
    by Tobia Marcucci, Mark Petersen, David von Wrangel, Russ Tedrake. 
* The new rendering server
  [drake-blender](https://github.com/RobotLocomotion/drake-blender)
  can be used with Drake's `RenderEngineGltfClient`.
* Symbolic matrix multiplication in pydrake runs faster now if you call the
  `pydrake.math.matmul` function instead of the `@` operator.
* We continue to work on improving mesh geometry support for the illustration
  and perception roles. Future releases will contain even more updates.

# Breaking changes since v1.15.0

* Filter contact results for completely locked trees ([#19349][_#19349])
  * The members of `ContactResults` will no longer be in bijection with the geometry quantities (`PenetrationAsPointPair` and `ContactSurface`) that inform the solver of contact. Geometric contact data between completely locked trees will simply be ignored.
  * Any program that made the assumption that: num_contact_results = num_point_pairs + num_contact_surfaces will be broken.
* Remove pydrake.geometry.optimization.CopyableUniquePtrConvexSet ([#19343][_#19343])
  * Please use pydrake.geometry.optimization.ConvexSet
* Update RenderEngineVtk to use RenderMaterial for appearance data ([#19383][_#19383])
  * Materials defined in a mtl file for an obj file foo.obj will now be preferred over arbitrarily using the file foo.png in the same directory. This may change mesh appearance.

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

# Changes since v1.15.0

## Dynamical Systems

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

New features

* Add DiagramBuilder::RemoveSystem ([#19243][_#19243])
* Add IsDetectable and IsStabilizable to LinearSystem class ([#19289][_#19289])

Fixes

* Change DiscreteDerivative's suppress_initial_transient default value to true ([#19247][_#19247])
* Throw an error when Riccati equation is not solved for continuous time system ([#19222][_#19222])

## Mathematical Program

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

New features

* Add optional rounding solver options ([#18875][_#18875])
* Add GetExpression to BezierCurve ([#19205][_#19205])
* Support IRIS initial ellipse ([#19257][_#19257])
* Add max_explored_nodes for branch_and_bound ([#19366][_#19366])
* Add ExpressionCost ([#19405][_#19405])
* Add Spectrahedron isa ConvexSet ([#19316][_#19316])

Fixes

* Speed up symbolic matmul ([#19304][_#19304], [#19345][_#19345])
* Fix a bug when calling ConstructMonomialBasis with a constant polynomial ([#19233][_#19233])
* Make GraphOfConvexSets preprocessing respect solver options ([#19312][_#19312])

## Multibody Dynamics and Geometry

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

New features

* Add Rgba::update to selectively change values ([#19237][_#19237])
* Exposes SAP near rigid threshold ([#19218][_#19218])
* Add GeometryInstance overload without unique_ptr ([#19251][_#19251])
* Add SpatialInertia::SolidSphereWithMass() and HollowSphereWithMass() ([#19268][_#19268])
* ShapeReifier can configure default behavior ([#19367][_#19367])
* Calculate principal moments of inertia and their axes ([#19281][_#19281])
* Ability for MeshcatVisualizer to filter geometry via property ([#19220][_#19220])
* Enable alpha adjustment of invisible geometry ([#19287][_#19287])

Fixes

* Throw exceptions for spatial inertia primitives with mass or density that is not positive and finite ([#19192][_#19192])
* Set random state to default when distribution is missing ([#19230][_#19230])
* Improve URDF inertia invalidity handling ([#19238][_#19238])
* Sample MultibodyPlant input force ports discretely ([#19225][_#19225])
* Respect axis element for planar joint in URDF ([#19355][_#19355])
* Improve SDFormat inertia handling ([#19245][_#19245])
* Fix RenderEngine to properly incorporate sensor pose in camera body ([#19398][_#19398])
* Unify spatial inertia calculations in Mujoco parser ([#19342][_#19342])
* Improve error message for !(Delta > 0) ([#19407][_#19407])
* Map white color to kDontCare in render_gltf_client ([#19397][_#19397])

## Planning

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

New features

* Add GcsTrajectoryOptimization ([#19239][_#19239])
* Add a time cost to GcsTrajectoryOptimization ([#19301][_#19301])
* Add velocity bounds to subgraphs of GcsTrajectoryOptimization ([#19334][_#19334])

Fixes

* Improve performance of SceneGraphCollisionChecker through better collision filtering ([#19387][_#19387])

## Tutorials and examples

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

* Add support for T=Expression to QuadrotorPlant example ([#19256][_#19256])

## Miscellaneous features and fixes

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

* Add render camera preview ([#19158][_#19158])
* Add hash_append support for bare pointers ([#19248][_#19248])
* Update models of the IIWA 14 with estimated reflected inertia ([#19344][_#19344])
* Use shared_ptr for LCM serializers ([#19369][_#19369])
* Improve math::AreAutoDiffVecXdEqual ([#19393][_#19393])

## pydrake bindings

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

New features

* Add pydrake.math.matmul ([#19298][_#19298])

Fixes

* Fix CompositeTrajectory constructor argument type ([#19252][_#19252])
* Fix docs & mypy stubs for GraphOfConvexSets ([#19283][_#19283])
* Handle nulls in ImportError reporting ([#19296][_#19296])

Newly bound

* pydrake.geometry.SceneGraph.ChangeShape() ([#19278][_#19278])
* pydrake.multibody.optimization.QuaternionEulerIntegrationConstraint.ComposeVariable() ([#19288][_#19288])
* pydrake.multibody.optimization.QuaternionEulerIntegrationConstraint.allow_quaternion_negation() ([#19288][_#19288])
* pydrake.multibody.tree.SpatialInertia.SolidSphereWithMass() and HollowSphereWithMass() ([#19268][_#19268])

## Build system

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

* Add missing runfiles to bazel drake_shared_library ([#19294][_#19294])
* Fix FindResource vs non-source Bazel builds ([#19206][_#19206])

## Build dependencies

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

* Build IPOPT 3.14.12 from source on Ubuntu ([#19388][_#19388])
* Upgrade abseil_cpp_internal to latest commit ([#19332][_#19332])
* Upgrade buildifier to latest release v6.1.2 ([#19332][_#19332])
* Upgrade common_robotics_utilities to latest commit ([#19332][_#19332])
* Upgrade dm_control_internal to latest commit ([#19332][_#19332])
* Upgrade lcm to latest release v1.5.0 ([#19332][_#19332])
* Upgrade optitrack_driver to latest commit ([#19324][_#19324])
* Upgrade petsc to latest release v3.19.1 ([#19332][_#19332])
* Upgrade rules_python to latest release 0.21.0 ([#19332][_#19332])
* Upgrade stable_baselines3_internal to latest release v1.8.0 ([#19187][_#19187])
* Upgrade styleguide to latest commit ([#19277][_#19277])

## Newly-deprecated APIs

* drake::geometry::optimization::GetCollisionGeometries ([#19368][_#19368])
* drake::systems::lcm::Serializer::Clone ([#19369][_#19369])
* drake::visualization::ApplyVisualizationConfig overload taking a const SceneGraph ([#19217][_#19217])
* pydrake.geometry.GeometryInstance.release_shape [#19251][_#19251])
* Drop the render qualifier for pydrake.geometry.render ([#19241][_#19241])
  * Everything in pydrake.geometry.render should be imported from pydrake.geometry now.

## Removal of deprecated items

* drake::multibody::Parser::AddModelFromString ([#19413][_#19413])
* drake::systems::trajectory_optimization (moved elsewhere) ([#18697][_#18697], [#19307][_#19307])
* On macOS, the `--with-maintainer-only` install_prereqs flag ([#18665][_#18665], [#19307][_#19307])
* pydrake.examples.acrobot as a sub-module ([#18685][_#18685], [#19307][_#19307])
* pydrake.examples.compass_gait as a sub-module ([#18685][_#18685], [#19307][_#19307])
* pydrake.examples.manipulation_station as a sub-module ([#18685][_#18685], [#19307][_#19307])
* pydrake.multibody.parsing.Parser.AddModelFromString ([#19413][_#19413])
* pydrake.solvers.augmented_lagrangian as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.branch_and_bound as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.clp as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.csdp as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.dreal as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.gurobi as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.ipopt as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.mathematicalprogram as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.mixed_integer_optimization_util as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.mixed_integer_rotation_constraint as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.mosek as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.nlopt as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.osqp as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.scs as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.sdpa_free_format as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.solvers.snopt as a sub-module ([#18683][_#18683], [#19307][_#19307])
* pydrake.systems.trajectory_optimization (moved elsewhere) ([#18697][_#18697], [#19307][_#19307])
* The @ccd bazel external ([#18611][_#18611], [#19307][_#19307])
* The @fcl bazel external ([#18611][_#18611], [#19307][_#19307])
* The @msgpack external ([#18559][_#18559], [#19307][_#19307])
* The @osqp bazel external ([#18690][_#18690], [#19307][_#19307])
* The @qdldl bazel external ([#18690][_#18690], [#19307][_#19307])
* The @scs bazel external ([#18690][_#18690], [#19307][_#19307])
* The @stduuid bazel external ([#18610][_#18610], [#19307][_#19307])
* The @suitesparse bazel external ([#18690][_#18690], [#19307][_#19307])
* The parameter `absolute_pathname` in `pydrake.geometry.Mesh()` and `pydrake.geometry.Convex()` ([#18536][_#18536], [#19307][_#19307])

# Notes

This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.16.0) named
``drake-20230518-{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> -->
[_#18536]: https://github.com/RobotLocomotion/drake/pull/18536
[_#18559]: https://github.com/RobotLocomotion/drake/pull/18559
[_#18610]: https://github.com/RobotLocomotion/drake/pull/18610
[_#18611]: https://github.com/RobotLocomotion/drake/pull/18611
[_#18665]: https://github.com/RobotLocomotion/drake/pull/18665
[_#18683]: https://github.com/RobotLocomotion/drake/pull/18683
[_#18685]: https://github.com/RobotLocomotion/drake/pull/18685
[_#18690]: https://github.com/RobotLocomotion/drake/pull/18690
[_#18697]: https://github.com/RobotLocomotion/drake/pull/18697
[_#18875]: https://github.com/RobotLocomotion/drake/pull/18875
[_#19158]: https://github.com/RobotLocomotion/drake/pull/19158
[_#19187]: https://github.com/RobotLocomotion/drake/pull/19187
[_#19192]: https://github.com/RobotLocomotion/drake/pull/19192
[_#19205]: https://github.com/RobotLocomotion/drake/pull/19205
[_#19206]: https://github.com/RobotLocomotion/drake/pull/19206
[_#19217]: https://github.com/RobotLocomotion/drake/pull/19217
[_#19218]: https://github.com/RobotLocomotion/drake/pull/19218
[_#19220]: https://github.com/RobotLocomotion/drake/pull/19220
[_#19222]: https://github.com/RobotLocomotion/drake/pull/19222
[_#19225]: https://github.com/RobotLocomotion/drake/pull/19225
[_#19230]: https://github.com/RobotLocomotion/drake/pull/19230
[_#19233]: https://github.com/RobotLocomotion/drake/pull/19233
[_#19237]: https://github.com/RobotLocomotion/drake/pull/19237
[_#19238]: https://github.com/RobotLocomotion/drake/pull/19238
[_#19239]: https://github.com/RobotLocomotion/drake/pull/19239
[_#19241]: https://github.com/RobotLocomotion/drake/pull/19241
[_#19243]: https://github.com/RobotLocomotion/drake/pull/19243
[_#19245]: https://github.com/RobotLocomotion/drake/pull/19245
[_#19247]: https://github.com/RobotLocomotion/drake/pull/19247
[_#19248]: https://github.com/RobotLocomotion/drake/pull/19248
[_#19251]: https://github.com/RobotLocomotion/drake/pull/19251
[_#19252]: https://github.com/RobotLocomotion/drake/pull/19252
[_#19256]: https://github.com/RobotLocomotion/drake/pull/19256
[_#19257]: https://github.com/RobotLocomotion/drake/pull/19257
[_#19268]: https://github.com/RobotLocomotion/drake/pull/19268
[_#19277]: https://github.com/RobotLocomotion/drake/pull/19277
[_#19278]: https://github.com/RobotLocomotion/drake/pull/19278
[_#19281]: https://github.com/RobotLocomotion/drake/pull/19281
[_#19283]: https://github.com/RobotLocomotion/drake/pull/19283
[_#19287]: https://github.com/RobotLocomotion/drake/pull/19287
[_#19288]: https://github.com/RobotLocomotion/drake/pull/19288
[_#19289]: https://github.com/RobotLocomotion/drake/pull/19289
[_#19294]: https://github.com/RobotLocomotion/drake/pull/19294
[_#19296]: https://github.com/RobotLocomotion/drake/pull/19296
[_#19298]: https://github.com/RobotLocomotion/drake/pull/19298
[_#19301]: https://github.com/RobotLocomotion/drake/pull/19301
[_#19304]: https://github.com/RobotLocomotion/drake/pull/19304
[_#19307]: https://github.com/RobotLocomotion/drake/pull/19307
[_#19312]: https://github.com/RobotLocomotion/drake/pull/19312
[_#19316]: https://github.com/RobotLocomotion/drake/pull/19316
[_#19324]: https://github.com/RobotLocomotion/drake/pull/19324
[_#19332]: https://github.com/RobotLocomotion/drake/pull/19332
[_#19334]: https://github.com/RobotLocomotion/drake/pull/19334
[_#19342]: https://github.com/RobotLocomotion/drake/pull/19342
[_#19343]: https://github.com/RobotLocomotion/drake/pull/19343
[_#19344]: https://github.com/RobotLocomotion/drake/pull/19344
[_#19345]: https://github.com/RobotLocomotion/drake/pull/19345
[_#19349]: https://github.com/RobotLocomotion/drake/pull/19349
[_#19355]: https://github.com/RobotLocomotion/drake/pull/19355
[_#19366]: https://github.com/RobotLocomotion/drake/pull/19366
[_#19367]: https://github.com/RobotLocomotion/drake/pull/19367
[_#19368]: https://github.com/RobotLocomotion/drake/pull/19368
[_#19369]: https://github.com/RobotLocomotion/drake/pull/19369
[_#19383]: https://github.com/RobotLocomotion/drake/pull/19383
[_#19387]: https://github.com/RobotLocomotion/drake/pull/19387
[_#19388]: https://github.com/RobotLocomotion/drake/pull/19388
[_#19393]: https://github.com/RobotLocomotion/drake/pull/19393
[_#19397]: https://github.com/RobotLocomotion/drake/pull/19397
[_#19398]: https://github.com/RobotLocomotion/drake/pull/19398
[_#19405]: https://github.com/RobotLocomotion/drake/pull/19405
[_#19407]: https://github.com/RobotLocomotion/drake/pull/19407
[_#19413]: https://github.com/RobotLocomotion/drake/pull/19413
<!-- <end issue links> -->

<!--
  Current oldest_commit d55ac42eba8027bd4a643fb485236ae01f8618c9 (exclusive).
  Current newest_commit 02aec896f19870276b9b1a9f2f95638ef766e370 (inclusive).
-->
