Drake v1.16.0

Back to Release Notes

Announcements

  • The powerful Graph of Convex Sets (“GCS”) Trajectory Optimization class makes its first appearance in this release. The initial release only offers a few costs and constraints. Future releases will grow the feature set.
  • The new rendering server drake-blender can be used with Drake’s RenderEngineGltfClient.
  • Symbolic matrix multiplication in pydrake runs faster now if you call the pydrake.math.matmul function instead of the @ operator.
  • We continue to work on improving mesh geometry support for the illustration and perception roles. Future releases will contain even more updates.

Breaking changes since v1.15.0

  • Filter contact results for completely locked trees (#19349)
    • The members of ContactResults will no longer be in bijection with the geometry quantities (PenetrationAsPointPair and ContactSurface) that inform the solver of contact. Geometric contact data between completely locked trees will simply be ignored.
    • Any program that made the assumption that: num_contact_results = num_point_pairs + num_contact_surfaces will be broken.
  • Remove pydrake.geometry.optimization.CopyableUniquePtrConvexSet (#19343)
    • Please use pydrake.geometry.optimization.ConvexSet
  • Update RenderEngineVtk to use RenderMaterial for appearance data (#19383)
    • Materials defined in a mtl file for an obj file foo.obj will now be preferred over arbitrarily using the file foo.png in the same directory. This may change mesh appearance.

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

Changes since v1.15.0

Dynamical Systems

New features

  • Add DiagramBuilder::RemoveSystem (#19243)
  • Add IsDetectable and IsStabilizable to LinearSystem class (#19289)

Fixes

  • Change DiscreteDerivative’s suppress_initial_transient default value to true (#19247)
  • Throw an error when Riccati equation is not solved for continuous time system (#19222)

Mathematical Program

New features

  • Add optional rounding solver options (#18875)
  • Add GetExpression to BezierCurve (#19205)
  • Support IRIS initial ellipse (#19257)
  • Add max_explored_nodes for branch_and_bound (#19366)
  • Add ExpressionCost (#19405)
  • Add Spectrahedron isa ConvexSet (#19316)

Fixes

  • Speed up symbolic matmul (#19304, #19345)
  • Fix a bug when calling ConstructMonomialBasis with a constant polynomial (#19233)
  • Make GraphOfConvexSets preprocessing respect solver options (#19312)

Multibody Dynamics and Geometry

New features

  • Add Rgba::update to selectively change values (#19237)
  • Exposes SAP near rigid threshold (#19218)
  • Add GeometryInstance overload without unique_ptr (#19251)
  • Add SpatialInertia::SolidSphereWithMass() and HollowSphereWithMass() (#19268)
  • ShapeReifier can configure default behavior (#19367)
  • Calculate principal moments of inertia and their axes (#19281)
  • Ability for MeshcatVisualizer to filter geometry via property (#19220)
  • Enable alpha adjustment of invisible geometry (#19287)

Fixes

  • Throw exceptions for spatial inertia primitives with mass or density that is not positive and finite (#19192)
  • Set random state to default when distribution is missing (#19230)
  • Improve URDF inertia invalidity handling (#19238)
  • Sample MultibodyPlant input force ports discretely (#19225)
  • Respect axis element for planar joint in URDF (#19355)
  • Improve SDFormat inertia handling (#19245)
  • Fix RenderEngine to properly incorporate sensor pose in camera body (#19398)
  • Unify spatial inertia calculations in Mujoco parser (#19342)
  • Improve error message for !(Delta > 0) (#19407)
  • Map white color to kDontCare in render_gltf_client (#19397)

Planning

New features

  • Add GcsTrajectoryOptimization (#19239)
  • Add a time cost to GcsTrajectoryOptimization (#19301)
  • Add velocity bounds to subgraphs of GcsTrajectoryOptimization (#19334)

Fixes

  • Improve performance of SceneGraphCollisionChecker through better collision filtering (#19387)

Tutorials and examples

  • Add support for T=Expression to QuadrotorPlant example (#19256)

Miscellaneous features and fixes

  • Add render camera preview (#19158)
  • Add hash_append support for bare pointers (#19248)
  • Update models of the IIWA 14 with estimated reflected inertia (#19344)
  • Use shared_ptr for LCM serializers (#19369)
  • Improve math::AreAutoDiffVecXdEqual (#19393)

pydrake bindings

New features

  • Add pydrake.math.matmul (#19298)

Fixes

  • Fix CompositeTrajectory constructor argument type (#19252)
  • Fix docs & mypy stubs for GraphOfConvexSets (#19283)
  • Handle nulls in ImportError reporting (#19296)

Newly bound

  • pydrake.geometry.SceneGraph.ChangeShape() (#19278)
  • pydrake.multibody.optimization.QuaternionEulerIntegrationConstraint.ComposeVariable() (#19288)
  • pydrake.multibody.optimization.QuaternionEulerIntegrationConstraint.allow_quaternion_negation() (#19288)
  • pydrake.multibody.tree.SpatialInertia.SolidSphereWithMass() and HollowSphereWithMass() (#19268)

Build system

  • Add missing runfiles to bazel drake_shared_library (#19294)
  • Fix FindResource vs non-source Bazel builds (#19206)

Build dependencies

  • Build IPOPT 3.14.12 from source on Ubuntu (#19388)
  • Upgrade abseil_cpp_internal to latest commit (#19332)
  • Upgrade buildifier to latest release v6.1.2 (#19332)
  • Upgrade common_robotics_utilities to latest commit (#19332)
  • Upgrade dm_control_internal to latest commit (#19332)
  • Upgrade lcm to latest release v1.5.0 (#19332)
  • Upgrade optitrack_driver to latest commit (#19324)
  • Upgrade petsc to latest release v3.19.1 (#19332)
  • Upgrade rules_python to latest release 0.21.0 (#19332)
  • Upgrade stable_baselines3_internal to latest release v1.8.0 (#19187)
  • Upgrade styleguide to latest commit (#19277)

Newly-deprecated APIs

  • drake::geometry::optimization::GetCollisionGeometries (#19368)
  • drake::systems::lcm::Serializer::Clone (#19369)
  • drake::visualization::ApplyVisualizationConfig overload taking a const SceneGraph (#19217)
  • pydrake.geometry.GeometryInstance.release_shape #19251)
  • Drop the render qualifier for pydrake.geometry.render (#19241)
    • Everything in pydrake.geometry.render should be imported from pydrake.geometry now.

Removal of deprecated items

  • drake::multibody::Parser::AddModelFromString (#19413)
  • drake::systems::trajectory_optimization (moved elsewhere) (#18697, #19307)
  • On macOS, the --with-maintainer-only install_prereqs flag (#18665, #19307)
  • pydrake.examples.acrobot as a sub-module (#18685, #19307)
  • pydrake.examples.compass_gait as a sub-module (#18685, #19307)
  • pydrake.examples.manipulation_station as a sub-module (#18685, #19307)
  • pydrake.multibody.parsing.Parser.AddModelFromString (#19413)
  • pydrake.solvers.augmented_lagrangian as a sub-module (#18683, #19307)
  • pydrake.solvers.branch_and_bound as a sub-module (#18683, #19307)
  • pydrake.solvers.clp as a sub-module (#18683, #19307)
  • pydrake.solvers.csdp as a sub-module (#18683, #19307)
  • pydrake.solvers.dreal as a sub-module (#18683, #19307)
  • pydrake.solvers.gurobi as a sub-module (#18683, #19307)
  • pydrake.solvers.ipopt as a sub-module (#18683, #19307)
  • pydrake.solvers.mathematicalprogram as a sub-module (#18683, #19307)
  • pydrake.solvers.mixed_integer_optimization_util as a sub-module (#18683, #19307)
  • pydrake.solvers.mixed_integer_rotation_constraint as a sub-module (#18683, #19307)
  • pydrake.solvers.mosek as a sub-module (#18683, #19307)
  • pydrake.solvers.nlopt as a sub-module (#18683, #19307)
  • pydrake.solvers.osqp as a sub-module (#18683, #19307)
  • pydrake.solvers.scs as a sub-module (#18683, #19307)
  • pydrake.solvers.sdpa_free_format as a sub-module (#18683, #19307)
  • pydrake.solvers.snopt as a sub-module (#18683, #19307)
  • pydrake.systems.trajectory_optimization (moved elsewhere) (#18697, #19307)
  • The @ccd bazel external (#18611, #19307)
  • The @fcl bazel external (#18611, #19307)
  • The @msgpack external (#18559, #19307)
  • The @osqp bazel external (#18690, #19307)
  • The @qdldl bazel external (#18690, #19307)
  • The @scs bazel external (#18690, #19307)
  • The @stduuid bazel external (#18610, #19307)
  • The @suitesparse bazel external (#18690, #19307)
  • The parameter absolute_pathname in pydrake.geometry.Mesh() and pydrake.geometry.Convex() (#18536, #19307)

Notes

This release provides pre-compiled binaries named drake-20230518-{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.