Drake v1.22.0

Back to Release Notes

Announcements

  • The EventStatus return value is now fully propagated through the System and Simulator API (#20035).
    • This can be useful for systems that need to signal the “reached termination” condition from inside of a Diagram, or otherwise denote recoverable failures (i.e., without throwing exceptions).
  • Drake now provides Python 3.12 wheels for Ubuntu (#20299).
    • macOS support for Python 3.12 is still in progress.
  • Drake now provides a pip-compatible index for installing the nightly build into a virtual environment (#20189).
  • Drake’s support for macOS Monterey (i.e., macOS 12) has reached end of life, as documented on our OS Support page and the Supported Configurations table. This will be the last Drake release that supports macOS Monterey.

Breaking changes since v1.21.0

  • In MultibodyPlant, automatically-added floating joint names no longer have a $world_ prefix (#20253).
    • During the deprecation window GetJointByName() will strip the old prefix as partial compatibility support, but this does not cover all cases.
  • The System class now officially disallows direct inheritance (#20035).
    • The only direct descendants possible are LeafSystem and Diagram. Users must derive from those classes rather than directly from System. Likely this won’t affect anyone.
  • System event dispatch order may have changed (#20035)
    • If user code overrides a System dispatcher function (e.g., DoPublish()) but also invokes the base class default implementation, execution of the default dispatch code is now deferred until the user’s DoPublish() returns; previously it was executed immediately at the invocation point.

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

Changes since v1.21.0

Dynamical Systems

New features

  • Propagate EventStatus through the System and Simulator API (#20035)
  • Improve system Graphviz output substantially (#20204, #20270, #20196, #20228, #20310)
  • Add DiagramBuilder num_input_ports and num_output_ports accessors (#20239)
  • Add LcmBuses protocol for opting out of LCM messaging (#20247)

Fixes

  • RgbdSensor now passes the correct camera pose (#20305)

Mathematical Program

New features

  • Add more MathematicalProgram constraint types (#20317)
    • AddPositiveDiagonallyDominantDualConeMatrixConstraint
    • AddPositiveDiagonallyDominantDualConeMatrixConstraint
    • AddScaledDiagonallyDominantDualConeMatrixConstraint
    • AddScaledDiagonallyDominantDualConeMatrixConstraint

Fixes

  • Improve HPolyhedron::FindRedundant() performance (#20188)
  • MOSEK license acquisition failure prints more info (#20262)

Multibody Dynamics and Geometry

New features

  • Add SapWeldConstraint (#19608)
  • Add ability to disable gravity at a per-model-instance level (#20264)
  • Floating joints for free bodies are given the same name as the free body, with underscores prepended if necessary to avoid name clashes (#20253)
  • Split the inverse kinematics MinimumDistanceConstraint into MinimumDistanceLowerBoundConstraint and MinimumDistanceUpperBoundConstraint (#20266)
  • Add SceneGraph::RemoveRenderer() (#20319)
  • Add SceneGraph accessors for renderers in a Context (#20355)
  • RenderEngineGl supports multiple meshes and materials in *.obj files (#20272)
  • RenderEngineVtk supports multiple meshes and materials in *.obj files (#20235)

Fixes

  • Calls to JointActuator::set_default_gear_ratio() and JointActuator::set_default_rotor_inertia() after Finalize() are now reflected in subsequently-created contexts (#20307)
  • Fix uninitialized memory from disconnected actuation input ports (#20215)
  • Fix duplicated account of actuation when using PD controllers (#20259)
  • Fix segfault in SAP when caching is disabled (#20177)
  • Fix crash when a deformable body is in contact (#20209)
  • Meshcat sets Content-Type for HTML pages (#20237)
  • Add more error checks when loading *.vtk files (#20240)
  • RenderEngineGltfClient improves how input glTFs are handled w.r.t. scene merging and extensions (#20184)

Planning

New features

  • RobotDiagram exports its ports by default (#20238)

Fixes

  • RobotDiagramBuilder fails fast on a missing MultibodyPlant or SceneGraph (#20241)

Tutorials and examples

  • hardware_sim adds an option to output System Graphviz (#20198)

Miscellaneous features and fixes

  • Meldis offers --browser selection on the command line (#20257)
  • The simulated IiwaDriver implements the protocol for opting out of LCM messaging (#20182, #20247)
  • Add hash_append to RollPitchYaw/RotationMatrix/RigidTransform (#20252)

pydrake bindings

New features

  • ColorizeDepthImage accepts either 32F or 16U depth images (#20254)

Fixes

  • Improve error message for solver evaluator return type mistakes (#20178)
  • Bind AffineSubspace::OrthogonalComplementBasis (#20341)

Build system

  • Add Python 3.12 manylinux wheel support (#20299)
  • Add pip-compatible index for installing a nightly build (#20189)
  • Fail-fast in miscofigured VTK build on macOS (#20219)
  • Patch clang.cindex for compatibility with Clang 15 (#20261)
  • Start adding XCode 15 compatibility (still incomplete) (#20287)
  • Work around SNOPT 7.6 incompatibility with modern gfortran versions (#20330)

Build dependencies

  • Add nasm to source prereqs (#20353)
  • Add the @libpng_internal external to build libpng from source (#20276)
  • Add the @libtiff_internal external to build libtiff from source (#20331)
  • Add the @clarabel_cpp_internal external as an opt-in dependency (#20246, #20325)
    • Add supporting Rust externals (also as opt-in dependencies):
      • @build_bazel_apple_support
      • @crate_universe
        • @crate__amd-0.2.2
        • @crate__autocfg-1.1.0
        • @crate__cfg-if-1.0.0
        • @crate__clarabel-0.6.0
        • @crate__darling-0.14.4
        • @crate__darling_core-0.14.4
        • @crate__darling_macro-0.14.4
        • @crate__derive_builder-0.11.2
        • @crate__derive_builder_core-0.11.2
        • @crate__derive_builder_macro-0.11.2
        • @crate__either-1.9.0
        • @crate__enum_dispatch-0.3.12
        • @crate__fnv-1.0.7
        • @crate__ident_case-1.0.1
        • @crate__itertools-0.11.0
        • @crate__lazy_static-1.4.0
        • @crate__num-traits-0.2.16
        • @crate__once_cell-1.18.0
        • @crate__proc-macro2-1.0.67
        • @crate__quote-1.0.33
        • @crate__strsim-0.10.0
        • @crate__syn-1.0.109
        • @crate__syn-2.0.37
        • @crate__thiserror-1.0.48
        • @crate__thiserror-impl-1.0.48
        • @crate__unicode-ident-1.0.12
      • @rules_rust
      • @rules_rust_tinyjson
      • @rust_toolchain
        • @rust_darwin_aarch64__aarch64-apple-darwin__stable
        • @rust_darwin_aarch64__aarch64-apple-darwin__stable_tools
        • @rust_darwin_x86_64__x86_64-apple-darwin__stable
        • @rust_darwin_x86_64__x86_64-apple-darwin__stable_tools
        • @rust_linux_aarch64__aarch64-unknown-linux-gnu__stable
        • @rust_linux_aarch64__aarch64-unknown-linux-gnu__stable_tools
        • @rust_linux_x86_64__x86_64-unknown-linux-gnu__stable
        • @rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools
  • Upgrade @curl_internal to latest release 8.3.0 (#20302)
  • Upgrade @dm_control_internal to latest commit (#20304)
  • Upgrade @gz_utils_internal to latest release 2.1.0 (#20303)
  • Upgrade @rules_rust to latest release 0.28.0 (#20304)
  • Upgrade @sdformat_internal to latest release 14.0.0 (#20303)
  • Upgrade @suitesparse_internal to latest release 7.2.0 (#20304)
  • Upgrade @typing_extensions_internal to latest 4.8.0 (#20304)
  • Upgrade @yaml_cpp_internal to latest release 0.8.0 (#20304)
  • Remove the @libcmaes external (#20245)
  • Remove dependency on bzip2 (#20352)
  • Improve symbol hiding in externals (#20346, #20357, #20358, #20359)

Newly-deprecated APIs

  • drake::multibody::MinimumDistanceConstraint (#20282)
    • Instead, use MinimumDistanceLowerBoundConstraint or MinimumDistanceUpperBoundConstraint.
  • drake::multibody::MinimumDistancePenaltyFunction (#20282)
    • Instead, use drake::solvers::MinimumValuePenaltyFunction.
  • drake::multibody::InverseKinematics::AddMinimumDistanceConstraint (#20282)
    • Instead, use AddMinimumDistanceLowerBoundConstraint.
  • drake::solvers::MinimumValueConstraint (#20282)
    • Instead, use MinimumValueLowerBoundConstraint or MinimumValueUpperBoundConstraint.
  • drake::systems::LeafSystem::DeclarePeriodicDiscreteUpdateNoHandler (#20094)
    • A handler callback is now required.
  • drake::systems::LeafSystem::DeclarePeriodicPublishNoHandler (#20094)
    • A handler callback is now required.
  • drake::systems::LeafSystem::DeclarePeriodicUnrestrictedUpdateNoHandler (#20094)
    • A handler callback is now required.
  • drake::systems::LeafSystem::DoCalcDiscreteVariableUpdates (#20094)
    • Overriding the dispatcher to handle events is deprecated.
  • drake::systems::LeafSystem::DoCalcUnrestrictedUpdate (#20094)
    • Overriding the dispatcher to handle events is deprecated.
  • drake::systems::LeafSystem::DoPublish (#20094)
    • Overriding the dispatcher to handle events is deprecated.
  • drake::systems::System::GetGraphvizFragment() (#20204)
    • Instead, override DoGetGraphvizFragment().
  • drake::systems::System::GetGraphvizId() (#20204)
    • Instead, override DoGetGraphvizFragment().
  • drake::systems::System::GetGraphvizInputPortToken() (#20204)
    • Instead, override DoGetGraphvizFragment().
  • drake::systems::System::GetGraphvizOutputPortToken() (#20204)
    • Instead, override DoGetGraphvizFragment().
  • The @expat external (#20351)
    • The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.
  • The @libpng external (#20276)
    • The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.
  • The @libtiff external (#20331)
    • The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.

Removal of deprecated items

  • drake::geometry::optimization::CSpaceSeparatingPlane five-argument constructor (#19526, #20291)

Notes

This release provides pre-compiled binaries named drake-20231016-{focal|jammy|mac|mac-arm64}.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.