Drake v1.39.0

Back to Release Notes

Announcements

  • As announced in v1.37.0, for Bazel users Drake has been ported to Bazel modules instead of repository rules. Drake’s legacy support for WORKSPACE is now deprecated and will be removed on or after 2025-09-01. (#22660)
  • MultibodyPlant’s *_desired_state input ports for implicit PD control are now much easier to use (i.e., come with fewer restrictions). (#22542, #22715)
  • The protected Joint API has changed. This will only affect you if you have created a custom joint. Joint::MakeMobilizerForJoint() can now create Frames. (#22735)
  • VTK’s lighting calculations for image-based lighting has been corrected. The implication is that renderings that use an environment map will get a bit dimmer. (The environment map was mistakenly contributing too much energy to the scene). To account for this correction, you may need to dim your explicit lights (spot, point, etc.) slightly and increase your exposure to rebalance the exposure of the final image. (#22629)
  • Calling `FiniteHorizonLinearQuadraticRegulator() will invoke discrete-time finite-horizon LQR under certain circumstances. See the function documentation for details. (#22609)

Breaking changes since v1.38.0

  • drake::planning::CollisionCheckerParams::model has gone from std::unique_ptr to std::shared_ptr. This constitutes an important semantic change, but is unlikely to cause downstream issues. (#22619)

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

Changes since v1.38.0

Dynamical Systems

New features

  • Implement discrete-time finite-horizon LQR (#22609)
  • Allow an initial value to be specified for Integrator (#22682)
  • Give SemiExplicitEulerIntegrator support for Expression scalar type (#22751)
  • Add Selector primitive system (#22635)
  • Introduce BusCreator, BusSelector, BusValue (#22679)

Fixes

  • Correct null pointer dereference in SemiExplicitEulerIntegrator constructor (#22743)

Mathematical Program

New features

  • Add HessianType::kZero to QuadraticConstraint (#22659)

Fixes

  • None

Multibody Dynamics and Geometry

New features

  • Add GetScopedFrameByName overloads on scalar type (#22644)
  • Parse cameras from mujoco (#22531)
  • Add PackageMap overloads for filesystem and pathlib (#22731)
  • Unambiguously identify ephemeral elements (#22712)
  • MakeMobilizerForJoint() can now create Frames (#22735)
  • Remove all temporal setup limitations on PD gains (#22715)

Fixes

  • Check RotationalInertia moments/products with IsFinite() instead of IsNaN() (#22642)
  • Fix Delassus approximation in SAP (#22705)
  • Fix Clone methods for Frames (#22696)
  • Allow desired-state input ports to remain unconnected (#22542)
  • When feeding a .OBJ file directly to a Parser, uses SceneGraph’s default proximity properties (#22674)
  • Implement hydro box mesh with faces split into four triangles (#22640)
  • Speed up VolumeMeshRefiner (refine_mesh tool) with local search (#22709)
  • Specular reflections of direct lights no longer disappear on perfectly smooth materials (#22632)
  • Correct image-based lighting diffuse contribution in RenderEngineVtk (#22629)

Planning

New features

  • Define IrisZo parameterization with a vector of Expressions (#22706)
  • Add new factory method of drake::planning::IrisZoOptions for a drake::multibody::RationalForwardKinematics object (#22618)
  • IRIS-ZO given the ability to support additional constraints (#22583)

Fixes

  • Make IrisZo better handle the case where the ellipsoid center is invalid (in-collision or violates user-specified constraints) (#22737)

Tutorials and examples

  • None

Miscellaneous features and fixes

  • drake::manipulation::schunk_wsg::SchunkWsgTrajectoryGenerator can opt-out of force limits ports (#22671)
  • Fix wrong port name in SchunkWsgTrajectoryGenerator documentation (#22671)

pydrake bindings

New features

  • Add bindings for drake::geometry::MeshcatAnimation (#22650)
  • Add bindings for drake::trajectories::DiscreteTimeTrajectory (#22653)
  • Add bindings for drake::systems::sensors::CameraConfig helper structs (#22697)
  • Add bindings for drake::planning::IrisZoOptions::SetParameterizationFromExpression (#22583)
  • Add bindings for drake::planning::IrisZoOptions::set_parameterization (#22618)
  • Add bindings for drake::planning::IrisZoOptions::get_parameterization_in_threadsafe (#22618)
  • Add bindings for drake::planning::IrisZoOptions::get_parameterization_dimension (#22618)
  • Add bindings for drake::planning::IrisZoOptions::get_paramterization (#22618)
  • Add bindings for drake::planning::CreateWithRationalKinematicParameterization (#22618)

Fixes

  • None

Build system

  • Add CMake options for opting out of each open-source solver (#22626)
  • Stop using brew --no-lock option (#22704)

Build dependencies

  • Upgrade abseil_cpp_internal to latest commit (#22670)
  • Upgrade Bazel to latest release 8.1.1 (#22690)
  • Upgrade buildifier to latest release v8.0.3 (#22670)
  • Upgrade clarabel_cpp_internal to latest release v0.10.0 (#22732)
  • Upgrade common_robotics_utilities to latest (#22484)
  • Upgrade crate_universe to latest releases (#22732)
  • Upgrade curl_internal to latest release 8.12.1 (#22677)
  • Upgrade drake_models to latest commit (#22670)
  • Upgrade gtest to latest release v1.16.0 (#22670)
  • Upgrade gymnasium_py to latest release v1.1.0 (#22670)
  • Upgrade gz_math_internal,gz_utils_internal to latest (#22701)
  • Upgrade mujoco_menagerie_internal to latest commit (#22670)
  • Upgrade mypy_internal to latest release v1.15.0 (#22670)
  • Upgrade nanoflann_internal to latest release v1.7.0 (#22670)
  • Upgrade nlopt_internal to latest release v2.10.0 (#22678)
  • Upgrade openusd_internal to latest release v25.02a (#22670)
  • Upgrade Python venv (mac) to latest (#22692)
  • Upgrade sdformat to latest release 15.2.0 (#22680)
  • Upgrade spral_internal to latest release v2025.03.06 (#22713)
  • Upgrade suitesparse_internal to latest release v7.9.0 (#22670)
  • Upgrade voxelized_geometry_tools to latest (#22484)

Newly-deprecated APIs

  • drake::multibody::SpatialInertia::CriticizeNotPhysicallyValid() (#22474)
  • Deprecate using Drake as a workspace external (#22660)

Removal of deprecated items

  • None

Notes

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