---
title: Drake v1.6.0
date: 2022-08-16
released: 2022-08-16
---

# Announcements

* Drake now supports Ubuntu 22.04 ("Jammy Jellyfish") for stable releases via
  the tar.gz binaries and Docker Hub.
  * We anticipate adding pip and apt support in a future release.

* This release marks the first appearance of the new planning folder.
  * The first set of planning software will come from TRI's private Anzu code
     base. Look for this to arrive in chunks over the next several releases.

* On macOS, Drake now supports Python 3.10 (and no longer supports 3.9).

# Breaking changes since v1.5.0

* `drake::math::ExtractGradient` now accounts for the storage order of its
  input, instead of always tracing in ColMajor order. For most users this will
  be no change because Eigen's default storage is ColMajor anyway
  ([#17516][_#17516]).

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

# Changes since v1.5.0

## Dynamical Systems

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

New features

* None

Fixes

* Reverse ApplySimulatorConfig parameter order ([#17654][_#17654])

## Mathematical Program

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

New features

* Extend rational function support ([#17522][_#17522])
* Speed up Expression via nanboxing ([#17544][_#17544])

Fixes

* Remove sparseness_threshold in gurobi_solver; users should change their MathematicalProgram to remove small coefficients, rather than relying on the threshold previously hidden inside gurobi_solver.cc ([#17648][_#17648])
* Add positive_semidefinite_constraints when calling GetAllConstraints ([#17712][_#17712])
* ExtractGradient now accounts for the storage order of its input ([#17516][_#17516])
* Polynomial prunes terms with trivially-zero coefficients ([#17611][_#17611])
* Move ReplaceBilinearTerms from solvers to symbolic namespace ([#17707][_#17707])

## Multibody Dynamics and Geometry

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

New features

* Add PositionCost for inverse kinematics ([#17587][_#17587])
* Add OrientationCost for inverse kinematics ([#17592][_#17592])
* Add GlobalIK::SetInitialGuess and benchmark ([#17608][_#17608])
* Add PolyhedronConstraint as a kinematic constraint ([#17596][_#17596])
* Implement capability to define coupler constraints ([#17639][_#17639])
* Add HPolyhedron::UniformSample ([#17629][_#17629])
* Support generic constraints in IrisInConfigurationSpace ([#17703][_#17703])

Fixes

* Fix incorrect use of InitializeAutoDiff when gradients are not needed ([#17577][_#17577])
* Remove SpatialInertia::MakeTestCube() in favor of SpatialInertia::MakeUnitary() ([#17547][_#17547])
* Provide more feedback when MultibodyPlant query object port is unconnected ([#17485][_#17485])
* Speed up OrientationConstraint implementation ([#17591][_#17591])
* Handle unknown packages gracefully while processing model directives ([#17604][_#17604])
* SDFormat parser uses axis information from universal joints ([#17607][_#17607])
* All bodies and frames must have a non-empty name ([#17632][_#17632])
* Enable kinematic AutoDiffXd simulation with SAP ([#17651][_#17651])
* Fix copy semantics of MeshFieldLinear ([#17670][_#17670])
* Correct WeldJoint frame notation ([#17696][_#17696])


## Planning

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


New features

* Add RobotDiagram and RobotDiagramBuilder ([#17594][_#17594])

Fixes

* None

## Tutorials and examples

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

* Update examples to make use of AddMultibodyPlantSceneGraph ([#17580][_#17580])
* Delete the particles example ([#17653][_#17653])

## Miscellaneous features and fixes

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

* Add reusable code and demo program for hardware simulation ([#17615][_#17615])
  * Add LcmBuses and related config functions ([#17614][_#17614])
  * Add ApplyVisualizerConfig for easy visualizer setup ([#17641][_#17641], [#17645][_#17645])
  * Add ZeroForceDriver for hardware_sim ([#17694][_#17694])
  * Add SchunkWsgDriver to hardware_sim ([#17719][_#17719])
* Ensure runfiles meet their promise of being absolute paths ([#17643][_#17643])
* Enable multiple visualization channels ([#17595][_#17595])
* Add hydroelastic contact surface to meshcat visualization ([#17599][_#17599])
* Improve meldis error message ([#17642][_#17642])
* Auto reconnect to meshcat server ([#17685][_#17685])

## pydrake bindings

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

New features

* None

Fixes

* None

Newly bound

* `geometry.ContactSurface.poly_e_MN` ([#17637][_#17637])
* `geometry.ContactSurface.tri_e_MN` ([#17637][_#17637])
* `geometry.PolygonSurfaceMeshFieldLinear` ([#17637][_#17637])
* `geometry.TriangleSurfaceMesh.area` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.CalcBarycentric` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.CalcBoundingBox` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.CalcCartesianFromBarycentric` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.element` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.Equal` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.num_elements` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.num_triangles` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.num_vertices` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.total_area` ([#17713][_#17713])
* `geometry.TriangleSurfaceMesh.vertex` ([#17713][_#17713])
* `geometry.TriangleSurfaceMeshFieldLinear` ([#17637][_#17637])
* `math.ComputeNumericalGradient` ([#17684][_#17684])
* `math.NumericalGradientMethod` ([#17684][_#17684])
* `math.NumericalGradientOption` ([#17684][_#17684])
* `multibody.plant.MultibodyPlant.WeldFrames` with F, M frame names ([#17696][_#17696])
* `solvers.gurobi.GurobiSolver.AddMipNodeCallback` ([#17704][_#17704])
* `solvers.gurobi.GurobiSolver.AddMipSolCallback` ([#17704][_#17704])
* `solvers.gurobi.GurobiSolver.SolveStatusInfo` ([#17704][_#17704])
* `symbolic.RationalFunction` ([#17522][_#17522])
* `symbolic.SubstituteStereographicProjection` ([#17617][_#17617])
* `systems.lcm.LcmPublisherSystem` constructors that take an LcmInterfaceSystem ([#17668][_#17668])
* `systems.lcm.LcmSubscriberSystem` constructors that take an LcmInterfaceSystem ([#17668][_#17668])

## Build system

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

* Switch to Python 3.10 on macOS ([#17723][_#17723])
* Document all nightly uploads and expiration policies ([#17413][_#17413])
* Add macOS stable releases for pip wheels ([#17619][_#17619])
* Ignore Eigen::Sparse overloads when scipy is missing ([#17570][_#17570])
* Use Ubuntu mirror for MUMPS (wheel builds) ([#17646][_#17646])

## Build dependencies

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

* Remove scipy dependency ([#17559][_#17559])
* Upgrade abseil_cpp_internal to latest commit ([#17669][_#17669])
* Upgrade common_robotics_utilities to latest commit ([#17669][_#17669], [#17702][_#17702])
* Upgrade dm_control_internal to latest commit ([#17669][_#17669])
* Upgrade googlebenchmark to latest release v1.7.0 ([#17669][_#17669])
* Upgrade gz_math_internal to latest version ([#17673][_#17673])
* Upgrade MUMPS to version 5.5.0 ([#17626][_#17626])
* Upgrade mypy to latest commit ([#17552][_#17552])
* Upgrade pycodestyle to latest release 2.9.0 ([#17669][_#17669])
* Upgrade rules_python to latest release 0.10.2 ([#17669][_#17669])
* Upgrade styleguide to latest commit ([#17669][_#17669])
* Upgrade voxelized_geometry_tools to latest commit ([#17669][_#17669], [#17702][_#17702])

## Newly-deprecated APIs

* `//multibody/inverse_kinematics:kinematic_constraint` ([#17575][_#17575])([#17585][_#17585])
* `drake::multibody::Body` when name is empty ([#17632][_#17632])
* `drake::multibody::FixedOffsetFrame` when name is empty, or overload with no name parameter ([#17632][_#17632])
* `drake::multibody::Frame` when name is empty, or overload with no name parameter ([#17632][_#17632])
* `drake::multibody::RigidBody` overload with no name parameter ([#17632][_#17632])
* `drake::multibody::WeldJoint::X_PC` ([#17696][_#17696])
* `drake::solvers::ReplaceBilinearTerms` ([#17707][_#17707])
* `drake::systems::ApplySimulatorConfig` with simulator argument first ([#17654][_#17654])
* `pydrake.multibody.plant.MultibodyPlant.WeldFrames` with P, C frame names ([#17696][_#17696])

## Removal of deprecated items

* Unconditionally installing `scipy` as a dependency of pydrake ([#17559][_#17559])
* `drake::manipulation::kinova_jaco::JacoCommandSender::get_input_port` ([#17660][_#17660])
* `drake::manipulation::kinova_jaco::JacoStatusReceiver::get_state_output_port` ([#17660][_#17660])
* `drake::manipulation::kinova_jaco::JacoStatusReceiver::get_torque_output_port` ([#17660][_#17660])
* `drake::manipulation::kinova_jaco::JacoStatusSender::get_state_input_port` ([#17660][_#17660])
* `drake::solvers::LinearConstraint::A` ([#17660][_#17660])
* `drake::solvers::LinearConstraint::GetSparseMatrix` ([#17660][_#17660])
* `pydrake.math.SpatialForce.Shift` with parameter name p_BpBq_E ([#17660][_#17660])
* `pydrake.math.SpatialMomentum.Shift` with parameter name p_BpBq_E ([#17660][_#17660])
* `setup/ubuntu/install_prereqs.sh --with-kcov` ([#17660][_#17660])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.6.0) named
``drake-20220816-{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> -->
[_#17413]: https://github.com/RobotLocomotion/drake/pull/17413
[_#17485]: https://github.com/RobotLocomotion/drake/pull/17485
[_#17516]: https://github.com/RobotLocomotion/drake/pull/17516
[_#17522]: https://github.com/RobotLocomotion/drake/pull/17522
[_#17544]: https://github.com/RobotLocomotion/drake/pull/17544
[_#17547]: https://github.com/RobotLocomotion/drake/pull/17547
[_#17552]: https://github.com/RobotLocomotion/drake/pull/17552
[_#17559]: https://github.com/RobotLocomotion/drake/pull/17559
[_#17570]: https://github.com/RobotLocomotion/drake/pull/17570
[_#17575]: https://github.com/RobotLocomotion/drake/pull/17575
[_#17577]: https://github.com/RobotLocomotion/drake/pull/17577
[_#17580]: https://github.com/RobotLocomotion/drake/pull/17580
[_#17585]: https://github.com/RobotLocomotion/drake/pull/17585
[_#17587]: https://github.com/RobotLocomotion/drake/pull/17587
[_#17591]: https://github.com/RobotLocomotion/drake/pull/17591
[_#17592]: https://github.com/RobotLocomotion/drake/pull/17592
[_#17594]: https://github.com/RobotLocomotion/drake/pull/17594
[_#17595]: https://github.com/RobotLocomotion/drake/pull/17595
[_#17596]: https://github.com/RobotLocomotion/drake/pull/17596
[_#17599]: https://github.com/RobotLocomotion/drake/pull/17599
[_#17604]: https://github.com/RobotLocomotion/drake/pull/17604
[_#17607]: https://github.com/RobotLocomotion/drake/pull/17607
[_#17608]: https://github.com/RobotLocomotion/drake/pull/17608
[_#17611]: https://github.com/RobotLocomotion/drake/pull/17611
[_#17614]: https://github.com/RobotLocomotion/drake/pull/17614
[_#17615]: https://github.com/RobotLocomotion/drake/pull/17615
[_#17617]: https://github.com/RobotLocomotion/drake/pull/17617
[_#17619]: https://github.com/RobotLocomotion/drake/pull/17619
[_#17626]: https://github.com/RobotLocomotion/drake/pull/17626
[_#17629]: https://github.com/RobotLocomotion/drake/pull/17629
[_#17632]: https://github.com/RobotLocomotion/drake/pull/17632
[_#17637]: https://github.com/RobotLocomotion/drake/pull/17637
[_#17639]: https://github.com/RobotLocomotion/drake/pull/17639
[_#17641]: https://github.com/RobotLocomotion/drake/pull/17641
[_#17642]: https://github.com/RobotLocomotion/drake/pull/17642
[_#17643]: https://github.com/RobotLocomotion/drake/pull/17643
[_#17645]: https://github.com/RobotLocomotion/drake/pull/17645
[_#17646]: https://github.com/RobotLocomotion/drake/pull/17646
[_#17648]: https://github.com/RobotLocomotion/drake/pull/17648
[_#17651]: https://github.com/RobotLocomotion/drake/pull/17651
[_#17653]: https://github.com/RobotLocomotion/drake/pull/17653
[_#17654]: https://github.com/RobotLocomotion/drake/pull/17654
[_#17660]: https://github.com/RobotLocomotion/drake/pull/17660
[_#17668]: https://github.com/RobotLocomotion/drake/pull/17668
[_#17669]: https://github.com/RobotLocomotion/drake/pull/17669
[_#17670]: https://github.com/RobotLocomotion/drake/pull/17670
[_#17673]: https://github.com/RobotLocomotion/drake/pull/17673
[_#17684]: https://github.com/RobotLocomotion/drake/pull/17684
[_#17685]: https://github.com/RobotLocomotion/drake/pull/17685
[_#17694]: https://github.com/RobotLocomotion/drake/pull/17694
[_#17696]: https://github.com/RobotLocomotion/drake/pull/17696
[_#17702]: https://github.com/RobotLocomotion/drake/pull/17702
[_#17703]: https://github.com/RobotLocomotion/drake/pull/17703
[_#17704]: https://github.com/RobotLocomotion/drake/pull/17704
[_#17707]: https://github.com/RobotLocomotion/drake/pull/17707
[_#17712]: https://github.com/RobotLocomotion/drake/pull/17712
[_#17713]: https://github.com/RobotLocomotion/drake/pull/17713
[_#17719]: https://github.com/RobotLocomotion/drake/pull/17719
[_#17723]: https://github.com/RobotLocomotion/drake/pull/17723
<!-- <end issue links> -->

<!--
  Current oldest_commit dc024c28bf306c8f1226fe1b12dbd2800cb63746 (exclusive).
  Current newest_commit 4df89d6516b35aeb7804e38ba74039b1f162c420 (inclusive).
-->
