---
title: Drake v0.39.0
date: 2022-02-09
released: 2022-02-09
---

# Announcements

* Drake's website API documentation now offers improved search boxes ([#16473][_#16473], [#16491][_#16491]).
* Drake now offers a meshcat display server named "meldis" that speaks the same
  protocol as ``drake_visualizer`` ([#16263][_#16263], [#16436][_#16436],
  [#16445][_#16445], [#16452][_#16452], [#16454][_#16454]).
  * This enables users whose code is hard-coded to publish visualizations to
    ``drake_visualizer`` to run ``meldis`` instead of ``drake_visualizer``
    to see the visualization, which might be useful especially on OS versions
    where ``drake_visualizer`` is deprecated.
  * Refer to the
    [acrobot README](https://github.com/RobotLocomotion/drake/blob/master/examples/acrobot/README.md)
    for an example use, or the
    [meldis documentation](https://drake.mit.edu/pydrake/pydrake.visualization.meldis.html).
* Drake now uses VTK 9.0 ([#16132][_#16132]).
  * Note that ``drake_visualizer`` continues to use VTK 8.0.
    * Importing ``pydrake`` from inside of ``drake_visualizer`` is not
      supported.

# Breaking changes since v0.38.0

* Drake's manipulation/models/iiwa_description files now specify acceleration limits ([#16377][_#16377]).
* The symbols ``pydrake.multibody.plant.ContactResultsToMeshcat`` and ``pydrake.multibody.plant.ContactResultsToMeshcatParams`` are now factory functions instead of classnames ([#16437][_#16437]).
  * Most users will be unaffected, but specific use of ``isinstance()`` checks would notice.

# Changes since v0.38.0

## Dynamical Systems

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

New features

* Add MultilayerPerceptron system ([#16396][_#16396], [#16410][_#16410], [#16529][_#16529], [#16542][_#16542])
* Add Add DiagramBuilder::connection_map function ([#16477][_#16477])

Fixes

* None

## Mathematical Program

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

New features

* Add NonsmoothAugmentedLagrangian class to compute the augmented Lagrangian (AL) of a given mathematical program ([#16391][_#16391])
* Add variable scaling to OsqpSolver ([#16423][_#16423])
* Add MathematicalProgram::ClearVariableScaling ([#16423][_#16423])
* Return the cost from AddMaximizeGeometricMeanCost ([#16373][_#16373])
* The various AddFooConstraint functions now support matrix input ([#16424][_#16424])
* Add VPolytope::CalcVolume ([#16409][_#16409])

Fixes

* Improve performance while adding variables ([#16472][_#16472])
* MOSEK™ debug printing includes the solution summary ([#16528][_#16528])

## Multibody Dynamics and Geometry

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

New features

* Add preliminary support for SceneGraph\<Expression\> ([#16526][_#16526])
* Add meshcat::JointSliders system ([#16400][_#16400], [#16426][_#16426])
* Add SceneGraphInspector::GetParent(FrameId) ([#16368][_#16368])
* Add MultibodyPlant back-pointer into the ContactResults struct ([#16478][_#16478])
* Add unit inertia calculation for a capsule ([#16357][_#16357])
* New hydroelastic contact model in progress ([#16040][_#16040], [#16365][_#16365], [#16366][_#16366], [#16367][_#16367], [#16374][_#16374], [#16458][_#16458], [#16471][_#16471])

Fixes

* Improve error message for unknown GeometryIds ([#16390][_#16390])
* Enable T=Expression in MakeFromCentralInertia ([#16469][_#16469])
* Improve display names for point contact visualization ([#16493][_#16493], [#16515][_#16515])
* Stop putting memory addresses into geometry names ([#16499][_#16499])
* Move ContactResultsToMeshcat into meshcat directory and rename it to ContactVisualizer ([#16437][_#16437])

## Tutorials and examples

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

* Add meshcat display server for drake_visualizer's protocol ([#16263][_#16263], [#16436][_#16436], [#16445][_#16445], [#16452][_#16452], [#16454][_#16454])
* Add missing collision filters to Atlas model ([#16488][_#16488])

## Miscellaneous features and fixes

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

* Add acceleration limits to iiwa14 models ([#16377][_#16377])
* Make JacoCommandReceiver use an input port for initial position ([#16483][_#16483])

## pydrake bindings

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

New features

* Enable CLP in pip wheels ([#16521][_#16521])
* Enable IPOPT in pip wheels ([#16532][_#16532])

Fixes

* None

Newly bound

* pydrake.lcm.DrakeLcmInterface.get_lcm_url ([#16413][_#16413])
* pydrake.systems.framework.System.AllocateImplicitTimeDerivativesResidual ([#16467][_#16467])
* pydrake.systems.framework.System.CalcImplicitTimeDerivativesResidual ([#16467][_#16467])
* pydrake.systems.framework.SystemBase.implicit_time_derivatives_residual_size ([#16467][_#16467])
* pydrake.systems.framework.SystemBase.num_abstract_states ([#16467][_#16467])
* pydrake.systems.framework.SystemBase.num_continuous_states ([#16467][_#16467])
* pydrake.systems.framework.SystemBase.num_discrete_state_groups ([#16467][_#16467])

## Build system

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

* Infer homebrew path based on arch in preparation for ARM64 ([#16389][_#16389])

## Build dependencies

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

* Upgrade recommended Bazel version to 5.0 ([#16405][_#16405], [#16418][_#16418], [#16523][_#16523], [#16546][_#16546])
* Add libcmaes as a testonly dependency ([#16441][_#16441])
* Add dm_control as a testonly dependency ([#16370][_#16370], [#16484][_#16484])
* Upgrade buildifier to latest release 4.2.5 ([#16484][_#16484])
* Upgrade common_robotics_utilities to latest commit ([#16484][_#16484])
* Upgrade googlebenchmark to latest release v1.6.1 ([#16484][_#16484])
* Upgrade ignition_math to latest release ignition-math6_6.10.0 ([#16484][_#16484])
* Upgrade meshcat_python to latest commit ([#16505][_#16505])
* Upgrade ros_xacro to latest release 1.13.16 ([#16484][_#16484])
* Upgrade rules_pkg to latest release 0.6.0 ([#16485][_#16485])
* Upgrade scs to latest release 3.1.0 ([#16484][_#16484])
* Upgrade stduuid to latest commit ([#16387][_#16387])
* Upgrade voxelized_geometry_tools to latest commit ([#16484][_#16484])
* Upgrade vtk to release 9.0 ([#16132][_#16132], [#16419][_#16419])

## Newly-deprecated APIs

* 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).
* drake::manipulation::kinova_jaco::JacoCommandReceiver::get_input_port ([#16483][_#16483])
* drake::manipulation::kinova_jaco::JacoCommandReceiver::set_initial_position ([#16483][_#16483])
* drake::math::RigidTransform::IsIdentityToEpsilon ([#16541][_#16541])
* drake::multibody::ContactResultsToMeshcat ([#16437][_#16437])
* drake::multibody::ContactResultsToMeshcatParams ([#16437][_#16437])
* drake::multibody::PackageMap::PopulateUpstreamToDrake ([#16434][_#16434])
* drake::solvers::MathematicalProgram::NewNonnegativePolynomial ([#16375][_#16375])
* DRAKE_ASSERT_THROWS_MESSAGE overload with three arguments ([#16514][_#16514])
* DRAKE_EXPECT_THROWS_MESSAGE overload with three arguments ([#16514][_#16514])
* DRAKE_ASSERT_THROWS_MESSAGE_IF_ARMED overload with three arguments ([#16514][_#16514])
* DRAKE_EXPECT_THROWS_MESSAGE_IF_ARMED overload with three arguments ([#16514][_#16514])

## Removal of deprecated items

* drake::manipulation::planner::DoDifferentialInverseKinematics overloads using Eigen::Isometry3 ([#15909][_#15909], [#16479][_#16479])
* drake::math::autoDiffToGradientMatrix ([#15699][_#15699], [#16479][_#16479])
* drake::math::autoDiffToValueMatrix ([#15699][_#15699], [#16479][_#16479])
* drake::math::initializeAutoDiffGivenGradientMatrix ([#15699][_#15699], [#16479][_#16479])
* drake::math::initializeAutoDiffTuple ([#15699][_#15699], [#16479][_#16479])
* manipulation::perception::OptitrackPoseExtractor ([#16011][_#16011], [#16479][_#16479])
* multibody::parsing::ModelWeldErrorFunction ([#15949][_#15949], [#16479][_#16479])
* pydrake.multibody.plant.MultibodyPlant.RegisterVisualGeometry overload that uses Isometry3 ([#16008][_#16008], [#16479][_#16479])
* pydrake.multibody.plant.MultibodyPlant.SetFreeBodyPose overload that uses Isometry3 ([#16008][_#16008], [#16479][_#16479])
* pydrake.multibody.plant.MultibodyPlant.WeldFrames overload that uses Isometry3 ([#16008][_#16008], [#16479][_#16479])
* pydrake.multibody.tree.FixedOffsetFrame.\_\_init\_\_ overload that uses Isometry3 ([#16008][_#16008], [#16479][_#16479])
* pydrake.multibody.tree.WeldJoint.\_\_init\_\_ overload that uses Isometry3 ([#16008][_#16008], [#16479][_#16479])
* systems::controllers::CartesianSetpoint ([#16006][_#16006], [#16023][_#16023], [#16479][_#16479])
* systems::controllers::VectorSetpoint ([#16006][_#16006], [#16023][_#16023], [#16479][_#16479])
* testing::CompareTransforms ([#16007][_#16007], [#16479][_#16479])
* testing::ExpectRotMat ([#16007][_#16007], [#16479][_#16479])

# Notes

This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v0.39.0) named
``drake-20220209-{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> -->
[_#15699]: https://github.com/RobotLocomotion/drake/pull/15699
[_#15909]: https://github.com/RobotLocomotion/drake/pull/15909
[_#15949]: https://github.com/RobotLocomotion/drake/pull/15949
[_#16006]: https://github.com/RobotLocomotion/drake/pull/16006
[_#16007]: https://github.com/RobotLocomotion/drake/pull/16007
[_#16008]: https://github.com/RobotLocomotion/drake/pull/16008
[_#16011]: https://github.com/RobotLocomotion/drake/pull/16011
[_#16023]: https://github.com/RobotLocomotion/drake/pull/16023
[_#16040]: https://github.com/RobotLocomotion/drake/pull/16040
[_#16132]: https://github.com/RobotLocomotion/drake/pull/16132
[_#16263]: https://github.com/RobotLocomotion/drake/pull/16263
[_#16357]: https://github.com/RobotLocomotion/drake/pull/16357
[_#16365]: https://github.com/RobotLocomotion/drake/pull/16365
[_#16366]: https://github.com/RobotLocomotion/drake/pull/16366
[_#16367]: https://github.com/RobotLocomotion/drake/pull/16367
[_#16368]: https://github.com/RobotLocomotion/drake/pull/16368
[_#16370]: https://github.com/RobotLocomotion/drake/pull/16370
[_#16373]: https://github.com/RobotLocomotion/drake/pull/16373
[_#16374]: https://github.com/RobotLocomotion/drake/pull/16374
[_#16375]: https://github.com/RobotLocomotion/drake/pull/16375
[_#16377]: https://github.com/RobotLocomotion/drake/pull/16377
[_#16386]: https://github.com/RobotLocomotion/drake/pull/16386
[_#16387]: https://github.com/RobotLocomotion/drake/pull/16387
[_#16389]: https://github.com/RobotLocomotion/drake/pull/16389
[_#16390]: https://github.com/RobotLocomotion/drake/pull/16390
[_#16391]: https://github.com/RobotLocomotion/drake/pull/16391
[_#16396]: https://github.com/RobotLocomotion/drake/pull/16396
[_#16400]: https://github.com/RobotLocomotion/drake/pull/16400
[_#16405]: https://github.com/RobotLocomotion/drake/pull/16405
[_#16409]: https://github.com/RobotLocomotion/drake/pull/16409
[_#16410]: https://github.com/RobotLocomotion/drake/pull/16410
[_#16413]: https://github.com/RobotLocomotion/drake/pull/16413
[_#16418]: https://github.com/RobotLocomotion/drake/pull/16418
[_#16419]: https://github.com/RobotLocomotion/drake/pull/16419
[_#16423]: https://github.com/RobotLocomotion/drake/pull/16423
[_#16424]: https://github.com/RobotLocomotion/drake/pull/16424
[_#16426]: https://github.com/RobotLocomotion/drake/pull/16426
[_#16434]: https://github.com/RobotLocomotion/drake/pull/16434
[_#16436]: https://github.com/RobotLocomotion/drake/pull/16436
[_#16437]: https://github.com/RobotLocomotion/drake/pull/16437
[_#16441]: https://github.com/RobotLocomotion/drake/pull/16441
[_#16445]: https://github.com/RobotLocomotion/drake/pull/16445
[_#16452]: https://github.com/RobotLocomotion/drake/pull/16452
[_#16454]: https://github.com/RobotLocomotion/drake/pull/16454
[_#16458]: https://github.com/RobotLocomotion/drake/pull/16458
[_#16467]: https://github.com/RobotLocomotion/drake/pull/16467
[_#16469]: https://github.com/RobotLocomotion/drake/pull/16469
[_#16471]: https://github.com/RobotLocomotion/drake/pull/16471
[_#16472]: https://github.com/RobotLocomotion/drake/pull/16472
[_#16473]: https://github.com/RobotLocomotion/drake/pull/16473
[_#16477]: https://github.com/RobotLocomotion/drake/pull/16477
[_#16478]: https://github.com/RobotLocomotion/drake/pull/16478
[_#16479]: https://github.com/RobotLocomotion/drake/pull/16479
[_#16483]: https://github.com/RobotLocomotion/drake/pull/16483
[_#16484]: https://github.com/RobotLocomotion/drake/pull/16484
[_#16485]: https://github.com/RobotLocomotion/drake/pull/16485
[_#16488]: https://github.com/RobotLocomotion/drake/pull/16488
[_#16491]: https://github.com/RobotLocomotion/drake/pull/16491
[_#16493]: https://github.com/RobotLocomotion/drake/pull/16493
[_#16499]: https://github.com/RobotLocomotion/drake/pull/16499
[_#16505]: https://github.com/RobotLocomotion/drake/pull/16505
[_#16514]: https://github.com/RobotLocomotion/drake/pull/16514
[_#16515]: https://github.com/RobotLocomotion/drake/pull/16515
[_#16521]: https://github.com/RobotLocomotion/drake/pull/16521
[_#16523]: https://github.com/RobotLocomotion/drake/pull/16523
[_#16526]: https://github.com/RobotLocomotion/drake/pull/16526
[_#16528]: https://github.com/RobotLocomotion/drake/pull/16528
[_#16529]: https://github.com/RobotLocomotion/drake/pull/16529
[_#16532]: https://github.com/RobotLocomotion/drake/pull/16532
[_#16541]: https://github.com/RobotLocomotion/drake/pull/16541
[_#16542]: https://github.com/RobotLocomotion/drake/pull/16542
[_#16546]: https://github.com/RobotLocomotion/drake/pull/16546
<!-- <end issue links> -->

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