Drake v1.5.0

Back to Release Notes


  • Drake now supports Ubuntu 22.04 (“Jammy Jellyfish”) when building from source or using a nightly build (#17489).
    • We anticipate adding Jammy as a stable release in the next (August) release.
  • This release enables the new Semi-Analytic Primal (“SAP”) contact solver option:
    • This is an option for the solver used to compute contact forces during simulation.
    • SAP has theoretical guaranteed global convergence and therefore should always succeed. As a result it is stable at larger time steps, yielding faster simulations.
    • There is a limit to how large the time step size can be:
      • The time step must be small enough to resolve the relevant dynamics of the problem.
      • Time step sizes that are too large might lead to tunneling – objects passing through each other without interacting due to contact.
    • SAP exploits the sparsity of the problem, and so you can expect a greater speedup for complex models with multiple robots and objects.
    • The treatment of joint damping and rotor inertia is implicit and therefore very stable; this enables the modeling of stiff damping components. We strongly encourage you to include damping and/or rotor inertia for the modeling of small gripper fingers.
    • SAP uses a linear model of compliant contact forces in which dissipation is parameterized by drake::relaxation_time; see #17087 for some preliminary documentation. This parameter has a default value of 100 ms but you can change it on a per-geometry basis in your SDF/URDF model files.

    Keep in mind that the solver is relatively new and is likely to have bugs. Therefore, this solver is not on by default (the default remains the TAMSI solver). You can enable this solver for your simulation via the MultibodyPlant::set_contact_solver() method or the corresponding MultibodyPlantConfig option.

For details, refer to [Castro et al., 2022].

Breaking changes since v1.4.0

  • The protected constructor for class drake::multibody::Body removed the mass parameter (#17472).
    • Users who were subclassing Body will need to update their code to match.
  • The class drake::multibody::Body renamed a pure virtual member function from get_default_mass() to default_mass() (#17528).
    • Users who were subclassing Body will need to update their code to match.

Refer to our Drake Stability Guidelines for our policy on API changes.

Changes since v1.4.0

Dynamical Systems

  • None


  • None

Mathematical Program

New features

  • Replace sin/cos in a symbolic polynomial with half-angle rational functions (#17491)
  • Add and use MatrixLikewise sugar typedef (derives an Eigen::Matrix type of same topology but different scalar) #17497)


  • When multiplying a variable and a polynomial, include that variable in the result’s decision variables. (#17543)

Multibody Dynamics and Geometry

New features

  • Add MultibodyPlant::set_contact_solver() and corresponding MultibodyPlantConfig option (#17400) (#17545)
  • Parse relaxation_time for SAP (#17512) (#17554)
  • Meshcat now displays a performance strip chart including realtime rate (#16981)
  • Add ProcessModelDirectives overload with a simpler signature (#17450)
  • Add PackageMap::PopulateFromRosPackagePath (#17251)


  • Remove redundant default mass in body.h in favor of default mass in rigid_body.h (#17472)
  • Add missed check in SDFormat drake:proximity_properties (#17510)
  • MultibodyPlant documentation now warns users about preconditions for finalize() (#17445)
  • Improve error detection and messages for all-zero quaternions (#17399)
  • More robust parsing of .mtl texture map filenames (#17550)

Tutorials and examples

  • Manipulation station end-effector joystick control demo updated to use C++ Meshcat interface, more consistent option names (#17300)
  • Fold pydrake.examples into a single module (#17454)
  • Use AcrobotParams for AcrobotPlant::SetMitAcrobotParameters (#17423)

Miscellaneous features and fixes

  • Add UR3e model and TRI Homecart (#17387)
  • During yaml serialization, output special floating point values correctly (#17517)
  • Extract core symbolic algebra into its own library (#17419)
  • Separate remaining non-core symbolic files into smaller libraries (#17479)
  • Add –host option to meldis (#17477)

pydrake bindings

New features

  • Fold pydrake.solvers into a single module (#17453)


  • None

Newly bound

  • systems.sensors.CameraInfo.{fov_x,fov_y} (#17428)
  • multibody.inverse_dynamics.global_ik (#17504)

Build system

  • Don’t rename github files or directories named “build” (for compatibility with https://github.com/mrdoob/stats.js) (#17534)
  • Remove build-time transitive dependency on LCM headers (#17442)

Build dependencies

  • Remove dependency on python3-tk (#17438)
  • Add pydrake build-time dependency on mypy (#17521)
  • Add pydrake build-time dependency on mypy_extensions (#17521)
  • Add pydrake build-time dependency on tomli (#17521)
  • Add pydrake build-time dependency on typing_extensions (#17521)
  • Upgrade abseil_cpp_internal to latest commit (#17431, #17496)
  • Upgrade common_robotics_utilities to latest commit (#17496)
  • Upgrade gtest to latest release release-1.12.1 (#17452, #17496)
  • Upgrade petsc to latest release v3.17.3 (#17509)
  • Upgrade picosat to latest commit (#17505)
  • Upgrade pybind11 to address numpy 1.23 issue (#17475)
  • Upgrade rules_python to latest release 0.10.0 (#17496)
  • Upgrade stduuid to latest commit (#17496)
  • Upgrade tinyobjloader to latest commit (#17496)

Newly-deprecated APIs

  • drake::autodiffxd_make_coherent (#17499)
  • The header common/symbolic.h (include more specific headers instead) (#17479)
  • All symbolic libraries in the @drake bazel module (all //common:symbolic_<name> have moved to //common/symbolic:<name>) (#17479)
    • //common:symbolic
    • //common:symbolic_decompose
    • //common:symbolic_latex
    • //common:symbolic_trigonometric_polynomial
  • pydrake.geometry.MeshcatVisualizerCpp (#17462)
  • drake::multibody::GlobalInverseKinematics.AddWorldPositionConstraint(...Eigen::Isometry3d...) (#17504)
  • drake::multibody::Body.get_default_mass() (#17528)

Removal of deprecated items

  • drake::systems::AntiderivativeFunction::IntegrableFunctionContext (#17459)
  • drake::systems::AntiderivativeFunction::AntiderivativeFunction(...IntegrableFunctionContext...) (#17459)
  • drake::systems::AntiderivativeFunction::Evaluate(...IntegrableFunctionContext...) (#17459)
  • drake::systems::AntiderivativeFunction::MakeDenseEvalFunction(...IntegrableFunctionContext...) (#17459)
  • drake::systems::InitialValueProblem::OdeContext (#17459)
  • drake::systems::InitialValueProblem::InitialValueProblem(...OdeContext...) (#17459)
  • drake::systems::InitialValueProblem::Solve(...OdeContext...) (#17459)
  • drake::systems::InitialValueProblem::DenseSolve(...OdeContext...) (#17459)
  • drake::systems::ScalarInitialValueProblem::ScalarOdeContext (#17459)
  • drake::systems::ScalarInitialValueProblem::ScalarInitialValueProblem(...ScalarOdeContext...) (#17459)
  • drake::systems::InitialValueProblem::Solve(...OdeContext...) (#17459)
  • drake::systems::InitialValueProblem::DenseSolve(...OdeContext...) (#17459)
  • pydrake.solvers.mathematicalprogram.Infeasible_Or_Unbounded (#17460)
  • @drake//solvers:system_identification (#17460)
  • drake::solvers::NonsmoothAugmentedLagrangian (#17460)
  • pydrake.multibody.math.SpatialAcceleration.Shift with monographed kwargs (#17461)
  • pydrake.multibody.math.SpatialAcceleration.ComposeWithMovingFrameAcceleration with monographed kwargs (#17461)
  • @drake//solvers:trig_poly (#17461)


This release provides pre-compiled binaries named drake-2022-07-14-{focal|mac}.tar.gz. See Stable Releases for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of SNOPT as part of the Mathematical Program toolbox. Thanks to Philip E. Gill and Elizabeth Wong for their kind support.