Drake v1.21.0

Back to Release Notes

Announcements

  • Drake builds have switched to use a customized version of VTK, compiled from source (#19945):
    • Previously, on macOS and Ubuntu 20.04 (“Focal”) Drake used a Drake-specific precompiled binary archive downloaded at compile-time. On Ubuntu 22.04 (“Jammy”), Drake previously used the Ubuntu-provided shared libraries.
    • Users on macOS (who are not running Drake’s unit tests) no longer need the robotlocomotion/director tap and may remove it.
    • For CMake users on Ubuntu 20.04 (“Focal”), Drake’s source build and pre-compiled binaries no longer provide a copy of VTK 9.1. If you still need Drake’s build of VTK 9.1 in your project, you can download it here: https://drake-packages.csail.mit.edu/vtk/vtk-9.1.0-3-focal-x86_64.tar.gz
    • To avoid ABI/ODR headaches, Drake’s VTK build uses a custom namespace and hidden symbols. This is particularly an advantage for wheel builds.
    • During manual testing on macOS, we found that RenderEngineVtk sometimes does not obey show_window=true. It is not clear whether this is a new bug due to the upgrade. Refer to #20144 for further discussion.
    • On macOS, when building Drake from source as a bazel external, you must not have build --force_pic in your .bazelrc file (#20217).
    • Drake’s minimum compatible Bazel verison has increased to bazel >= 5.1.
  • CMake users no longer need to install Bazel when building Drake from source (#20064).

Breaking changes since v1.20.0

  • None

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

Changes since v1.20.0

Dynamical Systems

New features

  • Support default scalars for TrajectorySource (#19967)
  • Add to_string for Image metadata enums (#20015)
  • Add PixelScalar Image metadata enum (#20015)
  • Add an initialization event to LcmSubscriberSystem (#20072)
  • Adjust “sole port” getters to work around deprecation (#20090)

Fixes

  • Set subsystem names within InverseDynamicsController (#20078)
  • Use descriptive InverseDynamics port names (#20079)
  • Indicate deprecated ports in Graphviz output (#20080)
  • Fix exception from empty renderer_class config (#20087)

Mathematical Program

New features

  • Handle converting HPolyhedron to VPolytope if it is not full dimensional (#20001)
  • Add HyperRectangles and ConvexSet::CalcVolume() (#19982)
  • Implement symbolic::Polynomial::Roots() (#20161)
  • Add polynomial matrix multiplication overloads (#20099)

Fixes

  • GraphOfConvexSets: don’t try to display costs for convex restriction solutions (#20118)
  • Improve error message for DecomposeLinearExpression and DecomposeAffineExpression (#20065)
  • Give the default Variable a name (#20164)

Multibody Dynamics and Geometry

New features

  • Add MultibodyPlant::GetDefaultPositions() (#19204)
  • Add lights to RenderEngineVtkParams (#19948)
  • RenderEngineVtk consumes and renders glTF (#19961)
  • Support ApplyMultibodyPlantConfig for an existing MultibodyPlant(#20071)
  • Actuators with PD control implicilty integrated with SAP (#20111)

Fixes

  • Fix friction in CalcHydroelasticContactForces in continuous mode simulation (#20022)
  • Fix RenderEngineVtk upside down glTF textures (#20089)
  • URDF parser chooses a canonical frame when parsing planar joint (#20107)
  • Fix alpha sliders for MeshcatVisualizer and Meldis for complex geometries (#20140)
  • Meldis shows tessellated hydro shapes (#20179)

Planning

New features

  • Implement planning::VisibilityGraph() (#19914)
  • CollisionChecker parallelism updates (#20138)

Fixes

  • None

Tutorials and examples

  • Assign missing texture colors in manipulation station (#20096)

Miscellaneous features and fixes

  • Adapat TRI’s internal Parallelism for Drake (#20093)
  • Port PointCloud to new Parallelism API (#20093)
  • Fix some awkward grammar in an error message (#20060)
  • Rewrite the DARE solver to use a faster algorithm (#20104)
  • Configure camera position from Meshcat (#19968)
  • The Meshcat control panel is now resizable (#20000)
  • Add RotationMatrix::MakeClosestRotationToIdentityFromUnitZ (#20107)

pydrake bindings

New features

  • Add bindings for CspaceFreePolytope methods (#19574)
  • Add binding for Systems::ValidateContext (#20073)
  • Add bindings for LcmInterfaceSystem methods (#20074)
  • Add bindings for MultibodyPlant::CalcGeneralizedForce() (#20102)
  • Simulator.AdvanceTo is interruptible by default (#20130)

Fixes

  • Fix GraphOfConvexSets.GetSolutionPath segfault (#20050)
  • Improve error message for missing witness functions (#20106)
  • Bind Formula(bool) constructor (#20119)
  • Add missing repr and docs for polytope options (#20181)

Build system

  • Change clang-format to a testonly dependency (#20028)
  • CMake source builds will use bazelisk to download Bazel when necessary (#20064)
    • CMake users no longer need to install Bazel before building Drake from source.
    • Provide install_prereqs opt-in/opt-out flags for installing Bazel on Ubuntu (#20046)
  • Fix model_visualizer –show_rgbd_sensor (#20112)
  • Drake’s minimum compatible Bazel verison has increased to bazel >= 5.1 (#19945)

Build dependencies

  • Add vendored copy of bazelisk (#20064)
  • Build vendored VTK from source (named @vtk_internal) (#19945, #20068)
  • Upgrade abseil_cpp_internal to latest commit (#20145)
  • Upgrade buildifier to latest release v6.3.3 (#20148)
  • Upgrade googlebenchmark to latest release v1.8.3 (#20148)
  • Upgrade gurobi to 10.0 (#19766)
  • Upgrade gymnasium_py to latest release v0.29.1 (#20148)
  • Upgrade gz_math_internal to latest release gz-math7_7.3.0 (#20146)
  • Upgrade meshcat to latest commit (#20140)
  • Upgrade mypy_internal to latest release v1.5.1 (#20148)
  • Upgrade rules_python to latest release 0.25.0 (#20148)
  • Upgrade stable_baselines3_internal to latest release v2.1.0 (#20147)
  • Upgrade tinyobjloader_internal to latest commit (#20148)
  • Upgrade voxelized_geometry_tools to latest commit (#20163)

Newly-deprecated APIs

  • drake::lcm::DrakeLcm::get_lcm_instance (#20115)
  • drake::multibody::Parser::AddAllModelsFromFile(#19978)
  • drake::multibody::Parser::AddModelFromFile(#19978)
  • drake::systems::controllers::InverseDynamics::get_output_port_force (#20079)
  • drake::systems::controllers::InverseDynamics input port name u0 is changed to estimated_state (#20079)
  • drake::systems::controllers::InverseDynamics input port name u1 is changed to desired_acceleration (#20079)
  • drake::systems::controllers::InverseDynamics output port name y0 is changed to generalized_force (#20079)
  • drake::systems::GenerateHtml (#20183)
  • drake::systems::sensors::Image<drake::systems::sensors::PixelType::kExpr> (#20023)
  • drake::systems::sensors::PixelFormat::kExpr (#20023)
  • drake::systems::sensors::PixelType::kExpr (#20023)
  • The @double_conversion external (#19945)
    • 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’s setup script install it.
  • The @glew external (#19945)
    • 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’s setup script install it.
  • The @liblz4 external (#19945)
    • 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’s setup script install it.
  • The @liblzma external (#19945)
    • 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’s setup script install it.
  • The @vtk external (#19945)
    • 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’s setup script install it.

Removal of deprecated items

  • drake::geometry::optimization::GetCollisionGeometries (#20085)
  • drake::planning::MultipleShooting::timestep (#20085)
  • drake::planning::MultipleShooting::fixed_timestep (#20085)
  • drake::planning::MultipleShooting::timesteps_are_decision_variables (#20085)
  • drake::solvers::SolutionResult::kUnknownError (#20085)
  • drake::systems::lcm::Serializer::Clone (#20085)
  • drake::visualization::ApplyVisualizationConfig overload taking a const SceneGraph (#20085)
  • pydrake.planning.AddDirectCollocationConstraint(timestep=...) (#20085)
  • pydrake.planning.DirectCollocation(minimum_timestep=..., maximum_timestep=...) (#20085)
  • pydrake.planning.DirectTranscription(fixed_timestep=...) (#20085)
  • pydrake.systems.primitives.DiscreteTimeDelay(delay_timesteps=...) (#20085)

Notes

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