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).
- Refer to Installation via Pip for instructions.
- 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.
- During the deprecation window
- 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
*.objfiles (#20272) - RenderEngineVtk supports multiple meshes and materials in
*.objfiles (#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
*.vtkfiles (#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
--browserselection 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
nasmto source prereqs (#20353) - Add the
@libpng_internalexternal to build libpng from source (#20276) - Add the
@libtiff_internalexternal to build libtiff from source (#20331) - Add the
@clarabel_cpp_internalexternal 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
- Add supporting Rust externals (also as opt-in dependencies):
- Upgrade
@curl_internalto latest release 8.3.0 (#20302) - Upgrade
@dm_control_internalto latest commit (#20304) - Upgrade
@gz_utils_internalto latest release 2.1.0 (#20303) - Upgrade
@rules_rustto latest release 0.28.0 (#20304) - Upgrade
@sdformat_internalto latest release 14.0.0 (#20303) - Upgrade
@suitesparse_internalto latest release 7.2.0 (#20304) - Upgrade
@typing_extensions_internalto latest 4.8.0 (#20304) - Upgrade
@yaml_cpp_internalto latest release 0.8.0 (#20304) - Remove the
@libcmaesexternal (#20245) - Remove dependency on
bzip2(#20352) - Improve symbol hiding in externals (#20346, #20357, #20358, #20359)
Newly-deprecated APIs
drake::multibody::MinimumDistanceConstraint(#20282)- Instead, use
MinimumDistanceLowerBoundConstraintorMinimumDistanceUpperBoundConstraint.
- Instead, use
drake::multibody::MinimumDistancePenaltyFunction(#20282)- Instead, use
drake::solvers::MinimumValuePenaltyFunction.
- Instead, use
drake::multibody::InverseKinematics::AddMinimumDistanceConstraint(#20282)- Instead, use
AddMinimumDistanceLowerBoundConstraint.
- Instead, use
drake::solvers::MinimumValueConstraint(#20282)- Instead, use
MinimumValueLowerBoundConstraintorMinimumValueUpperBoundConstraint.
- Instead, use
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().
- Instead, override
drake::systems::System::GetGraphvizId()(#20204)- Instead, override
DoGetGraphvizFragment().
- Instead, override
drake::systems::System::GetGraphvizInputPortToken()(#20204)- Instead, override
DoGetGraphvizFragment().
- Instead, override
drake::systems::System::GetGraphvizOutputPortToken()(#20204)- Instead, override
DoGetGraphvizFragment().
- Instead, override
- The
@expatexternal (#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
@libpngexternal (#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
@libtiffexternal (#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
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.