---
title: Drake v1.28.0
date: 2024-04-12
released: 2024-04-12
---

# Announcements

* Most model files (.urdf and .sdf) previously located within the Drake tree are now in the https://github.com/RobotLocomotion/models repository.
  * This leads to path changes like: `"package://drake/examples/manipulation_station/models/sphere.sdf"` to `"package://drake_models/manipulation_station/sphere.sdf"`.
* The meaning of the Convex shape has changed. Previously it was a way for the user to communicate that the provided mesh was a convex polytope. Now, it's a request for Drake to use the convex hull of an arbitrary mesh. ([#21147][_#21147])
  * The mesh declared as Convex (or using `<drake:declare_convex>` in a model file) need no longer be convex itself.
  * A tetrahedral vtk mesh or .gltf mesh can be declared convex (its convex hull will be used).
  * Performance of point contact with convex hulls is also improved.

# Breaking changes since v1.27.0

* Change the type of F in LinearMatrixInequalityConstraint from `std::vector<Eigen::Ref<const Eigen::MatrixXd>>` to `std::vector<Eigen::MatrixXd>`. ([#21152][_#21152])
* Due to the changes in the Convex shape semantics and visualization ([#21147][_#21147], [#21189][_#21189]), a Convex used with an illustration role or proximity role will no longer render as the mesh, but render as a faceted polytope (its convex hull).
  * If you need it to render it as the source mesh, declare it as Mesh instead of Convex.

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

# Changes since v1.27.0

## Dynamical Systems

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

New features

* Implement DiscreteTimeIntegrator primitive ([#21222][_#21222])

Fixes

* None

## Mathematical Program

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

New features

* Change the type of F in LinearMatrixInequalityConstraint ([#21152][_#21152])
* Add optional sparsity groups to MakeSemidefiniteRelaxation ([#21043][_#21043])
* Add SolverOptions to IrisOptions ([#21182][_#21182])
* Add get_sparse_A() and GetDenseA() to L2NormCost ([#21199][_#21199])
* MosekSolver treats LMI as affine cone constraints ([#21117][_#21117])
* GurobiSolver supports L2NormCost ([#21256][_#21256])
* Clarabel and SCS support L2NormCost ([#21271][_#21271])
* Mosek supports L2NormCost ([#21274][_#21274])
* Add method for finding inner approximations of HPolyhedron objects ([#20931][_#20931])

Fixes

* Reinitialize polytope at start of iteration via A and b ([#21248][_#21248])

## Multibody Dynamics and Geometry

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


New features

* Report accumulated collision filter groups ([#21138][_#21138])
* Update definition of Convex shape to mean "use the convex hull" ([#21147][_#21147])
* Add Shape::Visit ([#21181][_#21181])
* Convex shapes render as flat-shaded convex polytopes in visual roles ([#21189][_#21189], [#21281][_#21281])
* Mujoco parser supports new autolimits ([#21205][_#21205])
* Implement MultibodyPlant::RemoveJointActuator ([#20711][_#20711])
* Allow model directive 'add_model' to pose free body with respect to an arbitrary frame ([#21263][_#21263])
* Add SpatialInertia::Zero() ([#21198][_#21198])

Fixes

* Silence gltf basisu extension warnings by default ([#21183][_#21183])
* Add python bindings for Convex/Mesh GetConvexHull() ([#21208][_#21208])
* AddRigidBody() defaults to zero inertia when not specified ([#21198][_#21198])


## Planning

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

New features

* Add zero derivative constraints to GcsTrajectoryOptimization ([#21180][_#21180])

Fixes

* Match RobotDiagram default time step to MultibodyPlant's default ([#21098][_#21098])
* Fix bugs in IrisInConfigurationSpaceFromCliqueCover ([#21237][_#21237])


## Tutorials and examples

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

* Move pr2_description to drake_models ([#21185][_#21185])
* Move manipulation_station models into drake_models ([#21233][_#21233])
* Move punyo files into drake_models ([#21231][_#21231])
* Move quadrotor.urdf to drake_models ([#21238][_#21238])
* Move hydroelastic models to drake_models ([#21244][_#21244], [#21258][_#21258])


## Miscellaneous features and fixes

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

* Update IIWA `.obj` references to `.gltf` ([#21079][_#21079]) 
* Move allegro_hand_description into drake_models ([#21184][_#21184])
* Move ycb models into drake_models package ([#21190][_#21190])
* Move realsense2 models into drake_models package ([#21191][_#21191])
* Move manipulation station models to drake_models package ([#21218][_#21218])
* Delete robot descriptions that now live in drake_models ([#21243][_#21243])
* Switch Atlas to use glTF meshes ([#21250][_#21250])

## pydrake bindings

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

New features

* None

Fixes

* Remove Eigen::Translation type caster ([#21157][_#21157])
* Bind EvalBodySpatialAccelerationInWorld ([#21161][_#21161])
* Ensure DiscreteValues accessors work for T != double ([#21236][_#21236])
* Meldis reload logic corrected to include glTF content ([#21297][_#21297])

## Build system

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

* Install bazelisk on Ubuntu arm64 ([#21201][_#21201])
* Bump C++17 to C++20 in various CMake places ([#21247][_#21247])
* Overhaul how VERSION.TXT is generated ([#21146][_#21146]) 

## Build dependencies

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

* Straighten out repo rules for MOSEK, TBB, OpenUSD ([#21155][_#21155])
* Upgrade abseil_cpp_internal to latest commit ([#21260][_#21260])
* Upgrade build_bazel_apple_support to latest release 1.15.1 ([#21260][_#21260])
* Upgrade buildifier to latest release v7.1.0 ([#21261][_#21261])
* Upgrade com_github_nelhage_rules_boost_internal to latest commit ([#21260][_#21260])
* Upgrade common_robotics_utilities to latest commit ([#21260][_#21260])
* Upgrade curl_internal to latest release 8.7.1 ([#21265][_#21265])
* Upgrade drake_models to latest commit ([#21217][_#21217], [#21213][_#21213], [#21241][_#21241], [#21250][_#21250], [#21227][_#21227], [#21233][_#21233], [#21231][_#21231], [#21238][_#21238], [#21244][_#21244], [#21258][_#21258], [#21079][_#21079], [#21184][_#21184], [#21190][_#21190], [#21191][_#21191], [#21218][_#21218])
* Upgrade gz_math_internal to latest release 7.4.0 ([#21262][_#21262])
* Upgrade msgpack_internal to latest release cpp-6.1.1 ([#21260][_#21260])
* Upgrade nanoflann_internal to latest release v1.5.5 ([#21260][_#21260])
* Upgrade platforms to latest release 0.0.9 ([#21260][_#21260])
* Upgrade stable_baselines3_internal to latest release v2.3.0 ([#21260][_#21260])
* Upgrade suitesparse_internal to latest release v7.7.0 ([#21260][_#21260])
* Upgrade sdformat_internal to latest release 14.1.1 ([#21262][_#21262])

## Newly-deprecated APIs

* `drake::multibody::SpatialInertia::SpatialInertia()` ([#21198][_#21198])
* `drake::solvers::L2NormCost::A()` ([#21199][_#21199])
* `pydrake.multibody.SpatialInertia.__init__()` ([#21198][_#21198])
* `mosek_repository()` without providing mirrors ([#21155][_#21155])

## Removal of deprecated items

* `drake::multibody::BodyFrame` ([#21226][_#21226])
* `multibody/tree/body.h` ([#21226][_#21226])
* `pydrake.multibody.tree.BodyFrame` ([#21226][_#21226])
* `pydrake.multibody.tree.BodyFrame_` ([#21226][_#21226])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.28.0) named
``drake-1.28.0-{jammy|mac|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
[_#20931]: https://github.com/RobotLocomotion/drake/pull/20931
[_#21043]: https://github.com/RobotLocomotion/drake/pull/21043
[_#21079]: https://github.com/RobotLocomotion/drake/pull/21079
[_#21098]: https://github.com/RobotLocomotion/drake/pull/21098
[_#21117]: https://github.com/RobotLocomotion/drake/pull/21117
[_#21138]: https://github.com/RobotLocomotion/drake/pull/21138
[_#21146]: https://github.com/RobotLocomotion/drake/pull/21146
[_#21147]: https://github.com/RobotLocomotion/drake/pull/21147
[_#21152]: https://github.com/RobotLocomotion/drake/pull/21152
[_#21155]: https://github.com/RobotLocomotion/drake/pull/21155
[_#21157]: https://github.com/RobotLocomotion/drake/pull/21157
[_#21161]: https://github.com/RobotLocomotion/drake/pull/21161
[_#21180]: https://github.com/RobotLocomotion/drake/pull/21180
[_#21181]: https://github.com/RobotLocomotion/drake/pull/21181
[_#21182]: https://github.com/RobotLocomotion/drake/pull/21182
[_#21183]: https://github.com/RobotLocomotion/drake/pull/21183
[_#21184]: https://github.com/RobotLocomotion/drake/pull/21184
[_#21185]: https://github.com/RobotLocomotion/drake/pull/21185
[_#21189]: https://github.com/RobotLocomotion/drake/pull/21189
[_#21190]: https://github.com/RobotLocomotion/drake/pull/21190
[_#21191]: https://github.com/RobotLocomotion/drake/pull/21191
[_#21198]: https://github.com/RobotLocomotion/drake/pull/21198
[_#21199]: https://github.com/RobotLocomotion/drake/pull/21199
[_#21201]: https://github.com/RobotLocomotion/drake/pull/21201
[_#21205]: https://github.com/RobotLocomotion/drake/pull/21205
[_#21208]: https://github.com/RobotLocomotion/drake/pull/21208
[_#21213]: https://github.com/RobotLocomotion/drake/pull/21213
[_#21217]: https://github.com/RobotLocomotion/drake/pull/21217
[_#21218]: https://github.com/RobotLocomotion/drake/pull/21218
[_#21222]: https://github.com/RobotLocomotion/drake/pull/21222
[_#21226]: https://github.com/RobotLocomotion/drake/pull/21226
[_#21227]: https://github.com/RobotLocomotion/drake/pull/21227
[_#21231]: https://github.com/RobotLocomotion/drake/pull/21231
[_#21233]: https://github.com/RobotLocomotion/drake/pull/21233
[_#21236]: https://github.com/RobotLocomotion/drake/pull/21236
[_#21237]: https://github.com/RobotLocomotion/drake/pull/21237
[_#21238]: https://github.com/RobotLocomotion/drake/pull/21238
[_#21241]: https://github.com/RobotLocomotion/drake/pull/21241
[_#21243]: https://github.com/RobotLocomotion/drake/pull/21243
[_#21244]: https://github.com/RobotLocomotion/drake/pull/21244
[_#21247]: https://github.com/RobotLocomotion/drake/pull/21247
[_#21248]: https://github.com/RobotLocomotion/drake/pull/21248
[_#21250]: https://github.com/RobotLocomotion/drake/pull/21250
[_#21256]: https://github.com/RobotLocomotion/drake/pull/21256
[_#21258]: https://github.com/RobotLocomotion/drake/pull/21258
[_#21260]: https://github.com/RobotLocomotion/drake/pull/21260
[_#21261]: https://github.com/RobotLocomotion/drake/pull/21261
[_#21262]: https://github.com/RobotLocomotion/drake/pull/21262
[_#21263]: https://github.com/RobotLocomotion/drake/pull/21263
[_#21265]: https://github.com/RobotLocomotion/drake/pull/21265
[_#21271]: https://github.com/RobotLocomotion/drake/pull/21271
[_#21274]: https://github.com/RobotLocomotion/drake/pull/21274
[_#21281]: https://github.com/RobotLocomotion/drake/pull/21281
[_#21297]: https://github.com/RobotLocomotion/drake/pull/21297
<!-- <end issue links> -->

<!--
  Current oldest_commit 38728a99103e0c057e512a701a4df43960d12e19 (exclusive).
  Current newest_commit e7cf4027e316b1ec7347660029859c5c1a848727 (inclusive).
-->
