Drake v0.31.0

Back to Release Notes

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 new ExplainUnsatisfiedProgramAttributes (#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.

Changes since v0.30.0

Dynamical Systems

New features

  • Added compatibility checks between Systems and their Context (and constituent elements) (#15030, #15102, #15098, #15181, #15129)
  • Add DiagramBuilder::IsConnectedOrExported (#15096)
  • Add preliminary AutoDiffXd support to RandomSource (#15092)
  • Add LinearTransformDensity (#15116, #15189)
  • Add SystemScalarConverter::Remove() (#15159, #15211)

Fixes

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 to Add2NormSquaredCost (#15134)

Fixes

  • Improve documentation of available() vs enabled() (#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 via PackageMap::AddMap, add PackageMap::GetPackageNames to enumerate registered package names (#15064)
  • Make documentation and implementation of CalcCenterOfMassPositionInWorld() and CalcCenterOfMassTranslationalVelocityInWorld() consistent with CalcTotalMass() (#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 for MultibodyPlant (#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, mention is_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> to eigen_types (#15192)
  • Add ostream<< operator for RollPitchYaw and RigidTransform (#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, the build= 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

  • pydrake.common.ToleranceType.absolute (#15108)
  • pydrake.common.ToleranceType.relative (#15108)

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.