Announcements
- This release brings minor but notable improvements to performance, documentation, and error reporting.
- New features include SDFormat loading improvements and point cloud visualization.
Breaking changes since v0.30.0
- Any direct subclasses of
SolverInterface
need to implement the newExplainUnsatisfiedProgramAttributes
(#15028) - Systems now check their Contexts (#15030, #15102,
#15098, #15181, #15129)
- This change alters the semantics of classes such as Context that are closely tied to individual System objects. In the unlikely event that you have implemented methods that create, destroy, or repurpose such objects, you will need to follow the system compatibility interface concept. Although this is formally a breaking change without deprecation, we do not expect that it will affect any downstream users in practice.
- SDFormat 1.8 (#15099, #15208):
- Models nested via the
<include>
tag are no longer flattened, which means each included model will have its own model instance. drake::multibody::Parser::AddAllModelsFromFile
now returns all added models including nested models Note: This does not use a custom parser for URDFs via libsdformat’s Interface API, and thus may incur unexpected behavior when including URDF files from SDFormat pending the full resolution of #14295.
- Models nested via the
Changes since v0.30.0
Dynamical Systems
New features
- Added compatibility checks between
System
s and theirContext
(and constituent elements) (#15030, #15102, #15098, #15181, #15129) - Add
DiagramBuilder::IsConnectedOrExported
(#15096) - Add preliminary
AutoDiffXd
support toRandomSource
(#15092) - Add
LinearTransformDensity
(#15116, #15189) - Add
SystemScalarConverter::Remove()
(#15159, #15211)
Fixes
- Remove inner loop heap allocations (#15067, #15081, #15101, #15118)
- Rephrase LeafSystem cache entry to avoid type hasher warning (#15085)
Mathematical Program
New features
- Add virtual
SolverInterface::ExplainUnsatisfiedProgramAttributes
for more detailed error messages (#15028) - Add
is_convex
flag for constructing QuadraticCost (#15043) - Enable Solver error messages to indicate which cost is non-convex (#15059)
- Rename
AddL2NormCost
toAdd2NormSquaredCost
(#15134)
Fixes
- Improve documentation of
available()
vsenabled()
(#15114, #15152) - Ensure that
GetAllConstraints()
includes exponential cone constraints; before, they were excluded (#15180)
Multibody Dynamics
New features
- Make
PackageMap
copy/move/assignable, allow registering duplicate(package, path)
pairs, admit composition viaPackageMap::AddMap
, addPackageMap::GetPackageNames
to enumerate registered package names (#15064) - Make documentation and implementation of
CalcCenterOfMassPositionInWorld()
andCalcCenterOfMassTranslationalVelocityInWorld()
consistent withCalcTotalMass()
(#15054) - Add support for parsing acceleration limits for some joints in URDF and SDFormat (#15122)
- Add support for SDFormat 1.8 model composition (#15099, #15208)
- Implement
DoCalcImplicitTimeDerivativesResidual
forMultibodyPlant
(#15048)
Fixes
- Improve error messages on
MultibodyPlant
element lookups (#15083)
Tutorials and examples
New features
- Add tutorial showing derivatives of basic MultibodyPlant computations w.r.t. mass (#15103)
- Optionally publish point clouds in
manipulation_station
simulation (#14991)
Fixes
- In
quadratic_program
tutorial, mentionis_convex
flag (#15077) - Remove uses of
SolverType
in examples (#15214) - Fix the Jaco example to work on real hardware (not just sim) (#15203)
Miscellaneous features and fixes
- Add
AbstractValue::Make<T>()
overload for default construction (#15209) - Add
Vector6d<T>
toeigen_types
(#15192) - Add
ostream<<
operator forRollPitchYaw
andRigidTransform
(#14910) - Add template specializations for several
Eigen::numext
functions (#15065) - Add AVX support for inverse-rotation matrix times rotation matrix (#15073)
- Add AVX functions for transform composition (#15119)
- Add PointCloudToLcm system (#14990)
pydrake bindings
New features
- None
Fixes
- In pydrake.all, prefer pydrake.math over pydrake.symbolic (#15052)
Newly bound
- pydrake.solvers.mathematicalprogram.AddLinearMatrixInequalityConstraint (#15146
- pydrake.solvers.mathematicalprogram.LinearMatrixInequalityConstraint (#15146
- pydrake.solvers.mathematicalprogram.MathematicalProgram.AddExponentialConeConstraint (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.AddLinearCost(a, vars) (#15127)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.AddPositiveDiagonallyDominantMatrixConstraint (#15150)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.AddScaledDiagonallyDominantMatrixConstraint (#15150)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.Clone (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.FindIndeterminateIndex (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.NewEvenDegreeNonnegativePolynomial (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.
__copy__
(#15167) - pydrake.solvers.mathematicalprogram.MathematicalProgram.
__deepcopy__
(#15167) - pydrake.solvers.mathematicalprogram.MathematicalProgram.decision_variable(i) (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.linear_complementarity_constraints (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.linear_matrix_inequality_constraints.exponential_cone_constraints (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.lorentz_cone_constraints (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.num_indeterminates (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.positive_semidefinite_constraints, (#15167)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.rotated_lorentz_cone_constraints (#15167)
- pydrake.solvers.mathematicalprogram.SolverInterface.enabled (#15107)
- pydrake.symbolic.Monomial * float, float * pydrake.symbolic.Monomial (#15138)
- pydrake.symbolic.Monomial.
__init__
() (#15136) - pydrake.symbolic.TaylorExpand (#15185)
- pydrake.symbolic.dreal.DrealSolver (#15215)
- pydrake.systems.primitives.LinearTransformDensity (#15166)
Build system
- When using
setup_drake_colab
, thebuild=
argument is now required (#14482) - Add more documentation about using releases (#14482)
- Remove compiled Python files when building VTK binaries (#15171)
- Document Drake’s dependence on AVX2 and FMA instructions (#15165)
- Allow
robotlocomotion/director
brew tap to change default branch name to main (#15202) - Stop installing
geometry
headers that depended on non-installed third-party header files (fcl
) (#15070)
Build dependencies
- Upgrade recommended Bazel version to 4.1 (#15086)
- Upgrade
dreal
to latest release 4.21.06.2 (#15212) - Upgrade
ghc_filesystem
to latest release 1.5.6 (#15109) - Upgrade
googlebenchmark
to latest release 1.5.4 (#15110) - Upgrade
intel_realsense_ros
to latest release 2.3.0 (#15113) - Upgrade
ros_xacro
to latest release 1.13.11 (#15111) - Upgrade
tinyobjloader
to latest commit (#15112)
Newly-deprecated APIs
- Any LeafSystem port declaration overloads that do not specify a name
(
drake::systems::LeafSystem::Declare*Port
,pydrake.systems.LeafSystem.Declare*Port
) (#15179, #15182) - drake::math::ComputeBasisFromAxis (#15154)
- drake::solvers::MathematicalProgram::AddL2NormCost (#15134)
- drake::systems::LeafSystem::DeclareCacheEntry (#15197)
- This is not decorated as deprecated in C++, but will become protected on or after 2021-10-01.
- pydrake.math.ComputeBasisFromAxis (#15154)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.AddL2NormCost (#15134)
Removal of deprecated items
Notes
This release provides pre-compiled binaries named
drake-20210623-{bionic|focal|mac}.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.