---
title: Drake v0.32.0
date: 2021-07-14
released: 2021-07-14
---

# Announcements

* None

# Breaking changes since v0.31.0

* The Drake collision filter has been entirely switched to a new mechanism ([#15297][_#15297]).  This creates a number of small API changes to classes that we do not believe that anyone is relying on.
  * Changes to the underlying collision filter implementation has led to the removal of drake/common/sorted_vector_have_intersection.h
* Drake has upgraded its libsdformat version; the more recent sdformat libraries are stricter ([#15075][_#15075])
  * Drake now enforces stricter validation of SDFormat attributes. Before, any unrecognized attributes previously printed a warning to the console. Now, unrecognized attributes will cause an exception to be thrown. Please note that unrecognized **elements** do not yet cause a warning or error to be issued.
* ExpressionCell's API has been adjusted to be more const-correct ([#15364][_#15364])
  * This changes some low-level Expression casting operations that (while not in an `internal` namespace) are internal implementation details unlikely to affect downstream users.
* Doxygen throws clauses only mention std::exception ([#15336][_#15336])
  * This change loosens the documented exception type of a large number of Drake classes.  No actual behaviour is changed and few users should have been relying on precise exception behaviour.
* Drake Visualizer now uses drake's native lcmtypes for drawing rather than bot_core's ([#15284][_#15284])
  * Drake visualizer as shipped no longer supports the bot_core messages for point clouds and lidar (downstream projects with their own lcmtypes are probably already vendoring drake-visualizer anyway).

# Changes since v0.31.0

## Dynamical Systems

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

New features

* Add sugar for declaring state output ports ([#15256][_#15256])
* The new ValueProducer class offers sugar for declaring calc callbacks for output ports and cache entries ([#15198][_#15198], [#15271][_#15271])

Fixes

* Clarify that SystemScalarConverter only supports default scalars ([#15255][_#15255])

## Mathematical Program

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

New features

* Add MathematicalProgram::CheckSatisfied ([#15268][_#15268])
* MakeFirstAvailableSolver mechanism to automatically create a solver ([#15319][_#15319], [#15325][_#15325])
* Costs can be removed from MathematicalPrograms ([#15311][_#15311])
* Add L2NormCost ([#15367][_#15367])
* MathematicalProgram can be printed as a string for debugging ([#15370][_#15370])
* Document dReal options ([#15384][_#15384])
* Establish geometry/optimization to facilitate optimization with and for SceneGraph geometries ([#15194][_#15194], [#15285][_#15285], [#15266][_#15266])
  * Maximum-Volume Inscribed Ellipsoid ([#15243][_#15243])
  * AddPointInNonnegativeScalingConstraints ([#15286][_#15286])
  * Add Point isa ConvexSet ([#15302][_#15302])
  * Add VPolytope isa ConvexSet ([#15308][_#15308])
  * Implements IsBounded and Hyperellipsoid Volumes ([#15314][_#15314])
  * Implements IRIS algorithm ([#15315][_#15315])
  * Python bindings for convex sets and Iris ([#15333][_#15333])
  * Adds HPolyhedron::ChebyshevCenter() ([#15355][_#15355])

Fixes

* Disable ClpSolver console printing by default ([#15254][_#15254])
* ScsSolver defaults not to print ([#15257][_#15257])
* Check the variable type in AddDecisionVariables ([#15253][_#15253])
* Disable CsdpSolver console printing by default ([#15307][_#15307])
* Switch default eval_type of LorentzConeConstraint to ConvexSmooth ([#15318][_#15318])
* More helpful error message in DecomposePSDmatrixIntoXtransposeTimesX ([#15365][_#15365])

## Multibody Dynamics and Geometry

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

New features

* Add screw mobilizer ([#15104][_#15104])
* Add screw joint ([#15105][_#15105])
* Support point-to-ellipsoid results in ComputeSignedDistanceToPoint query ([#15232][_#15232])

Fixes

* Clarify parse error messages for obj files for proximity geometry ([#15373][_#15373])
* Fix how parent bodies are resolved for frames attached to joints ([#15279][_#15279])

## Tutorials and examples

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

* Add an example of robot hands tying shoe laces ([#15044][_#15044])

## Miscellaneous features and fixes

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

* Add explicit function template instantiation macro on scalars ([#15218][_#15218])
* Various performance improvements to solving cubic splines ([#15248][_#15248])
* Change NiceTypeName's internal caching to be opt-in ([#15269][_#15269])
* Remove use of deprecated Eigen function ([#15321][_#15321])
* Add set_log_pattern and --spdlog_pattern to our text logging ([#15240][_#15240])
* Use [[noreturn]] instead of \_\_attribute\_\_((noreturn)) ([#15351][_#15351])
* Extend copyable_unique_ptr const correctness ([#15346][_#15346])
* Prepare uses of TypeSafeIndex for Eigen 3.4 compatibility ([#15335][_#15335])
* Make reset_after_move be conditionally noexcept ([#15362][_#15362])


## pydrake bindings

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

New features

* None

Fixes

* None

Newly bound

* pydrake.solvers.CsdpSolver.\_\_init\_\_ argument "method" ([#15274][_#15274])
* pydrake.solvers.SolverId.\_\_hash\_\_ ([#15276][_#15276])
* pydrake.solvers.SolverId.\_\_eq\_\_ ([#15276][_#15276])
* pydrake.solvers.SolverId.\_\_ne\_\_ ([#15276][_#15276])
* pydrake.solvers.QuadraticConstraint ([#15313][_#15313])
* pydrake.solvers.CdspSolver.id ([#15326][_#15326])
* pydrake.solvers.DrealSolver.id ([#15326][_#15326])
* pydrake.solvers.GurobiSolver.id ([#15326][_#15326])
* pydrake.solvers.IpoptSolver.id ([#15326][_#15326])
* pydrake.solvers.MosekSolver.id ([#15326][_#15326])
* pydrake.solvers.NloptSolver.id ([#15326][_#15326])
* pydrake.solvers.OsqpSolver.id ([#15326][_#15326])
* pydrake.solvers.ScsSolver.id ([#15326][_#15326])
* pydrake.solvers.SnoptSolver.id ([#15326][_#15326])
* pydrake.solvers.CheckSatisfied ([#15353][_#15353])
* pydrake.solvers.CheckSatisfiedAtInitialGuess ([#15353][_#15353])
* pydrake.solvers.RegisterBinding for type-erased Binding argument ([#15353][_#15353])
* pydrake.systems.lcm.LcmScopeSystem ([#15309][_#15309])
* pydrake.solvers.CommonSolverOption ([#15312][_#15312])
* pydrake.solvers.Constraint ([#15304][_#15304])
* pydrake.solvers.LorentzConeConstraint.EvalType ([#15304][_#15304])
* pydrake.solvers.LorentzConeConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.RotatedLorentzConeConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.LinearEqualityConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.BoundingBoxConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.PositiveSemidefiniteConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.LinearMatrixInequalityConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.ExponentialConeConstraint.\_\_init\_\_ ([#15304][_#15304])
* pydrake.solvers.QuadraticCost.\_\_init\_\_ ([#15304][_#15304])

## Build system

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

* Default expected exception type in exception testing to std::exception ([#15331][_#15331])
* Avoid std::filesystem with GCC 8 ([#15265][_#15265])

## Build dependencies

<!-- Manually relocate any "Upgrade foo_external to latest" lines to here, -->
<!-- and then sort them alphabetically. -->

* Upgrade fcl to latest commit ([#15288][_#15288])
* Upgrade ghc_filesystem to latest release 1.5.8 ([#15293][_#15293])
* Upgrade googlebenchmark to latest release 1.5.5 ([#15292][_#15292])
* Upgrade libsdformat to latest release 11.2.2 ([#15301][_#15301])
* Upgrade meshcat_python to latest commit ([#15296][_#15296])
* Upgrade rules_python to latest release 0.3.0 ([#15289][_#15289])
* Upgrade tinyobjloader to latest commit ([#15278][_#15278])
* Drake now requires Bazel version 4.0 or greater ([#15289][_#15289])

## Newly-deprecated APIs


* systems::framework::SystemScalarConverter(2 args) (use systems::framework::SystemScalarConverter::MakeWithoutSubtypeChecking instead) ([#15267][_#15267])
* systems::lcm::ConnectLcmScope ([#15282][_#15282])
* pydrake.systems.lcm.ConnectLcmScope ([#15282][_#15282])

## Removal of deprecated items

* @semantic_version external ([#15275][_#15275])
* @tinyxml external ([#15275][_#15275])
* pydrake.multibody.plant.MultibodyPlant.WeldFrames ([#15277][_#15277])
* pydrake.multibody.tree.WeldJoint.\_\_init\_\_(4 args) ([#15277][_#15277])
* pydrake.solvers.mathematicalprogram.NewNonnegativePolynomial(3 args) ([#15277][_#15277])
* geometry::SignedDistanceToPointWithGradient ([#15277][_#15277])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v0.32.0) named
``drake-20210714-{bionic|focal|mac}.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> -->
[_#15044]: https://github.com/RobotLocomotion/drake/pull/15044
[_#15075]: https://github.com/RobotLocomotion/drake/pull/15075
[_#15104]: https://github.com/RobotLocomotion/drake/pull/15104
[_#15105]: https://github.com/RobotLocomotion/drake/pull/15105
[_#15194]: https://github.com/RobotLocomotion/drake/pull/15194
[_#15198]: https://github.com/RobotLocomotion/drake/pull/15198
[_#15218]: https://github.com/RobotLocomotion/drake/pull/15218
[_#15232]: https://github.com/RobotLocomotion/drake/pull/15232
[_#15240]: https://github.com/RobotLocomotion/drake/pull/15240
[_#15243]: https://github.com/RobotLocomotion/drake/pull/15243
[_#15248]: https://github.com/RobotLocomotion/drake/pull/15248
[_#15253]: https://github.com/RobotLocomotion/drake/pull/15253
[_#15254]: https://github.com/RobotLocomotion/drake/pull/15254
[_#15255]: https://github.com/RobotLocomotion/drake/pull/15255
[_#15256]: https://github.com/RobotLocomotion/drake/pull/15256
[_#15257]: https://github.com/RobotLocomotion/drake/pull/15257
[_#15265]: https://github.com/RobotLocomotion/drake/pull/15265
[_#15266]: https://github.com/RobotLocomotion/drake/pull/15266
[_#15267]: https://github.com/RobotLocomotion/drake/pull/15267
[_#15268]: https://github.com/RobotLocomotion/drake/pull/15268
[_#15269]: https://github.com/RobotLocomotion/drake/pull/15269
[_#15271]: https://github.com/RobotLocomotion/drake/pull/15271
[_#15274]: https://github.com/RobotLocomotion/drake/pull/15274
[_#15275]: https://github.com/RobotLocomotion/drake/pull/15275
[_#15276]: https://github.com/RobotLocomotion/drake/pull/15276
[_#15277]: https://github.com/RobotLocomotion/drake/pull/15277
[_#15278]: https://github.com/RobotLocomotion/drake/pull/15278
[_#15279]: https://github.com/RobotLocomotion/drake/pull/15279
[_#15282]: https://github.com/RobotLocomotion/drake/pull/15282
[_#15284]: https://github.com/RobotLocomotion/drake/pull/15284
[_#15285]: https://github.com/RobotLocomotion/drake/pull/15285
[_#15286]: https://github.com/RobotLocomotion/drake/pull/15286
[_#15288]: https://github.com/RobotLocomotion/drake/pull/15288
[_#15289]: https://github.com/RobotLocomotion/drake/pull/15289
[_#15292]: https://github.com/RobotLocomotion/drake/pull/15292
[_#15293]: https://github.com/RobotLocomotion/drake/pull/15293
[_#15296]: https://github.com/RobotLocomotion/drake/pull/15296
[_#15297]: https://github.com/RobotLocomotion/drake/pull/15297
[_#15301]: https://github.com/RobotLocomotion/drake/pull/15301
[_#15302]: https://github.com/RobotLocomotion/drake/pull/15302
[_#15304]: https://github.com/RobotLocomotion/drake/pull/15304
[_#15307]: https://github.com/RobotLocomotion/drake/pull/15307
[_#15308]: https://github.com/RobotLocomotion/drake/pull/15308
[_#15309]: https://github.com/RobotLocomotion/drake/pull/15309
[_#15311]: https://github.com/RobotLocomotion/drake/pull/15311
[_#15312]: https://github.com/RobotLocomotion/drake/pull/15312
[_#15313]: https://github.com/RobotLocomotion/drake/pull/15313
[_#15314]: https://github.com/RobotLocomotion/drake/pull/15314
[_#15315]: https://github.com/RobotLocomotion/drake/pull/15315
[_#15318]: https://github.com/RobotLocomotion/drake/pull/15318
[_#15319]: https://github.com/RobotLocomotion/drake/pull/15319
[_#15321]: https://github.com/RobotLocomotion/drake/pull/15321
[_#15325]: https://github.com/RobotLocomotion/drake/pull/15325
[_#15326]: https://github.com/RobotLocomotion/drake/pull/15326
[_#15331]: https://github.com/RobotLocomotion/drake/pull/15331
[_#15333]: https://github.com/RobotLocomotion/drake/pull/15333
[_#15335]: https://github.com/RobotLocomotion/drake/pull/15335
[_#15336]: https://github.com/RobotLocomotion/drake/pull/15336
[_#15346]: https://github.com/RobotLocomotion/drake/pull/15346
[_#15351]: https://github.com/RobotLocomotion/drake/pull/15351
[_#15353]: https://github.com/RobotLocomotion/drake/pull/15353
[_#15355]: https://github.com/RobotLocomotion/drake/pull/15355
[_#15362]: https://github.com/RobotLocomotion/drake/pull/15362
[_#15364]: https://github.com/RobotLocomotion/drake/pull/15364
[_#15365]: https://github.com/RobotLocomotion/drake/pull/15365
[_#15367]: https://github.com/RobotLocomotion/drake/pull/15367
[_#15370]: https://github.com/RobotLocomotion/drake/pull/15370
[_#15373]: https://github.com/RobotLocomotion/drake/pull/15373
[_#15384]: https://github.com/RobotLocomotion/drake/pull/15384
<!-- <end issue links> -->

<!--
  Current oldest_commit 248db432faa66d19e0bb24c2fe539ec5bf58ea7f (exclusive).
  Current newest_commit 37832588e9e65a84d6eea121159d469309c32f2e (inclusive).
-->
