Drake v1.20.0

Back to Release Notes

Announcements

  • Drake Gym is now available, to simplify combining Drake simulations with reinforcement learning toolkits. See the documentation here. (#19831)
  • The new DRAKE_PYTHON_LOGGING environment variable offers more control over logging when using pydrake. In certain cases where C++ multi-threaded code is bound in Python, it may be detrimental to use existing spdlog Python redirection for either performance (e.g. control loop) or deadlock issues (GIL). These settings allow users to avoid these issues, at the cost of having inconsistent logging from Python. See the documentation here. (#19703)
  • Drake now includes a fix_inertia tool, to compute inertia tensors from masses and geometries in models. It works on both URDF and SDFormat models, and outputs a complete updated model file. See the documentation here. (#19731)
  • MultibodyPlant::CalcReactionForces() has been fixed and now gives correct results in discrete mode for both TAMSI and SAP, including contributions from constraints. (#19920)

Breaking changes since v1.19.0

  • C++ code that was reading from the systems::sensors::CameraConfig::renderer_class field now gets a std::variant back, instead of a std::string directly. Downstream code will need to adapt with std::get_if<std::string>(&params.renderer_class) to compensate. (#19863)
  • geometry::optimization::GraphOfConvexSets no longer has VertexId and EdgeId overloads. The class is marked experimental, so some changes are made without deprecation. In particular, python users of the removed overloads should get a useful message telling them to use the other overload. AddEdge, RemoveVertex, and RemoveEdge have changed (without deprecation) from taking const Vertex& to Vertex*. The previously asserted const-ness was incorrect. This change will not impact python users. (#19825)
  • geometry::optimization::CIrisSeparatingPlane is removed. The return type of CspaceFreePolytopeBase::separating_planes() is changed from CIrisSeparatingPlane to CSpaceSeparatingPlane. (#19756)

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

Changes since v1.19.0

Dynamical Systems

New features

  • Add SimulatorConfig support to FiniteHorizonLQR. (#19765)
  • Add optional publish_offset to LcmPublisherSystem. (#19899)
  • Add capture_offset and output_delay to CameraConfig. (#19898)
  • CameraConfig can use RenderEngineParams. (#19863)

Fixes

  • Improve DiagramBuilder::Build performance. (#19746)
  • Fix wrong SystemId on the ports of a cloned system. (#19875)
  • Allow GetDowncastSubsystemByName to work with non-templatized systems. (#19925)
  • Propagate EventStatus through Event handlers. (#19989)

Mathematical Program

New features

  • MathematicalProgram
    • Add MathematicalProgramResult::SetSolution(). (#19790)
    • Add MathematicalProgramResult::get_decision_variable_index() (#19814)
    • Implement MathematicalProgram::ToLatex(). (#19942)
  • GraphOfConvexSets
    • Add GraphOfConvexSets::SolveConvexRestriction(). (#19785)
    • Add GraphOfConvexSets::GetSolutionPath() and supporting introspection methods. (#19792)
    • Use GraphOfConvexSets::SolveConvexRestriction in rounding. (#19816)
  • ConvexSet
    • Implement MaybeGetFeasiblePoint for ConvexSet. (#19804)
    • Update ConvexSet logic to properly handle zero-dimensional sets. (#19732)
    • Improve implementations of DoMaybeGetFeasiblePoint for some subclasses of ConvexSet. (#19824)
    • Create base-class version for IsBounded in ConvexSet, and let Intersection and Spectrahedron use it. (#19888)
    • Create AffineSubspace subclass of ConvexSet. (#19828, #19850, #19851, #19864, #19975)
  • Misc. Optimization
    • Improve IrisInConfigurationSpace performance: Reuse counter-examples from the previous iteration. (#19835)
    • Implement Hyperellipsoid::MinimumVolumeCircumscribedEllipsoid. (#19857)

Fixes

  • Handle bounding box constraints in MakeSemidefiniteRelaxation. (#19795)
  • Fix bug in DoAddPointInNonnegativeScalingConstraints for Spectrahedron. (#19838)
  • Fix ParseConstraint for cases with infinities. (#19903)
  • Handle converting VPolytope to HPolyhedron if it is not full dimensional. (#19979)

Multibody Dynamics and Geometry

New features

  • SAP
    • Enable/Disable SAP constraints at runtime. (#19884)
    • Parsing support for ball constraints in SDF/URDF. (#19780)
  • Misc. Multibody
    • Support collision filtering for deformable geometries. (#19897)
    • Introduce MultibodyPlant::RenameModelInstance(). (#19939)
    • Add SpatialInertia::SolidCylinderWithMassAboutEnd(). (#19803)
  • Meshcat
    • Environment mapping support. (#19837)
  • Rendering
    • RenderEngineGl loads .mtl files. (#19747)
    • Add lights to RenderEngineGlParams. (#19693)
    • RenderEngineGlParams are compatible now with YAML serialization. (#19912)
    • RenderEngineGltfClientParams are compatible now with YAML serialization. (#19906)
    • RenderEngineVtkParams are compatible now with YAML serialization. (#19911)

Fixes

  • SAP
    • Fix results of CalcReactionForces() in discrete mode. (#19920)
    • Fix SAP coupler constraint incorrect position/velocity indexing bug. (#19902)
  • Meshcat
    • Fix MeshcatVisualizer initialization of alpha sliders. (#19813)
    • Increase range of Meshcat’s search for an open port. (#19960)
  • Rendering
    • Fix to merging gltf in RenderEngineGltfClient. (#19896)
    • Remove beta testing tag from RenderEngineGltf doxygen. (#19997)
    • Demote warning message for too many materials. (#19815)
  • Misc. Multibody
    • Fix names shown off-by-one in RationalForwardKinematics var names. (#19797)

Planning

New features

  • Construct MinimumDistanceConstraint with a CollisionChecker. (#19760)
  • Add new DistanceAndInterpolationProvider API to CollisionChecker. (#19105)
  • Add GcsTrajectoryOptimization::graph_of_convex_sets accessor. (#19873)

Fixes

  • Improve implementation of GcsTrajectoryOptimization::Subgraph costs and constraints. (#19873)

Tutorials and examples

  • Add option to model Strandbeest with constraints. (#19782)
  • Add new models to the collection in manipulation_station/models. (#19771)

Miscellaneous features and fixes

  • Implement BezierCurve::DerivativeControlPointCoefficients(). (#19867)
  • Update inertias for link 2 and link 4 for the iiwas that were mistakenly rotated by 90 degrees. (#19830)
  • Fix integer overflow in ToLatex implementation. (#19951)
  • Fix YAML round-trip bugs with variant<string,...>. (#19954)

pydrake bindings

New features

  • common.use_native_cpp_logging (#19703)
  • gym.DrakeGymEnv (#19831)
  • math.SoftOverMax (#19789)
  • math.SoftOverMin (#19789)
  • math.SoftUnderMax (#19789)
  • math.SoftUnderMin (#19789)
  • multibody.inverse_kinematics.MinimumDistanceConstraint constructor overloads that accept a CollisionChecker. (#19921)
  • multibody.inverse_kinematics.MinimumDistanceConstraint constructor overloads that accept a Python penalty function. (#19855)
  • multibody.plant.MultibodyPlant.GetFrameIndices (#19964)
  • solvers.MathematicalProgram.AddLinearConstraint overload that accepts a row vector. (#19962)
  • solvers.MinimumValueConstraint (#19839)
  • systems.framework.SystemBase.HasInputPort (#19806)
  • systems.framework.SystemBase.HasOutputPort (#19806)
  • Add visualization triads in meldis. (#19848)

Fixes

  • Add missing import to fix DirectCollocation bindings. (#19938)
  • Fix Meldis to recognize mesh file content changes. (#19878)
  • Improve error message for un-imported Value<> binding. (#19984)
  • Add missing pydrake.systems.sensors import to the examples. (#19985)

Build system

  • Remove spurious lcm-gen dependency (#19788)
  • Remove vestigial meshcat files from the install (#19877)
  • Install the picosha2 LICENSE file (#19879)

Build dependencies

  • Add dependency on gymnasium_py (#19831, #19909)
  • Build clp_internal from source (#19928)
  • Hide symbols from clp_internal (#19928)
  • Hide symbols from common_robotics_utilities (#19893)
  • Hide symbols from conex_internal (#19892)
  • Hide symbols from csdp_internal (#19894)
  • Hide symbols from picosha2_internal (#19879)
  • Hide symbols from tinyobjloader_internal (#19880)
  • Hide symbols from usockets_internal (#19889)
  • Patch googlebenchmark to avoid shadow warnings (#19796)
  • Stop using a <drake_vendor/…> prefix on external include paths (#19936)
  • Upgrade abseil_cpp_internal to latest commit (#19778, #19929)
  • Upgrade bazel to latest release 6.3.1 (#19891)
  • Upgrade common_robotics_utilities to latest commit (#19729, #19893)
  • Upgrade curl_internal to latest release 8.2.1 (#19934)
  • Upgrade dm_control_internal to latest commit (#19773, #19929)
  • Upgrade drake_models to latest commit (#19771)
  • Upgrade googlebenchmark to latest release 1.8.2 (#19773)
  • Upgrade gtest to latest release 1.14.0 (#19932)
  • Upgrade gz_math_internal to latest release 7.2.0 (#19776)
  • Upgrade libcmaes to latest commit (#19773)
  • Upgrade meshcat to latest commit (#19817, #19837)
  • Upgrade mosek to release 10.0.46 (#19798)
  • Upgrade msgpack_internal to latest release 6.1.0 (#19773)
  • Upgrade mypy_internal to latest release 1.4.1 (#19773)
  • Upgrade nanoflann_internal to latest release v1.5.0 (#19775)
  • Upgrade optitrack_driver to latest commit (#19929)
  • Upgrade petsc to latest release 3.19.3 (#19773)
  • Upgrade platforms to latest release 0.0.7 (#19929)
  • Upgrade pycodestyle to latest release 2.11.0 (#19933)
  • Upgrade qdldl_internal to latest release 0.1.7 (#19773)
  • Upgrade rules_python to latest release 0.24.0 (#19773)
  • Upgrade stable_baselines3_internal to latest release 2.0.0 (#19909)
  • Upgrade suitesparse_internal to latest release 7.1.0 (#19773)
  • Upgrade tinyobjloader to latest commit (#19773)
  • Upgrade typing_extensions_internal to latest release 4.7.0 (#19773)
  • Upgrade voxelized_geometry_tools to latest commit (#19729, #19929)

Newly-deprecated APIs

  • pydrake.manipulation.kuka_iiwa (#19869)
  • pydrake.manipulation.schunk_wsg (#19869)
  • pydrake.manipulation.util (#19869)
  • drake::geometry::RenderEngineGlParams::default_label (#19912)
  • drake::geometry::RenderEngineGltfClientParams::default_label (#19906)
  • drake::geometry::RenderEngineVtkParams::default_label (#19911)
  • drake::multibody::UnitInertia::AxiallySymmetric requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::SolidCapsule three-argument form requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::SolidCylinder three-argument form requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::SolidCylinder two-argument form (#19926)
  • drake::multibody::UnitInertia::SolidCylinderAboutEnd three-argument form requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::StraightLine requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::ThinRod requires a normalized unit vector (#19926)
  • drake::multibody::UnitInertia::SolidCylinderAboutEnd two-argument overload (#19803)
  • drake::systems::DiscreteUpdateEvent::DiscreteUpdateCallback (#19989)
  • drake::systems::DiscreteUpdateEvent::DiscreteUpdateEvent overloads taking legacy callback type signatures (#19989)
  • drake::systems::DiscreteUpdateEvent::SystemCallback (#19989)
  • drake::systems::PublishEvent::PublishCallback (#19989)
  • drake::systems::PublishEvent::PublishEvent overloads taking legacy callback type signatures (#19989)
  • drake::systems::PublishEvent::SystemCallback (#19989)
  • drake::systems::UnrestrictedUpdateEvent::SystemCallback (#19989)
  • drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateCallback (#19989)
  • drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateEvent overloads taking legacy callback type signatures (#19989)
  • The @clp external (#19928)
    • Drake now refers to @clp_internal instead⁽¹⁾.
  • The @conex external (#19883)
    • Drake now refers to @conex_internal instead⁽¹⁾.
  • The @csdp external (#19894)
    • Drake now refers to @csdp_internal instead⁽¹⁾.
  • The @gym_py external (#19909)
    • Drake now refers to @gymnasium_py instead.
  • The @optitrack_driver external (#19866)
    • Soon, drake will no longer require the optitrack driver.
  • The installed optitrack_client program (#19866)
  • The @petsc external (#19890, #19929)
    • Soon, drake will no longer require PETSc.
  • The @picosha2 external (#19879)
    • Drake now refers to @picosha2_internal instead⁽¹⁾.
  • The @rules_pkg external (#19872)
    • Drake no longer requires this package.
  • The @tinyobjloader external (#19880)
    • Drake now refers to @tinyobjloader_internal instead⁽¹⁾.
  • The @usockets external (#19889)
    • Drake now refers to @usockets_internal instead⁽¹⁾.
  • The @uwebsockets external (#19889)
    • Drake now refers to @uwebsockets_internal instead⁽¹⁾.
  • drake::systems::sensors::OptitrackLcmFrameSender (#19866)
    • If you still need this system, you may copy its code into your own project.
  • drake::systems::sensors::OptitrackReceiver (#19866)
    • If you still need this system, you may copy its code into your own project.

⁽¹⁾ Packages named “internal” are not intended for end-users; if you still need direct access to one of these packages (e.g., “@foo”), you may copy its bzl rules (e.g., “drake/tools/workspace/foo/**”) into your own project.

Removal of deprecated items

  • pydrake.geometry.render (#19868)
  • pydrake.geometry.GeometryInstance.release_shape (#19868)

Notes

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