---
title: Drake v0.38.0
date: 2022-01-14
released: 2022-01-14
---

# Announcements

* Drake will no longer support Ubuntu 18.04 "Bionic" as of April 1st, 2022
  ([#13391][_#13391]).
  * Ubuntu users should plan to upgrade to Ubuntu 20.04 "Focal" before that
    time.
  * Drake will add support for Ubuntu 22.04 "Jammy" as soon as possible
    after it's release date, most likely by June 1st, 2022.
* Drake will no longer support Python 3.6 or Python 3.7 of April 1st, 2022
  ([#13391][_#13391]).
  * Ubuntu users should plan to upgrade to Ubuntu 20.04 "Focal" before that
    time (in order to switch to Python 3.8 or Python 3.9).
  * macOS users already use Python 3.9, so will not be affected.
* The use of ``drake-visualizer`` on macOS is deprecated and will be removed
  from Drake on or after April 1st, 2022 ([#16386][_#16386]).
  * On Ubuntu 20.04, support of ``drake-visualizer`` remains intact.
  * On Ubuntu 18.04, support of ``drake-visualizer`` will remain intact as
    long as our overall support of 18.04 (which ends on April 1st, 2022).

# Breaking changes since v0.37.0

* MultipleShooting no longer inherits from MathematicalProgram ([#16333][_#16333])
  * Background: Previously the trajectory optimization base class
    MultipleShooting derived from MathematicalProgram (MultipleShooting is-a
    MathematicalProgram). This changes that relationship to MultipleShooting
    has-a MathematicalProgram (as a member variable). This is the pattern
    used in much of our other optimization classes, such as InverseKinematics
    and the (forthcoming) KinematicTrajectoryOptimization. It has a number of
    advantages, including the ability to create multiple trajectory
    optimization problems in the same mathematical program.
  * This change makes every effort to provide a deprecation transition,
    but there could still be cases for which this is a breaking change.
    For instance, if user code creates a cost/constraint class that takes a
    MathematicalProgram as an argument, it was previously possible to pass a
    MultipleShooting instance to that method directly. Now you must pass
    MultipleShooting.prog().

# Changes since v0.37.0

## Dynamical Systems

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

New features

* MultipleShooting no longer inherits from MathematicalProgram ([#16333][_#16333])

Fixes

* None

## Mathematical Program

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

New features

* Add VPolytope from HPolyhedron ([#16272][_#16272])
* VPolytope implements convex geometry ([#16351][_#16351])
* GraphOfConvexSets has L1NormCost and LInfNormCost cost options ([#16334][_#16334])
* GraphOfConvexSets enables removing Vertices and Edges ([#16299][_#16299])
* AddL2NormCostUsingConicConstraint ([#16208][_#16208])
* AddNonnegativePolynomialConstraint ([#16289][_#16289])
* Add UpdateCoefficients to (rotated)LorentzConeConstraint ([#16297][_#16297])
* Return the new cost and slack variables from AddMaximizeLogDeterminantSymmetricMatrixCost ([#16296][_#16296])
* Output symbolic::Expression/Formula as a LaTeX string ([#16336][_#16336])

Fixes

* None

## Multibody Dynamics and Geometry

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

New features

* Add meshcat option to disable SetTransform during recording ([#16271][_#16271])
* Add UnitInertia::SolidEllipsoid utility ([#16349][_#16349])
* Some MultibodyPlant functions that look up element names are now heapless ([#16303][_#16303])
* Add CalcVolume for basic shapes ([#16354][_#16354])
* New hydroelastic contact model in progress ([#16219][_#16219], [#16224][_#16224], [#16238][_#16238], [#16249][_#16249], [#16257][_#16257])

Fixes

* Fix meshcat errors related to the message queue filling up ([#16256][_#16256])
* Improve error messages during SDFormat parsing ([#16347][_#16347])
* Remove errant comma when writing a RotationalInertia ([#16222][_#16222])
* Redirect sdformat console messages to drake logging ([#16348][_#16348])

## Tutorials and examples

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

* manipulation_station: Fix point cloud simulation by using the same extrinsics and intrinsics for color and depth ([#15186][_#15186])
* kuka_iiwa: Update position, velocity, and effort limits for KUKA iiwa14 variants ([#16003][_#16003])

## pydrake bindings

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

New features

* Add pydrake.geometry.StartMeshcat for Deepnote/Colab ([#16273][_#16273])
* Add documentation advice for exception-triggered pdb debugging ([#16227][_#16227])

Fixes

* Fix the return type of pydrake.multibody.plant.MultibodyPlant.GetUniqueFreeBaseBodyOrThrow ([#16274][_#16274])

Newly bound

* pydrake.common.schema.Deterministic.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.DeterministicVectorX.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.Distribution.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.Gaussian.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.GaussianVectorX.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.Rotation.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.Transform.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.UniformDiscrete.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.common.schema.UniformVectorX.\_\_copy\_\_ ([#16261][_#16261])
* pydrake.systems.controllers.InverseDynamicsController.get_multibody_plant_for_control ([#16254][_#16254])
* pydrake.systems.framework.Diagram.GetInputPortLocators ([#16352][_#16352])
* pydrake.systems.framework.Diagram.connection_map ([#16352][_#16352])
* pydrake.systems.framework.LeafSystem.CalcUnrestrictedUpdate ([#16266][_#16266])
* pydrake.systems.framework.LeafSystem.DeclareForcedDiscreteUpdateEvent ([#16266][_#16266])
* pydrake.systems.framework.LeafSystem.DeclareForcedPublishEvent ([#16266][_#16266])
* pydrake.systems.framework.LeafSystem.DeclareForcedUnrestrictedUpdateEvent ([#16266][_#16266])
* pydrake.systems.framework.LeafSystem.DeclareInitializationDiscreteUpdateEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclareInitializationPublishEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclareInitializationUnrestrictedUpdateEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePerStepDiscreteUpdateEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePerStepPublishEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePerStepUnrestrictedUpdateEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePeriodicDiscreteUpdateEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePeriodicPublishEvent ([#16251][_#16251])
* pydrake.systems.framework.LeafSystem.DeclarePeriodicUnrestrictedUpdateEvent ([#16207][_#16207])
* pydrake.systems.framework.State.get_mutable_abstract_state ([#16207][_#16207])
* pydrake.systems.framework.State.get_mutable_discrete_state ([#16207][_#16207])
* pydrake.systems.framework.System.Accept ([#16352][_#16352])
* pydrake.systems.framework.SystemVisitor ([#16352][_#16352])
* pydrake.systems.framework.get_output_port_locator ([#16352][_#16352])

## Build system

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

* 'pip install drake' now supports Python 3.8 on Ubuntu 20 ([#16226][_#16226])
* 'pip install drake' now supports Python 3.9 on Ubuntu 20 ([#16308][_#16308])
* Offer option to disable drake-visualizer ([#16221][_#16221])

## Build dependencies

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

* Add libcurl dependency ([#16233][_#16233])
* Add nlohmann/json dependency ([#16231][_#16231])
* Add picosha2 dependency ([#16232][_#16232])
* Upgrade buildifier to latest release 4.2.4 ([#16324][_#16324])
* Upgrade common_robotics_utilities to latest commit ([#16324][_#16324])
* Upgrade json to latest release v3.10.5 ([#16324][_#16324])
* Upgrade petsc to latest release v3.16.3 ([#16324][_#16324])
* Upgrade rules_python to latest release 0.6.0 ([#16324][_#16324])
* Upgrade tinyobjloader to latest commit ([#16324][_#16324])
* Upgrade uwebsockets to latest release v20.9.0 ([#16324][_#16324])
* Upgrade voxelized_geometry_tools to latest commit ([#16324][_#16324])

## Newly-deprecated APIs

* The use of ``drake-visualizer`` on macOS is deprecated.
* drake::manipulation::perception::PoseSmoother ([#16343][_#16343])
* drake::solvers::MathematicalProgram::AddMaximizeLogDeterminantSymmetricMatrixCost has been renamed to AddMaximizeLogDeterminantCost ([#16309][_#16309])
* drake::systems::RandomSourced alias ([#16359][_#16359])
* drake::systems::trajectory_optimization::MultipleShooting no longer inherits from drake::solvers::MathematicalProgram ([#16333][_#16333])

## Removal of deprecated items

* The installed use of kuka_simulation and kuka_plan_runner ([#16061][_#16061], [#16326][_#16326])
* Visualizing contact results without a SceneGraph ([#16329][_#16329], [#15849][_#15849])
* drake::geometry::FrameIndex ([#16327][_#16327], [#15778][_#15778])
* drake::geometry::MeshFieldLinear::name ([#16327][_#16327], [#15847][_#15847])
* drake::math::LinearSolve ([#16327][_#16327], [#15790][_#15790])
* drake::trajectories::PiecewisePose snake_case member functions ([#16327][_#16327], [#15786][_#15786])

# Notes

This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v0.38.0) named
``drake-20220114-{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> -->
[_#13391]: https://github.com/RobotLocomotion/drake/pull/13391
[_#15186]: https://github.com/RobotLocomotion/drake/pull/15186
[_#15778]: https://github.com/RobotLocomotion/drake/pull/15778
[_#15786]: https://github.com/RobotLocomotion/drake/pull/15786
[_#15790]: https://github.com/RobotLocomotion/drake/pull/15790
[_#15847]: https://github.com/RobotLocomotion/drake/pull/15847
[_#15849]: https://github.com/RobotLocomotion/drake/pull/15849
[_#16003]: https://github.com/RobotLocomotion/drake/pull/16003
[_#16061]: https://github.com/RobotLocomotion/drake/pull/16061
[_#16207]: https://github.com/RobotLocomotion/drake/pull/16207
[_#16208]: https://github.com/RobotLocomotion/drake/pull/16208
[_#16219]: https://github.com/RobotLocomotion/drake/pull/16219
[_#16221]: https://github.com/RobotLocomotion/drake/pull/16221
[_#16222]: https://github.com/RobotLocomotion/drake/pull/16222
[_#16224]: https://github.com/RobotLocomotion/drake/pull/16224
[_#16226]: https://github.com/RobotLocomotion/drake/pull/16226
[_#16227]: https://github.com/RobotLocomotion/drake/pull/16227
[_#16231]: https://github.com/RobotLocomotion/drake/pull/16231
[_#16232]: https://github.com/RobotLocomotion/drake/pull/16232
[_#16233]: https://github.com/RobotLocomotion/drake/pull/16233
[_#16238]: https://github.com/RobotLocomotion/drake/pull/16238
[_#16249]: https://github.com/RobotLocomotion/drake/pull/16249
[_#16251]: https://github.com/RobotLocomotion/drake/pull/16251
[_#16254]: https://github.com/RobotLocomotion/drake/pull/16254
[_#16256]: https://github.com/RobotLocomotion/drake/pull/16256
[_#16257]: https://github.com/RobotLocomotion/drake/pull/16257
[_#16261]: https://github.com/RobotLocomotion/drake/pull/16261
[_#16266]: https://github.com/RobotLocomotion/drake/pull/16266
[_#16271]: https://github.com/RobotLocomotion/drake/pull/16271
[_#16272]: https://github.com/RobotLocomotion/drake/pull/16272
[_#16273]: https://github.com/RobotLocomotion/drake/pull/16273
[_#16274]: https://github.com/RobotLocomotion/drake/pull/16274
[_#16289]: https://github.com/RobotLocomotion/drake/pull/16289
[_#16296]: https://github.com/RobotLocomotion/drake/pull/16296
[_#16297]: https://github.com/RobotLocomotion/drake/pull/16297
[_#16299]: https://github.com/RobotLocomotion/drake/pull/16299
[_#16303]: https://github.com/RobotLocomotion/drake/pull/16303
[_#16308]: https://github.com/RobotLocomotion/drake/pull/16308
[_#16309]: https://github.com/RobotLocomotion/drake/pull/16309
[_#16324]: https://github.com/RobotLocomotion/drake/pull/16324
[_#16326]: https://github.com/RobotLocomotion/drake/pull/16326
[_#16327]: https://github.com/RobotLocomotion/drake/pull/16327
[_#16329]: https://github.com/RobotLocomotion/drake/pull/16329
[_#16333]: https://github.com/RobotLocomotion/drake/pull/16333
[_#16334]: https://github.com/RobotLocomotion/drake/pull/16334
[_#16336]: https://github.com/RobotLocomotion/drake/pull/16336
[_#16343]: https://github.com/RobotLocomotion/drake/pull/16343
[_#16347]: https://github.com/RobotLocomotion/drake/pull/16347
[_#16348]: https://github.com/RobotLocomotion/drake/pull/16348
[_#16349]: https://github.com/RobotLocomotion/drake/pull/16349
[_#16351]: https://github.com/RobotLocomotion/drake/pull/16351
[_#16352]: https://github.com/RobotLocomotion/drake/pull/16352
[_#16354]: https://github.com/RobotLocomotion/drake/pull/16354
[_#16359]: https://github.com/RobotLocomotion/drake/pull/16359
[_#16386]: https://github.com/RobotLocomotion/drake/pull/16386
<!-- <end issue links> -->

<!--
  Current oldest_commit 5357d9aad2a9e34c8a2d283de7a93a6595c5293a (exclusive).
  Current newest_commit 8c4b39c0e4a2d983e4b5935b509f00bd1822c2ae (inclusive).
-->
