Announcements
- Drake Gym is now available, to simplify combining Drake simulations with reinforcement learning toolkits. See the documentation here. (#19831)
- The new
DRAKE_PYTHON_LOGGING
environment variable offers more control over logging when usingpydrake
. In certain cases where C++ multi-threaded code is bound in Python, it may be detrimental to use existing spdlog Python redirection for either performance (e.g. control loop) or deadlock issues (GIL). These settings allow users to avoid these issues, at the cost of having inconsistent logging from Python. See the documentation here. (#19703) - Drake now includes a fix_inertia tool, to compute inertia tensors from masses and geometries in models. It works on both URDF and SDFormat models, and outputs a complete updated model file. See the documentation here. (#19731)
MultibodyPlant::CalcReactionForces()
has been fixed and now gives correct results in discrete mode for both TAMSI and SAP, including contributions from constraints. (#19920)
Breaking changes since v1.19.0
- C++ code that was reading from the
systems::sensors::CameraConfig::renderer_class
field now gets astd::variant
back, instead of astd::string
directly. Downstream code will need to adapt withstd::get_if<std::string>(¶ms.renderer_class)
to compensate. (#19863) geometry::optimization::GraphOfConvexSets
no longer hasVertexId
andEdgeId
overloads. The class is marked experimental, so some changes are made without deprecation. In particular, python users of the removed overloads should get a useful message telling them to use the other overload.AddEdge
,RemoveVertex
, andRemoveEdge
have changed (without deprecation) from takingconst Vertex&
toVertex*
. The previously asserted const-ness was incorrect. This change will not impact python users. (#19825)geometry::optimization::CIrisSeparatingPlane
is removed. The return type ofCspaceFreePolytopeBase::separating_planes()
is changed fromCIrisSeparatingPlane
toCSpaceSeparatingPlane
. (#19756)
Refer to our Drake Stability Guidelines for our policy on API changes.
Changes since v1.19.0
Dynamical Systems
New features
- Add
SimulatorConfig
support toFiniteHorizonLQR
. (#19765) - Add optional publish_offset to
LcmPublisherSystem
. (#19899) - Add capture_offset and output_delay to
CameraConfig
. (#19898) CameraConfig
can use RenderEngineParams. (#19863)
Fixes
- Improve
DiagramBuilder::Build
performance. (#19746) - Fix wrong
SystemId
on the ports of a cloned system. (#19875) - Allow
GetDowncastSubsystemByName
to work with non-templatized systems. (#19925) - Propagate
EventStatus
throughEvent
handlers. (#19989)
Mathematical Program
New features
- MathematicalProgram
- GraphOfConvexSets
- ConvexSet
- Implement
MaybeGetFeasiblePoint
forConvexSet
. (#19804) - Update
ConvexSet
logic to properly handle zero-dimensional sets. (#19732) - Improve implementations of
DoMaybeGetFeasiblePoint
for some subclasses ofConvexSet
. (#19824) - Create base-class version for
IsBounded
inConvexSet
, and letIntersection
andSpectrahedron
use it. (#19888) - Create
AffineSubspace
subclass ofConvexSet
. (#19828, #19850, #19851, #19864, #19975)
- Implement
- Misc. Optimization
Fixes
- Handle bounding box constraints in
MakeSemidefiniteRelaxation
. (#19795) - Fix bug in
DoAddPointInNonnegativeScalingConstraints
forSpectrahedron
. (#19838) - Fix
ParseConstraint
for cases with infinities. (#19903) - Handle converting
VPolytope
toHPolyhedron
if it is not full dimensional. (#19979)
Multibody Dynamics and Geometry
New features
- SAP
- Misc. Multibody
- Meshcat
- Environment mapping support. (#19837)
- Rendering
RenderEngineGl
loads .mtl files. (#19747)- Add lights to
RenderEngineGlParams
. (#19693) RenderEngineGlParams
are compatible now with YAML serialization. (#19912)RenderEngineGltfClientParams
are compatible now with YAML serialization. (#19906)RenderEngineVtkParams
are compatible now with YAML serialization. (#19911)
Fixes
- SAP
- Meshcat
- Rendering
- Misc. Multibody
- Fix names shown off-by-one in
RationalForwardKinematics
var names. (#19797)
- Fix names shown off-by-one in
Planning
New features
- Construct
MinimumDistanceConstraint
with aCollisionChecker
. (#19760) - Add new
DistanceAndInterpolationProvider
API toCollisionChecker
. (#19105) - Add
GcsTrajectoryOptimization::graph_of_convex_sets
accessor. (#19873)
Fixes
- Improve implementation of
GcsTrajectoryOptimization::Subgraph
costs and constraints. (#19873)
Tutorials and examples
- Add option to model Strandbeest with constraints. (#19782)
- Add new models to the collection in
manipulation_station/models
. (#19771)
Miscellaneous features and fixes
- Implement
BezierCurve::DerivativeControlPointCoefficients()
. (#19867) - Update inertias for link 2 and link 4 for the iiwas that were mistakenly rotated by 90 degrees. (#19830)
- Fix integer overflow in
ToLatex
implementation. (#19951) - Fix YAML round-trip bugs with
variant<string,...>
. (#19954)
pydrake bindings
New features
common.use_native_cpp_logging
(#19703)gym.DrakeGymEnv
(#19831)math.SoftOverMax
(#19789)math.SoftOverMin
(#19789)math.SoftUnderMax
(#19789)math.SoftUnderMin
(#19789)multibody.inverse_kinematics.MinimumDistanceConstraint
constructor overloads that accept aCollisionChecker
. (#19921)multibody.inverse_kinematics.MinimumDistanceConstraint
constructor overloads that accept a Python penalty function. (#19855)multibody.plant.MultibodyPlant.GetFrameIndices
(#19964)solvers.MathematicalProgram.AddLinearConstraint
overload that accepts a row vector. (#19962)solvers.MinimumValueConstraint
(#19839)systems.framework.SystemBase.HasInputPort
(#19806)systems.framework.SystemBase.HasOutputPort
(#19806)- Add visualization triads in meldis. (#19848)
Fixes
- Add missing import to fix
DirectCollocation
bindings. (#19938) - Fix Meldis to recognize mesh file content changes. (#19878)
- Improve error message for un-imported Value<> binding. (#19984)
- Add missing
pydrake.systems.sensors
import to the examples. (#19985)
Build system
- Remove spurious lcm-gen dependency (#19788)
- Remove vestigial meshcat files from the install (#19877)
- Install the picosha2 LICENSE file (#19879)
Build dependencies
- Add dependency on gymnasium_py (#19831, #19909)
- Build clp_internal from source (#19928)
- Hide symbols from clp_internal (#19928)
- Hide symbols from common_robotics_utilities (#19893)
- Hide symbols from conex_internal (#19892)
- Hide symbols from csdp_internal (#19894)
- Hide symbols from picosha2_internal (#19879)
- Hide symbols from tinyobjloader_internal (#19880)
- Hide symbols from usockets_internal (#19889)
- Patch googlebenchmark to avoid shadow warnings (#19796)
- Stop using a <drake_vendor/…> prefix on external include paths (#19936)
- Upgrade abseil_cpp_internal to latest commit (#19778, #19929)
- Upgrade bazel to latest release 6.3.1 (#19891)
- Upgrade common_robotics_utilities to latest commit (#19729, #19893)
- Upgrade curl_internal to latest release 8.2.1 (#19934)
- Upgrade dm_control_internal to latest commit (#19773, #19929)
- Upgrade drake_models to latest commit (#19771)
- Upgrade googlebenchmark to latest release 1.8.2 (#19773)
- Upgrade gtest to latest release 1.14.0 (#19932)
- Upgrade gz_math_internal to latest release 7.2.0 (#19776)
- Upgrade libcmaes to latest commit (#19773)
- Upgrade meshcat to latest commit (#19817, #19837)
- Upgrade mosek to release 10.0.46 (#19798)
- Upgrade msgpack_internal to latest release 6.1.0 (#19773)
- Upgrade mypy_internal to latest release 1.4.1 (#19773)
- Upgrade nanoflann_internal to latest release v1.5.0 (#19775)
- Upgrade optitrack_driver to latest commit (#19929)
- Upgrade petsc to latest release 3.19.3 (#19773)
- Upgrade platforms to latest release 0.0.7 (#19929)
- Upgrade pycodestyle to latest release 2.11.0 (#19933)
- Upgrade qdldl_internal to latest release 0.1.7 (#19773)
- Upgrade rules_python to latest release 0.24.0 (#19773)
- Upgrade stable_baselines3_internal to latest release 2.0.0 (#19909)
- Upgrade suitesparse_internal to latest release 7.1.0 (#19773)
- Upgrade tinyobjloader to latest commit (#19773)
- Upgrade typing_extensions_internal to latest release 4.7.0 (#19773)
- Upgrade voxelized_geometry_tools to latest commit (#19729, #19929)
Newly-deprecated APIs
pydrake.manipulation.kuka_iiwa
(#19869)pydrake.manipulation.schunk_wsg
(#19869)pydrake.manipulation.util
(#19869)drake::geometry::RenderEngineGlParams::default_label
(#19912)drake::geometry::RenderEngineGltfClientParams::default_label
(#19906)drake::geometry::RenderEngineVtkParams::default_label
(#19911)drake::multibody::UnitInertia::AxiallySymmetric
requires a normalized unit vector (#19926)drake::multibody::UnitInertia::SolidCapsule
three-argument form requires a normalized unit vector (#19926)drake::multibody::UnitInertia::SolidCylinder
three-argument form requires a normalized unit vector (#19926)drake::multibody::UnitInertia::SolidCylinder
two-argument form (#19926)drake::multibody::UnitInertia::SolidCylinderAboutEnd
three-argument form requires a normalized unit vector (#19926)drake::multibody::UnitInertia::StraightLine
requires a normalized unit vector (#19926)drake::multibody::UnitInertia::ThinRod
requires a normalized unit vector (#19926)drake::multibody::UnitInertia::SolidCylinderAboutEnd
two-argument overload (#19803)drake::systems::DiscreteUpdateEvent::DiscreteUpdateCallback
(#19989)drake::systems::DiscreteUpdateEvent::DiscreteUpdateEvent
overloads taking legacy callback type signatures (#19989)drake::systems::DiscreteUpdateEvent::SystemCallback
(#19989)drake::systems::PublishEvent::PublishCallback
(#19989)drake::systems::PublishEvent::PublishEvent
overloads taking legacy callback type signatures (#19989)drake::systems::PublishEvent::SystemCallback
(#19989)drake::systems::UnrestrictedUpdateEvent::SystemCallback
(#19989)drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateCallback
(#19989)drake::systems::UnrestrictedUpdateEvent::UnrestrictedUpdateEvent
overloads taking legacy callback type signatures (#19989)- The @clp external (#19928)
- Drake now refers to @clp_internal instead⁽¹⁾.
- The @conex external (#19883)
- Drake now refers to @conex_internal instead⁽¹⁾.
- The @csdp external (#19894)
- Drake now refers to @csdp_internal instead⁽¹⁾.
- The @gym_py external (#19909)
- Drake now refers to @gymnasium_py instead.
- The @optitrack_driver external (#19866)
- Soon, drake will no longer require the optitrack driver.
- The installed optitrack_client program (#19866)
- For replacement packages, see optitrack-driver releases.
- The @petsc external (#19890, #19929)
- Soon, drake will no longer require PETSc.
- The @picosha2 external (#19879)
- Drake now refers to @picosha2_internal instead⁽¹⁾.
- The @rules_pkg external (#19872)
- Drake no longer requires this package.
- The @tinyobjloader external (#19880)
- Drake now refers to @tinyobjloader_internal instead⁽¹⁾.
- The @usockets external (#19889)
- Drake now refers to @usockets_internal instead⁽¹⁾.
- The @uwebsockets external (#19889)
- Drake now refers to @uwebsockets_internal instead⁽¹⁾.
- drake::systems::sensors::OptitrackLcmFrameSender (#19866)
- If you still need this system, you may copy its code into your own project.
- drake::systems::sensors::OptitrackReceiver (#19866)
- If you still need this system, you may copy its code into your own project.
⁽¹⁾ Packages named “internal” are not intended for end-users; if you still need direct access to one of these packages (e.g., “@foo”), you may copy its bzl rules (e.g., “drake/tools/workspace/foo/**”) into your own project.
Removal of deprecated items
Notes
This release provides pre-compiled binaries named
drake-20230816-{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.