---
title: Drake v1.21.0
date: 2023-09-14
released: 2023-09-14
---

# Announcements

* Drake builds have switched to use a customized version of VTK, compiled from source
  ([#19945][_#19945]):
  * Previously, on macOS and Ubuntu 20.04 ("Focal") Drake used a Drake-specific
    precompiled binary archive downloaded at compile-time. On Ubuntu 22.04
    ("Jammy"), Drake previously used the Ubuntu-provided shared libraries.
  * Users on macOS (who are not running Drake's unit tests) no longer need the
    ``robotlocomotion/director`` tap and may remove it.
  * For CMake users on Ubuntu 20.04 ("Focal"), Drake's source build and
    pre-compiled binaries no longer provide a copy of VTK 9.1. If you still need
    Drake's build of VTK 9.1 in your project, you can download it here:
    <https://drake-packages.csail.mit.edu/vtk/vtk-9.1.0-3-focal-x86_64.tar.gz>
  * To avoid ABI/ODR headaches, Drake's VTK build uses a custom namespace and
    hidden symbols. This is particularly an advantage for wheel builds.
  * During manual testing on macOS, we found that RenderEngineVtk sometimes does
    not obey ``show_window=true``. It is not clear whether this is a new bug due
    to the upgrade. Refer to [#20144][_#20144] for further discussion.
  * On macOS, when building Drake from source as a bazel external, you must not
    have ``build --force_pic`` in your ``.bazelrc`` file ([#20217][_#20217]).
  * Drake's minimum compatible Bazel verison has increased to ``bazel >= 5.1``.
* CMake users no longer need to install Bazel when building Drake from source
  ([#20064][_#20064]).

# Breaking changes since v1.20.0

* None

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

# Changes since v1.20.0

## Dynamical Systems

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


New features

* Support default scalars for TrajectorySource ([#19967][_#19967])
* Add to_string for Image metadata enums ([#20015][_#20015])
* Add PixelScalar Image metadata enum ([#20015][_#20015])
* Add an initialization event to LcmSubscriberSystem ([#20072][_#20072])
* Adjust "sole port" getters to work around deprecation ([#20090][_#20090])

Fixes

* Set subsystem names within InverseDynamicsController ([#20078][_#20078])
* Use descriptive InverseDynamics port names ([#20079][_#20079])
* Indicate deprecated ports in Graphviz output ([#20080][_#20080])
* Fix exception from empty renderer_class config ([#20087][_#20087])

## Mathematical Program

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

New features

* Handle converting HPolyhedron to VPolytope if it is not full dimensional ([#20001][_#20001])
* Add HyperRectangles and ConvexSet::CalcVolume() ([#19982][_#19982])
* Implement symbolic::Polynomial::Roots() ([#20161][_#20161])
* Add polynomial matrix multiplication overloads ([#20099][_#20099])

Fixes

* GraphOfConvexSets: don't try to display costs for convex restriction solutions ([#20118][_#20118])
* Improve error message for DecomposeLinearExpression and DecomposeAffineExpression ([#20065][_#20065])
* Give the default Variable a name ([#20164][_#20164])

## Multibody Dynamics and Geometry

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

New features

* Add MultibodyPlant::GetDefaultPositions() ([#19204][_#19204])
* Add lights to RenderEngineVtkParams ([#19948][_#19948])
* RenderEngineVtk consumes and renders glTF ([#19961][_#19961])
* Support ApplyMultibodyPlantConfig for an existing MultibodyPlant([#20071][_#20071])
* Actuators with PD control implicilty integrated with SAP ([#20111][_#20111])

Fixes

* Fix friction in CalcHydroelasticContactForces in continuous mode simulation ([#20022][_#20022])
* Fix RenderEngineVtk upside down glTF textures ([#20089][_#20089])
* URDF parser chooses a canonical frame when parsing planar joint ([#20107][_#20107])
* Fix alpha sliders for MeshcatVisualizer and Meldis for complex geometries ([#20140][_#20140])
* Meldis shows tessellated hydro shapes ([#20179][_#20179])

## Planning

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


New features

* Implement planning::VisibilityGraph() ([#19914][_#19914])
* CollisionChecker parallelism updates ([#20138][_#20138])

Fixes

* None

## Tutorials and examples

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

* Assign missing texture colors in manipulation station ([#20096][_#20096])

## Miscellaneous features and fixes

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

* Adapat TRI's internal `Parallelism` for Drake ([#20093][_#20093])
* Port PointCloud to new Parallelism API ([#20093][_#20093])
* Fix some awkward grammar in an error message ([#20060][_#20060])
* Rewrite the DARE solver to use a faster algorithm ([#20104][_#20104])
* Configure camera position from Meshcat ([#19968][_#19968])
* The Meshcat control panel is now resizable ([#20000][_#20000])
* Add RotationMatrix::MakeClosestRotationToIdentityFromUnitZ ([#20107][_#20107])

## pydrake bindings

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

New features

* Add bindings for CspaceFreePolytope methods ([#19574][_#19574])
* Add binding for Systems::ValidateContext ([#20073][_#20073])
* Add bindings for LcmInterfaceSystem methods ([#20074][_#20074])
* Add bindings for MultibodyPlant::CalcGeneralizedForce() ([#20102][_#20102])
* Simulator.AdvanceTo is interruptible by default ([#20130][_#20130])

Fixes

* Fix GraphOfConvexSets.GetSolutionPath segfault ([#20050][_#20050])
* Improve error message for missing witness functions ([#20106][_#20106])
* Bind Formula(bool) constructor ([#20119][_#20119])
* Add missing repr and docs for polytope options ([#20181][_#20181])

## Build system

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

* Change clang-format to a testonly dependency ([#20028][_#20028])
* CMake source builds will use bazelisk to download Bazel when necessary ([#20064][_#20064])
  * CMake users no longer need to install Bazel before building Drake from source.
  * Provide install_prereqs opt-in/opt-out flags for installing Bazel on Ubuntu ([#20046][_#20046])
* Fix model_visualizer --show_rgbd_sensor ([#20112][_#20112])
* Drake's minimum compatible Bazel verison has increased to ``bazel >= 5.1`` ([#19945][_#19945])

## Build dependencies

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

* Add vendored copy of bazelisk ([#20064][_#20064])
* Build vendored VTK from source (named ``@vtk_internal``) ([#19945][_#19945], [#20068][_#20068])
* Upgrade abseil_cpp_internal to latest commit ([#20145][_#20145])
* Upgrade buildifier to latest release v6.3.3 ([#20148][_#20148])
* Upgrade googlebenchmark to latest release v1.8.3 ([#20148][_#20148])
* Upgrade gurobi to 10.0 ([#19766][_#19766])
* Upgrade gymnasium_py to latest release v0.29.1 ([#20148][_#20148])
* Upgrade gz_math_internal to latest release gz-math7_7.3.0 ([#20146][_#20146])
* Upgrade meshcat to latest commit ([#20140][_#20140])
* Upgrade mypy_internal to latest release v1.5.1 ([#20148][_#20148])
* Upgrade rules_python to latest release 0.25.0 ([#20148][_#20148])
* Upgrade stable_baselines3_internal to latest release v2.1.0 ([#20147][_#20147])
* Upgrade tinyobjloader_internal to latest commit ([#20148][_#20148])
* Upgrade voxelized_geometry_tools to latest commit ([#20163][_#20163])

## Newly-deprecated APIs

* `drake::lcm::DrakeLcm::get_lcm_instance` ([#20115][_#20115])
* `drake::multibody::Parser::AddAllModelsFromFile`([#19978][_#19978])
* `drake::multibody::Parser::AddModelFromFile`([#19978][_#19978])
* `drake::systems::controllers::InverseDynamics::get_output_port_force` ([#20079][_#20079])
* `drake::systems::controllers::InverseDynamics` input port name `u0` is changed to `estimated_state` ([#20079][_#20079])
* `drake::systems::controllers::InverseDynamics` input port name `u1` is changed to `desired_acceleration` ([#20079][_#20079])
* `drake::systems::controllers::InverseDynamics` output port name `y0` is changed to `generalized_force` ([#20079][_#20079])
* `drake::systems::GenerateHtml` ([#20183][_#20183])
* `drake::systems::sensors::Image<drake::systems::sensors::PixelType::kExpr>` ([#20023][_#20023])
* `drake::systems::sensors::PixelFormat::kExpr` ([#20023][_#20023])
* `drake::systems::sensors::PixelType::kExpr` ([#20023][_#20023])
* The `@double_conversion` external ([#19945][_#19945])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project's setup script install it.
* The `@glew` external ([#19945][_#19945])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project's setup script install it.
* The `@liblz4` external ([#19945][_#19945])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project's setup script install it.
* The `@liblzma` external ([#19945][_#19945])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project's setup script install it.
* The `@vtk` external ([#19945][_#19945])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project's setup script install it.

## Removal of deprecated items

* `drake::geometry::optimization::GetCollisionGeometries` ([#20085][_#20085])
* `drake::planning::MultipleShooting::timestep` ([#20085][_#20085])
* `drake::planning::MultipleShooting::fixed_timestep` ([#20085][_#20085])
* `drake::planning::MultipleShooting::timesteps_are_decision_variables` ([#20085][_#20085])
* `drake::solvers::SolutionResult::kUnknownError` ([#20085][_#20085])
* `drake::systems::lcm::Serializer::Clone` ([#20085][_#20085])
* `drake::visualization::ApplyVisualizationConfig` overload taking a const SceneGraph ([#20085][_#20085])
* `pydrake.planning.AddDirectCollocationConstraint(timestep=...)` ([#20085][_#20085])
* `pydrake.planning.DirectCollocation(minimum_timestep=..., maximum_timestep=...)` ([#20085][_#20085])
* `pydrake.planning.DirectTranscription(fixed_timestep=...)` ([#20085][_#20085])
* `pydrake.systems.primitives.DiscreteTimeDelay(delay_timesteps=...)`  ([#20085][_#20085])


# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.21.0) named
``drake-20230914-{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> -->
[_#19204]: https://github.com/RobotLocomotion/drake/pull/19204
[_#19574]: https://github.com/RobotLocomotion/drake/pull/19574
[_#19766]: https://github.com/RobotLocomotion/drake/pull/19766
[_#19914]: https://github.com/RobotLocomotion/drake/pull/19914
[_#19945]: https://github.com/RobotLocomotion/drake/pull/19945
[_#19948]: https://github.com/RobotLocomotion/drake/pull/19948
[_#19961]: https://github.com/RobotLocomotion/drake/pull/19961
[_#19967]: https://github.com/RobotLocomotion/drake/pull/19967
[_#19968]: https://github.com/RobotLocomotion/drake/pull/19968
[_#19978]: https://github.com/RobotLocomotion/drake/pull/19978
[_#19982]: https://github.com/RobotLocomotion/drake/pull/19982
[_#20000]: https://github.com/RobotLocomotion/drake/pull/20000
[_#20001]: https://github.com/RobotLocomotion/drake/pull/20001
[_#20015]: https://github.com/RobotLocomotion/drake/pull/20015
[_#20022]: https://github.com/RobotLocomotion/drake/pull/20022
[_#20023]: https://github.com/RobotLocomotion/drake/pull/20023
[_#20028]: https://github.com/RobotLocomotion/drake/pull/20028
[_#20046]: https://github.com/RobotLocomotion/drake/pull/20046
[_#20050]: https://github.com/RobotLocomotion/drake/pull/20050
[_#20060]: https://github.com/RobotLocomotion/drake/pull/20060
[_#20064]: https://github.com/RobotLocomotion/drake/pull/20064
[_#20065]: https://github.com/RobotLocomotion/drake/pull/20065
[_#20068]: https://github.com/RobotLocomotion/drake/pull/20068
[_#20071]: https://github.com/RobotLocomotion/drake/pull/20071
[_#20072]: https://github.com/RobotLocomotion/drake/pull/20072
[_#20073]: https://github.com/RobotLocomotion/drake/pull/20073
[_#20074]: https://github.com/RobotLocomotion/drake/pull/20074
[_#20078]: https://github.com/RobotLocomotion/drake/pull/20078
[_#20079]: https://github.com/RobotLocomotion/drake/pull/20079
[_#20080]: https://github.com/RobotLocomotion/drake/pull/20080
[_#20085]: https://github.com/RobotLocomotion/drake/pull/20085
[_#20087]: https://github.com/RobotLocomotion/drake/pull/20087
[_#20089]: https://github.com/RobotLocomotion/drake/pull/20089
[_#20090]: https://github.com/RobotLocomotion/drake/pull/20090
[_#20093]: https://github.com/RobotLocomotion/drake/pull/20093
[_#20096]: https://github.com/RobotLocomotion/drake/pull/20096
[_#20099]: https://github.com/RobotLocomotion/drake/pull/20099
[_#20102]: https://github.com/RobotLocomotion/drake/pull/20102
[_#20104]: https://github.com/RobotLocomotion/drake/pull/20104
[_#20106]: https://github.com/RobotLocomotion/drake/pull/20106
[_#20107]: https://github.com/RobotLocomotion/drake/pull/20107
[_#20111]: https://github.com/RobotLocomotion/drake/pull/20111
[_#20112]: https://github.com/RobotLocomotion/drake/pull/20112
[_#20115]: https://github.com/RobotLocomotion/drake/pull/20115
[_#20118]: https://github.com/RobotLocomotion/drake/pull/20118
[_#20119]: https://github.com/RobotLocomotion/drake/pull/20119
[_#20130]: https://github.com/RobotLocomotion/drake/pull/20130
[_#20138]: https://github.com/RobotLocomotion/drake/pull/20138
[_#20140]: https://github.com/RobotLocomotion/drake/pull/20140
[_#20144]: https://github.com/RobotLocomotion/drake/pull/20144
[_#20145]: https://github.com/RobotLocomotion/drake/pull/20145
[_#20146]: https://github.com/RobotLocomotion/drake/pull/20146
[_#20147]: https://github.com/RobotLocomotion/drake/pull/20147
[_#20148]: https://github.com/RobotLocomotion/drake/pull/20148
[_#20161]: https://github.com/RobotLocomotion/drake/pull/20161
[_#20163]: https://github.com/RobotLocomotion/drake/pull/20163
[_#20164]: https://github.com/RobotLocomotion/drake/pull/20164
[_#20179]: https://github.com/RobotLocomotion/drake/pull/20179
[_#20181]: https://github.com/RobotLocomotion/drake/pull/20181
[_#20183]: https://github.com/RobotLocomotion/drake/pull/20183
[_#20217]: https://github.com/RobotLocomotion/drake/pull/20217
<!-- <end issue links> -->

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