---
title: Drake v1.29.0
date: 2024-05-15
released: 2024-05-15
---

# Announcements

* Our recommended tactics for looping over `MultibodyPlant` elements have
  changed:
  * `MultibodyPlant` now offers methods to remove elements:
    * `RemoveJoint()` ([#21397][_#21397]), added in this release;
    * `RemoveJointActuator()` ([#20711][_#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][_#21339])

# Breaking changes since v1.28.0

* On macOS x86_64 builds, IPOPT is now disabled by default and unsupported ([#21346][_#21346])

Refer to our [Drake Stability Guidelines](/stable.html) for our policy
on API changes.

# Changes since v1.28.0

## Dynamical Systems

<!-- <relnotes for systems go here> -->

New features

* Add `plant_context` argument to `InverseDynamics` and `InverseDynamicsController` ([#21287][_#21287])

Fixes

* None

## Mathematical Program

<!-- <relnotes for solvers go here> -->

New features

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

Fixes

* Fall Back To Indefinite Hessian when LDLT fails ([#21411][_#21411])

## Multibody Dynamics and Geometry

<!-- <relnotes for geometry,multibody go here> -->

New features

* Add `MultibodyPlant::RemoveJoint()` ([#21397][_#21397])

Fixes

* Fix signed-distance gradients of touching (zero distance) boxes ([#21266][_#21266])
* Meshcat has a default recording ([#21360][_#21360])

## Planning

<!-- <relnotes for planning go here> -->

New features

* Moves ZmpPlanner to planning directory ([#21305][_#21305])

Fixes

* Fix GetQuaternionDofStartIndices to loop over joints, not bodies ([#21308][_#21308])

## Tutorials and examples

<!-- <relnotes for examples,tutorials go here> -->

* None

## Miscellaneous features and fixes

<!-- <relnotes for common,math,lcm,lcmtypes,manipulation,perception,visualization go here> -->

* `ModelVisualizer` draw all `MultibodyPlant` frames when requested ([#21318][_#21318])
* Add `RigidTransform` (etc.) factory methods without checks ([#21393][_#21393])
* Add `DRAKE_DECLARE_COPY_AND_MOVE_AND_ASSIGN` macro ([#21419][_#21419])

## pydrake bindings

<!-- <relnotes for bindings go here> -->

New features

* Add python bindings for ExponentialPlusPiecewisePolynomial ([#21304][_#21304])
* Add python bindings for MultibodyPlant.CalcRelativeRotationMatrix ([#21426][_#21426])
* Add python bindings for ZmpPlanner ([#21305][_#21305])

Fixes

* None

## Build system

<!-- <relnotes for cmake,doc,setup,third_party,tools go here> -->

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

## Build dependencies

<!-- <relnotes for workspace go here> -->

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

## Newly-deprecated APIs

* `drake::geometry::optimization::AffineSubspace::Project()` ([#21113][_#21113])
* `drake::multibody::MultibodyPlant::SetFreeBodyRandomPositionDistribution()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::get_default_pose()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::get_default_position()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::get_pose()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::get_position()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::set_default_position()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::SetFromRotationMatrix()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::set_pose()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::set_position()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::set_quaternion()` ([#21169][_#21169])
* `drake::multibody::QuaternionFloatingJoint::set_random_position_distribution()` ([#21169][_#21169])
* `drake::multibody::RpyFloatingJoint::set_translation()` ([#21169][_#21169])
* `drake::systems::controllers::ZmpPlanner` ([#21305][_#21305])
* `pydrake.multibody.tree.QuaternionFloatingJoint.get_default_pose()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.get_default_position()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.get_pose()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.get_position()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.set_default_position()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.SetFromRotationMatrix()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.set_pose()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.set_position()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.set_quaternion()` ([#21169][_#21169])
* `pydrake.multibody.tree.QuaternionFloatingJoint.set_random_position_distribution()` ([#21169][_#21169])
* `pydrake.multibody.tree.RpyFloatingJoint.set_translation()` ([#21169][_#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][_#21373])
* `drake::geometry::render::RenderEngine::GetColorDFromLabel()` ([#21373][_#21373])
* `drake::geometry::render::RenderEngine::GetColorIFromLabel()` ([#21373][_#21373])
* `drake::geometry::render::RenderEngine::LabelFromColor()` ([#21373][_#21373])
* `drake::systems::analysis::kNoConcurrency` ([#21373][_#21373])
* `drake::systems::analysis::kUseHardwareConcurrency` ([#21373][_#21373])
* `drake::systems::analysis::MonteCarloSimulation()` with `num_parallel_executions` argument ([#21373][_#21373])
* `drake::systems::sensors::Color` ([#21373][_#21373])
* `drake::systems::sensors::ColorD` ([#21373][_#21373])
* `drake::systems::sensors::ColorI` ([#21373][_#21373])
* `drake::systems::sensors::ColorPalette` ([#21373][_#21373])
* `geometry/render/color_deprecated.h` ([#21373][_#21373])
* `pydrake.geometry.optimization.FindSeparationCertificateOptions.num_threads` ([#21373][_#21373])
* `pydrake.geometry.RenderEngine.GetColorDFromLabel()` ([#21373][_#21373])
* `pydrake.geometry.RenderEngine.GetColorIFromLabel()` ([#21373][_#21373])
* `pydrake.geometry.RenderEngine.LabelFromColor()` ([#21373][_#21373])
* `systems/sensors/color_palette.h` ([#21373][_#21373])


# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.29.0) named
``drake-1.29.0-{jammy|mac-arm64}.tar.gz``. See [Stable Releases](/from_binary.html#stable-releases) for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of [SNOPT](https://ccom.ucsd.edu/~optimizers/solvers/snopt/) as part of the
[Mathematical Program toolbox](https://drake.mit.edu/doxygen_cxx/group__solvers.html). Thanks to
Philip E. Gill and Elizabeth Wong for their kind support.

<!-- <begin issue links> -->
[_#20711]: https://github.com/RobotLocomotion/drake/pull/20711
[_#21053]: https://github.com/RobotLocomotion/drake/pull/21053
[_#21113]: https://github.com/RobotLocomotion/drake/pull/21113
[_#21123]: https://github.com/RobotLocomotion/drake/pull/21123
[_#21169]: https://github.com/RobotLocomotion/drake/pull/21169
[_#21179]: https://github.com/RobotLocomotion/drake/pull/21179
[_#21266]: https://github.com/RobotLocomotion/drake/pull/21266
[_#21275]: https://github.com/RobotLocomotion/drake/pull/21275
[_#21277]: https://github.com/RobotLocomotion/drake/pull/21277
[_#21285]: https://github.com/RobotLocomotion/drake/pull/21285
[_#21287]: https://github.com/RobotLocomotion/drake/pull/21287
[_#21296]: https://github.com/RobotLocomotion/drake/pull/21296
[_#21304]: https://github.com/RobotLocomotion/drake/pull/21304
[_#21305]: https://github.com/RobotLocomotion/drake/pull/21305
[_#21306]: https://github.com/RobotLocomotion/drake/pull/21306
[_#21308]: https://github.com/RobotLocomotion/drake/pull/21308
[_#21310]: https://github.com/RobotLocomotion/drake/pull/21310
[_#21313]: https://github.com/RobotLocomotion/drake/pull/21313
[_#21318]: https://github.com/RobotLocomotion/drake/pull/21318
[_#21321]: https://github.com/RobotLocomotion/drake/pull/21321
[_#21327]: https://github.com/RobotLocomotion/drake/pull/21327
[_#21339]: https://github.com/RobotLocomotion/drake/pull/21339
[_#21340]: https://github.com/RobotLocomotion/drake/pull/21340
[_#21346]: https://github.com/RobotLocomotion/drake/pull/21346
[_#21360]: https://github.com/RobotLocomotion/drake/pull/21360
[_#21373]: https://github.com/RobotLocomotion/drake/pull/21373
[_#21385]: https://github.com/RobotLocomotion/drake/pull/21385
[_#21387]: https://github.com/RobotLocomotion/drake/pull/21387
[_#21390]: https://github.com/RobotLocomotion/drake/pull/21390
[_#21391]: https://github.com/RobotLocomotion/drake/pull/21391
[_#21392]: https://github.com/RobotLocomotion/drake/pull/21392
[_#21393]: https://github.com/RobotLocomotion/drake/pull/21393
[_#21397]: https://github.com/RobotLocomotion/drake/pull/21397
[_#21399]: https://github.com/RobotLocomotion/drake/pull/21399
[_#21410]: https://github.com/RobotLocomotion/drake/pull/21410
[_#21411]: https://github.com/RobotLocomotion/drake/pull/21411
[_#21419]: https://github.com/RobotLocomotion/drake/pull/21419
[_#21426]: https://github.com/RobotLocomotion/drake/pull/21426
<!-- <end issue links> -->

<!--
  Current oldest_commit e7cf4027e316b1ec7347660029859c5c1a848727 (exclusive).
  Current newest_commit 11b390d7b5697ea91f330bac57f1d98bb7d565de (inclusive).
-->
