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
SolverInterfaceneed 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::AddAllModelsFromFilenow 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
Systems and theirContext(and constituent elements) (#15030, #15102, #15098, #15181, #15129) - Add
DiagramBuilder::IsConnectedOrExported(#15096) - Add preliminary
AutoDiffXdsupport 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::ExplainUnsatisfiedProgramAttributesfor more detailed error messages (#15028) - Add
is_convexflag for constructing QuadraticCost (#15043) - Enable Solver error messages to indicate which cost is non-convex (#15059)
- Rename
AddL2NormCosttoAdd2NormSquaredCost(#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
PackageMapcopy/move/assignable, allow registering duplicate(package, path)pairs, admit composition viaPackageMap::AddMap, addPackageMap::GetPackageNamesto 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
DoCalcImplicitTimeDerivativesResidualforMultibodyPlant(#15048)
Fixes
- Improve error messages on
MultibodyPlantelement 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_stationsimulation (#14991)
Fixes
- In
quadratic_programtutorial, mentionis_convexflag (#15077) - Remove uses of
SolverTypein 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 forRollPitchYawandRigidTransform(#14910) - Add template specializations for several
Eigen::numextfunctions (#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/directorbrew tap to change default branch name to main (#15202) - Stop installing
geometryheaders that depended on non-installed third-party header files (fcl) (#15070)
Build dependencies
- Upgrade recommended Bazel version to 4.1 (#15086)
- Upgrade
drealto latest release 4.21.06.2 (#15212) - Upgrade
ghc_filesystemto latest release 1.5.6 (#15109) - Upgrade
googlebenchmarkto latest release 1.5.4 (#15110) - Upgrade
intel_realsense_rosto latest release 2.3.0 (#15113) - Upgrade
ros_xacroto latest release 1.13.11 (#15111) - Upgrade
tinyobjloaderto 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.