Drake v1.13.0

Back to Release Notes

Announcements

  • Drake on macOS now uses Python 3.11 (#18262).
    • Please upvote or reply in #18791 if you have suggestions for Homebrew Python version transitions on macOS.
  • The new RenderEngineGltfClient allows connecting to third-party renderers, e.g., for higher-quality rendering (#18480, #18387).
  • The SceneGraphCollisionChecker offers a convenient wrapper for collision queries (#18629).
  • MultibodyPlant parsing continues to improve (#18692, #18625, #18728, #18351, #18735).
  • Python YAML parsing is much improved (#18566, #18572, #18604, #18606).

Breaking changes since v1.12.0

  • Introduce name mangling for Python template classes (#18587).
    • For template instantiations, we now use Unicode mangling instead of square brackets for the underlying class name, and similarly for commas and periods within the template param. Python class names are not allowed to use brackets; doing so causes headaches for tools like Mypy.
    • This is breaking change in the sense that the underlying cls.__name__ will change, which might affect certain kinds of regression tests or pickling.
  • Remove SortedPair’s mutable structured bindings (#18767).
    • Mutation allows the user to violate the sorting invariant.
  • Rename pydrake’s symbolic FormulaKind.True and FormulaKind.False (#18589).
    • The new names are FormulaKind.True_ and FormulaKind.False_.
    • The unadorned True and False are reserved words in Python.

Other important changes

  • URDF parsing now respects the <mimic/> element (#18728).
    • This will change the MultibodyPlant behavior for models that declared the element.
  • The manipulation_station example provides an applied_spatial_force_input_port (#18268).
    • Generalized forces due to these externally applied forces are now included in the “iiwa_torque_external” output port.
    • This is relevant if a user decides to apply non-zero spatial forces and “iiwa_torque_external” is being used to only consider contact).

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

Changes since v1.12.0

Dynamical Systems

New features

Fixes

  • Enhance Diagram scalar conversion to allow preserving subtypes even across multiple chained conversions (#18717)

Mathematical Program

New features

  • ScsSolver adds quadratic cost directly (#18605)
  • Adding time-varying constraints to TOPPRA (#18738)

Fixes

  • Avoid auto-diff for linear IPOPT constraints (#18603)
  • Adjust symbolic::Expression for compatibility with newer Eigen (pre-3.5) (#18710)

Multibody Dynamics and Geometry

New features - Multibody

  • Add SAP ball constraint (#18470)
  • Add more shapes to SpatialInertia factories (#18483)
  • Add tetrahedron to SpatialInertia and UnitInertia (#18618)
  • Function to shift a body’s center of mass and preserve its central unit inertia (#18582)
  • Allow opt out of adjacent body collision filters (#18736)
  • Differential inverse kinematics (Diff IK) has moved into the multibody/inverse_kinematics package (#18715)
  • Constraint relaxing IK has moved into the multibody/inverse_kinematics package (#18664)

New features - Geometry

  • Add SceneGraph::Clone (#18717)
  • SceneGraph supports AutoDiff-to-double and Expression-to-double scalar conversions (#18717)

New features - Rendering

  • Add RenderEngineGltfClient (#18480, #18387)
  • RenderEngine can also consume non-uchar-channel textures (#18410)
  • Add array-based getters and setters to Rgba (#18571)

New features - Parsing

  • Add Parser::AddModelsFromUrl function (#18692)
  • Add Parser constructors for model name prefixing (#18625)
  • UDRF: Add support for URDF mimic element (#18728)
  • Mujoco: Add initial collision filter support (#18351)

Fixes

  • Contact results are consistent for either choice of the contact solver (#18647)
  • Meshcat checks whether browser supports gamepads (#18720)
  • Fix URDF planar joint parsing (#18735)
  • Warn when unsupported geometries are parsed from SDFormat (#18594)

Planning

New features

  • Add CollisionChecker base class (#18558)
  • Add SceneGraphCollisionChecker (#18629)
  • Add RobotDiagram::Clone (#18717)
  • The planning/trajectory_optimization package has been renamed to planning/trajectory_optimization (#18697)

Fixes

  • Simplify RobotDiagramBuilder function names (#18770, #18772)
  • Optimize CollisionChecker welded body checks (#18718)
  • Add CollisionChecker logging of OpenMP enablement (#18709)
  • Fix malformed include statements (#18628)

Tutorials and examples

  • Add tutorial on authoring leaf systems (#18769)
  • The hardware_sim Python example shows how to use yaml parsing (#18566)
  • The manipulation_station example exports an applied_spatial_force_input_port (#18268)

Miscellaneous features and fixes

  • Avoid Meldis reloading when the scene hasn’t changed (#18626)
  • Add installed shortcuts for meldis and model_visualizer (#18764)
  • Fix erroneous Meldis warnings (#18671)
  • Fix a bug in DiscreteLyapunovEquation (#18600)
  • Fix a bug in QuaternionToHopfCoordinate (#18747)
  • RobotPlanInterpolator has moved to the manipulation/util package (#18664)

pydrake bindings

New features

  • Introduce name mangling for template classes (#18587)
  • Add pybind11 support to yaml_load_typed (#18572)
  • Add YAML parsing for variant/union (#18604)
  • Add YAML parsing for schema.Transform (#18606)
  • Allow Simulator monitor to return None (#18696)

New bindings

  • Add more bindings for CollisionChecker (#18670)
  • Add more bindings for DiagramBuilder (#18636)
  • Add more bindings for DistributionVector (#18567)
  • Add more bindings for RobotDiagram (#18650)
  • Add more bindings for Rotation and Transform (#18581)
  • Add more bindings for SceneGraph.RemoveRole (#18645)
  • Add more bindings for Simulator (#18612)

Fixes

  • Fix incompatibilities with Mypy (#18674)
  • Ensure Value[object].SetFrom() copies the value (#18655)
  • Fix AddContactMaterial parameter ordering (#18591)
  • Fix MathematicalProgramResult.num_suboptimal_solution (#18607)
  • Fix RollPitchYaw repr for missing template annotation (#18588)
  • Add pydrake.planning to pydrake.all (#18670, #18675)

Build system

  • Update macOS to Python 3.11 (#18262)
  • Automatically fix GCC 12 installation mistakes on Jammy (#18669)
  • Improve compatibility with Ubuntu derivatives (#18680)
  • Avoid Mypy timeouts (#18644)

Build dependencies

  • Fail fast on too-old Bazel 3.x (#18637)
  • Build gflags from source, instead of using the host version (#18586)
  • Patch conex for missing include statement (#18695)
  • Patch fcl for missing include statement (#18694)
  • Switch ccd to be an internal-use-only build (#18611, (#18678)
  • Switch fcl to be an internal-use-only build (#18611, (#18678)
  • Switch osqp to be an internal-use-only rebuild (#18690)
  • Switch qdldl to be an internal-use-only rebuild (#18690)
  • Switch scs to be an internal-use-only rebuild (#18690)
  • Switch stduuid to an internal-use-only, namespace-vendored build (#18610)
  • Switch suitesparse to be an internal-use-only rebuild with hidden visibility (#18690)
  • Downgrade usockets to v0.8.1 (#18755)
  • Downgrade usockets to v20.14.0 (#18755)
  • Upgrade abseil_cpp_internal to latest commit (#18753)
  • Upgrade bazel to 6.0.0 (#18545)
  • Upgrade bazel_skylib to latest release 1.4.0 (#18753)
  • Upgrade buildifier to latest release 6.0.1 (#18763)
  • Upgrade common_robotics_utilities to latest commit (#18709)
  • Upgrade dm_control_internal to latest commit (#18753)
  • Upgrade gtest to latest release v1.13.0 (#18633)
  • Upgrade msgpack_internal to latest release cpp-5.0.0 (#18753)
  • Upgrade mypy_extensions_internal to latest release 1.0.0 (#18753)
  • Upgrade mypy_internal to latest release v1.0.0 (#18753)
  • Upgrade petsc to latest release v3.18.4 (#18753)
  • Upgrade rules_python to latest release 0.17.3 (#18753)
  • Upgrade stable_baselines3_internal to latest release v1.7.0 (#18753)
  • Upgrade stduuid_internal to latest commit v1.2.3 (#18652)
  • Upgrade tinyobjloader to latest commit (#18753, #18785)
  • Upgrade voxelized_geometry_tools to latest commit (#18709)
  • Remove unused libyaml and libdl2 dependencies (#18734)
  • Drop unused suitesparse from install_prereqs (#18690)

Newly-deprecated APIs

  • drake::manipulation::planner (moved elsewhere) (#18664, #18715)
  • drake::planning::RobotDiagramBuilder::BuildDiagram (#18770)
  • drake::planning::RobotDiagramBuilder::FinalizePlant (#18772)
  • drake::planning::RobotDiagramBuilder::IsPlantFinalized (#18772)
  • drake::planning::RobotDiagramBuilder::mutable_builder (#18772)
  • drake::planning::RobotDiagramBuilder::mutable_parser (#18772)
  • drake::planning::RobotDiagramBuilder::mutable_plant (#18772)
  • drake::planning::RobotDiagramBuilder::mutable_scene_graph (#18772)
  • drake::systems::trajectory_optimization (moved elsewhere) (#18697)
  • pydrake.examples.acrobot as a sub-module (#18685)
  • pydrake.examples.compass_gait as a sub-module (#18685)
  • pydrake.examples.manipulation_station as a sub-module (#18685)
  • pydrake.manipulation.planner (moved elsewhere) (#18664, #18715)
  • pydrake.solvers.augmented_lagrangian as a sub-module (#18683)
  • pydrake.solvers.branch_and_bound as a sub-module (#18683)
  • pydrake.solvers.clp as a sub-module (#18683)
  • pydrake.solvers.csdp as a sub-module (#18683)
  • pydrake.solvers.dreal as a sub-module (#18683)
  • pydrake.solvers.gurobi as a sub-module (#18683)
  • pydrake.solvers.ipopt as a sub-module (#18683)
  • pydrake.solvers.mathematicalprogram as a sub-module (#18683)
  • pydrake.solvers.mixed_integer_optimization_util as a sub-module (#18683)
  • pydrake.solvers.mixed_integer_rotation_constraint as a sub-module (#18683)
  • pydrake.solvers.mosek as a sub-module (#18683)
  • pydrake.solvers.nlopt as a sub-module (#18683)
  • pydrake.solvers.osqp as a sub-module (#18683)
  • pydrake.solvers.scs as a sub-module (#18683)
  • pydrake.solvers.sdpa_free_format as a sub-module (#18683)
  • pydrake.solvers.snopt as a sub-module (#18683)
  • pydrake.systems.trajectory_optimization (moved elsewhere) (#18697)
  • The @ccd bazel external (#18611)
  • The @fcl bazel external (#18611)
  • The @osqp bazel external (#18690)
  • The @qdldl bazel external (#18690)
  • The @scs bazel external (#18690)
  • The @stduuid bazel external (#18610)
  • The @suitesparse bazel external (#18690)
  • On macOS, the --with-maintainer-only install_prereqs flag (#18665)

Removal of deprecated items

  • drake::multibody::parsing::PopulateFromEnvironment(“ROS_PACKAGE_PATH”) (#18689, #18226)
  • drake::solvers::DrealSolver (#18686, #18156)
  • drake::solvers::IbexSolver (#18686, #18156)
  • drake::solvers::SolverType::kDReal (#18686, #18156)
  • drake::solvers::SolverType::kIbex (#18686, #18156)
  • drake::symbolic::SubstituteStereographicProjection symbolic::Exprssion overload (#18716, #18179)
  • drake::systems::System::GetPeriodicEvents() (no parameters) (#18716, #18094)
  • drake::systems::sensors::ApplyCameraConfig() (without lcm_buses) (#18689, #18069)
  • pydrake.multibody.tree.ScrewJoint constructor with default parameters (#18716, #18122)
  • pydrake.solvers.SolverType.kDRael (#18686, #18156)
  • pydrake.solvers.SolverType.kIbex (#18686, #18156)
  • pydrake.solvers.dreal.DrealSolver (#18686, #18156)
  • pydrake.solvers.ibex.IbexSolver (#18686, #18156)
  • pydrake.visualization.meldis (#18689, #18160)
  • pydrake.visualization.plotting (#18689, #18160)

Notes

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