Drake v1.29.0

Back to Release Notes

Announcements

  • Our recommended tactics for looping over MultibodyPlant elements have changed:
    • MultibodyPlant now offers methods to remove elements:
      • RemoveJoint() (#21397), added in this release;
      • RemoveJointActuator() (#20711), added in the prior release.
    • After removal of an element, the set of valid indices is no longer contiguous from 0 to num_joints() or num_joint_actuators().
    • Typically, legacy code used integer-range loops to cover all elements:
      • for (JointIndex i{0}; i < plant.num_joints(); ++i) ...
      • for i in range(plant.num_joints()): ...
    • Now that removals are possible, we instead recommend using the accessors to provide the list of indices:
      • for (JointIndex i : plant.GetJointIndices()) ...
      • for i in plant.GetJointIndices(): ...
  • Drake’s supported version of Clang is now Clang 15 (#21339)

Breaking changes since v1.28.0

  • On macOS x86_64 builds, IPOPT is now disabled by default and unsupported (#21346)

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

Changes since v1.28.0

Dynamical Systems

New features

  • Add plant_context argument to InverseDynamics and InverseDynamicsController (#21287)

Fixes

  • None

Mathematical Program

New features

  • Add perspective of positive semidefinite constraint (#21296)
  • Convex set projection (#21113)
  • Choose the transcription for adding (nonconvex) constraints (#21179)
  • Add MathematicalProgram::RemoveDecisionVariable (#21392)
  • Add MathematicalProgram::RemoveVisualizationCallback (#21399)

Fixes

  • Fall Back To Indefinite Hessian when LDLT fails (#21411)

Multibody Dynamics and Geometry

New features

  • Add MultibodyPlant::RemoveJoint() (#21397)

Fixes

  • Fix signed-distance gradients of touching (zero distance) boxes (#21266)
  • Meshcat has a default recording (#21360)

Planning

New features

  • Moves ZmpPlanner to planning directory (#21305)

Fixes

  • Fix GetQuaternionDofStartIndices to loop over joints, not bodies (#21308)

Tutorials and examples

  • None

Miscellaneous features and fixes

  • ModelVisualizer draw all MultibodyPlant frames when requested (#21318)
  • Add RigidTransform (etc.) factory methods without checks (#21393)
  • Add DRAKE_DECLARE_COPY_AND_MOVE_AND_ASSIGN macro (#21419)

pydrake bindings

New features

  • Add python bindings for ExponentialPlusPiecewisePolynomial (#21304)
  • Add python bindings for MultibodyPlant.CalcRelativeRotationMatrix (#21426)
  • Add python bindings for ZmpPlanner (#21305)

Fixes

  • None

Build system

  • On Ubuntu, source prereqs now uses bazelisk.deb instead of bazel.deb (#21321)
  • Upgrade Bazel to latest release 7.1.1 (#21123)
  • Upgrade supported Clang to version 15 (#21339)

Build dependencies

  • Disable IPOPT on macOS x86_64 (#21346)
  • Upgrade abseil_cpp_internal to latest commit (#21385)
  • Upgrade bazel_skylib to latest release 1.6.1 (#21385)
  • Upgrade buildifier to latest release 7.1.1 (#21385)
  • Upgrade Clarabel.rs to latest release 0.7.1 (#21053)
  • Upgrade coinutils_internal to latest release 2.11.11 (#21385)
  • Upgrade crate_universe to latest versions (#21306, #21385)
  • Upgrade dm_control_internal to latest release 1.0.18 (#21385)
  • Upgrade drake_models to latest commit (#21285, #21310, #21410)
  • Upgrade ipopt_internal_fromsource to latest release 3.14.16 (#21385)
  • Upgrade meshcat to latest commit (#21313, #21327)
  • Upgrade mypy_internal to latest release 1.10.0 (#21385)
  • Upgrade openusd_internal to latest release 24.05 (#21340)
  • Upgrade platforms to latest release 0.0.10 (#21385)
  • Upgrade rules_rust to latest release 0.42.1 (#21391, #21277)
  • Upgrade rust_toolchain to latest versions (#21277)
  • Upgrade sdformat_internal to latest commit (#21390)
  • Upgrade stable_baselines3_internal to latest release 2.3.2 (#21385)
  • Upgrade typing_extensions_internal to latest release 4.11.0 (#21385)
  • Upgrade vtk_internal to latest commit (#21275, #21387)

Newly-deprecated APIs

  • drake::geometry::optimization::AffineSubspace::Project() (#21113)
  • drake::multibody::MultibodyPlant::SetFreeBodyRandomPositionDistribution() (#21169)
  • drake::multibody::QuaternionFloatingJoint::get_default_pose() (#21169)
  • drake::multibody::QuaternionFloatingJoint::get_default_position() (#21169)
  • drake::multibody::QuaternionFloatingJoint::get_pose() (#21169)
  • drake::multibody::QuaternionFloatingJoint::get_position() (#21169)
  • drake::multibody::QuaternionFloatingJoint::set_default_position() (#21169)
  • drake::multibody::QuaternionFloatingJoint::SetFromRotationMatrix() (#21169)
  • drake::multibody::QuaternionFloatingJoint::set_pose() (#21169)
  • drake::multibody::QuaternionFloatingJoint::set_position() (#21169)
  • drake::multibody::QuaternionFloatingJoint::set_quaternion() (#21169)
  • drake::multibody::QuaternionFloatingJoint::set_random_position_distribution() (#21169)
  • drake::multibody::RpyFloatingJoint::set_translation() (#21169)
  • drake::systems::controllers::ZmpPlanner (#21305)
  • pydrake.multibody.tree.QuaternionFloatingJoint.get_default_pose() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.get_default_position() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.get_pose() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.get_position() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.set_default_position() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.SetFromRotationMatrix() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.set_pose() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.set_position() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.set_quaternion() (#21169)
  • pydrake.multibody.tree.QuaternionFloatingJoint.set_random_position_distribution() (#21169)
  • pydrake.multibody.tree.RpyFloatingJoint.set_translation() (#21169)

Removal of deprecated items

  • Calling drake::schema::Transform::Sample() when it has a non-null, non-world base_frame becomes an error. (The returned value would be misleading because it doesn’t incorporate the base frame.) (#21373)
  • drake::geometry::render::RenderEngine::GetColorDFromLabel() (#21373)
  • drake::geometry::render::RenderEngine::GetColorIFromLabel() (#21373)
  • drake::geometry::render::RenderEngine::LabelFromColor() (#21373)
  • drake::systems::analysis::kNoConcurrency (#21373)
  • drake::systems::analysis::kUseHardwareConcurrency (#21373)
  • drake::systems::analysis::MonteCarloSimulation() with num_parallel_executions argument (#21373)
  • drake::systems::sensors::Color (#21373)
  • drake::systems::sensors::ColorD (#21373)
  • drake::systems::sensors::ColorI (#21373)
  • drake::systems::sensors::ColorPalette (#21373)
  • geometry/render/color_deprecated.h (#21373)
  • pydrake.geometry.optimization.FindSeparationCertificateOptions.num_threads (#21373)
  • pydrake.geometry.RenderEngine.GetColorDFromLabel() (#21373)
  • pydrake.geometry.RenderEngine.GetColorIFromLabel() (#21373)
  • pydrake.geometry.RenderEngine.LabelFromColor() (#21373)
  • systems/sensors/color_palette.h (#21373)

Notes

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