Drake v0.25.0

Back to Release Notes

Announcements

  • Drake no longer supports macOS Mojave 10.14 #14352; it only supports Catalina 10.15. Work is underway to support Big Sur 11. Note that macOS releases only support Python 3.8, not Python 3.9.

Breaking changes since v0.24.0

  • Implement Mesh for proximity via its convex hull. Anyone with a mesh registered with a proximity role will start observing proximity query results where there were none before (#14351).
  • Remove RenderEngineOspray (#14339).
  • Remove pydrake.common.cpp_const and pydrake.third_party (#14270).
  • Remove spring_mass_system from the libdrake shared library (#14284).
  • Replace robotlocomotion.robot_plan_t with drake.lcmt_robot_plan (#14377).
    • EncodeKeyFrames, MoveIkDemoBase, and RobotPlanInterpolator and their associated demos (move_iiwa_ee, move_jaco_rr, kuka_plan_runner, etc.), now operate on lcmt_robot_plan messages, not robot_plan_t messages.
    • EncodeKeyFrames no longer takes an “info” argument – the message no longer contains the unused snopt integer.

Changes since v0.24.0

Dynamical Systems

New features

  • Return multiple shooting constraints for AddConstraintToAllKnotPoints and AddEqualTimeIntervalsConstraints (#14340)
  • Introduce AddNamedSystem sugar to DiagramBuilder (#14404)
  • Permit constructing camera info from intrinsic matrix (#14402)
  • Implement fan-out of diagram inputs in DiagramBuilder (#14361)

Fixes

  • Un-deprecate FixInputPort taking an const ref (#14454)

Mathematical Program

New features

  • Aggregate BoundingBoxConstraint (#14248)
  • MosekSolver supports quadratic cost with nonlinear conic constraints (#14237)
  • Expose new methods at symbolic_decompose (#14353)

Fixes

  • Throw an error when getting dual solution for a QCP in Gurobi (`#14285)
  • Only retrieve MOSEK dual solution when there are no integer variables (#14338`)
  • Retrieve linear constraint dual from MOSEK result (#14348)
  • Ensure IPOPT uses MUMPS as its linear solver (#14446, #14288)

Multibody Dynamics

New features

  • Allow force publish calls on DrakeVisualizer (#14304)
  • Add PackageMap Remove method (#14301)
  • Enhance documentation for bodies & frames and monogram notation for spatial velocity/acceleration (#14397)
  • Add new geometry::DrakeVisualizer system (#14247)
  • Add color and texture image rendering to RenderEngineGl (#14226, #14256, #14260, #14289, #14357, #14396)
  • New hydroelastic contact model in progress (#14251, #14378)
  • Add parameters and parsing for reflected inertia (#14167, #14323)

Fixes

  • Clean up and deprecation of SceneGraphInspector/QueryObject bindings (#14280)
  • Propagate joint default positions through scalar conversion (#14347)
  • Throw an exception in relevant center of mass methods if composite_mass <= 0 (#14316)
  • Remove MultibodyPlant’s awareness of SceneGraph<AutoDiff> support (#14324)
  • Add ValidateContext() to methods that take a context (#14389)
  • Fix missing multibody graph accounting (#14411)
  • Document that body spatial velocity/acceleration methods are for point Bo (not point Bcm) (#14382)

Tutorials and examples

  • Minor fixes for flake8’s F821 (undefined name) error (#14293)
  • Change to use SetInitialGuess in the nlp tutorial (#14331)
  • Allegro with reflected inertia (#14204)
  • dualshock: Update example to use Logitech controller (#14388)
  • Add a tutorial on quadratic program (#14403)
  • acrobot: Add an autodiff benchmark (#14432)

Miscellaneous features and fixes

  • Use package instead of relative path for allegro model files (#14252)
  • meshcat: upgrade interface to use QueryObject (#14292)
  • systems/lcm: Add LcmScopeSystem (#14308)
  • yaml: Correctly emit variants with templated inner types (#14327)
  • yaml: Fix parsing bugs with zero-sized matrices (#14360)

pydrake bindings

New features

  • None

Fixes

  • Correct bindings for DrakeVisualizer.AddToBuilder (#14314)
  • meshcat visualizer: remove period which causes an error outside of drake (#14320)
  • Fix type bug in BasicVector::set_value for non-float types (#14343)
  • Ensure manipulation_station_py.cc imports dep modules (#14370)
  • Add keep_alive cycle to DiagramBuilder.AddSystem (#14356)
  • Fix bindings for RenderCamera classes (#14394)
  • Fix some argument names in SceneGraphInspector bindings (#14259)
  • RenderEngine: disallow some APIs with deprecated CameraProperties instances (#14300)

Newly bound

  • pydrake.geometry.ContactSurface (#14244)
  • pydrake.geometry.SceneGraphInspector.BelongsToSource (#14259)
  • pydrake.geometry.SceneGraphInspector.CollisionFiltered (#14259)
  • pydrake.geometry.SceneGraphInspector.FramesForSource (#14259)
  • pydrake.geometry.SceneGraphInspector.GetCollisionCandidates (#14259)
  • pydrake.geometry.SceneGraphInspector.GetFrameGroup (#14259)
  • pydrake.geometry.SceneGraphInspector.GetGeometries (#14259)
  • pydrake.geometry.SceneGraphInspector.GetOwningSourceName (#14259)
  • pydrake.geometry.SceneGraphInspector.NumFramesForSource (#14259)
  • pydrake.geometry.SceneGraphInspector.NumGeometriesForFrame (#14259)
  • pydrake.geometry.SceneGraphInspector.NumGeometriesForFrameWithRole (#14259)
  • pydrake.geometry.SurfaceMesh.centroid (#14244)
  • pydrake.multibody.plant.CalcCenterOfMassPosition (#14249)
  • pydrake.multibody.plant.ContactResults.hydroelastic_contact_info (#14244)
  • pydrake.multibody.plant.ContactResults.num_hydroelastic_contacts (#14244)
  • pydrake.multibody.plant..GetBodiesWeldedTo (#14345)
  • pydrake.multibody.plant.HydroelasticContactInfo (#14244)
  • pydrake.multibody.plant.MultibodyPlant.get_mutable_joint (#14257)
  • pydrake.multibody.plant.MultibodyPlant.GetJointIndices (#14257)
  • pydrake.multibody.tree.Body.CalcCenterOfMassInBodyFrame (#14207)
  • pydrake.multibody.tree.Body.CalcSpatialInertiaInBodyFrame (#14207)
  • pydrake.multibody.tree.Body.EvalPoseInWorld (#14207)
  • pydrake.multibody.tree.Body.EvalSpatialAccelerationInWorld (#14207)
  • pydrake.multibody.tree.Body.EvalSpatialVelocityInWorld (#14207)
  • pydrake.multibody.tree.Body.get_default_mass (#14207)
  • pydrake.multibody.tree.Body.get_mass (#14207)
  • pydrake.multibody.tree.Body.get_num_flexible_positions (#14207)
  • pydrake.multibody.tree.Body.get_num_flexible_velocities (#14207)
  • pydrake.multibody.tree.Body.has_quaternion_dofs (#14207)
  • pydrake.multibody.tree.Frame.CalcOffsetPoseInBody (#14207)
  • pydrake.multibody.tree.Frame.CalcOffsetRotationMatrixInBody (#14207)
  • pydrake.multibody.tree.Frame.CalcPose (#14207)
  • pydrake.multibody.tree.Frame.CalcPoseInWorld (#14207)
  • pydrake.multibody.tree.Frame.CalcRotationMatrix (#14207)
  • pydrake.multibody.tree.Frame.CalcRotationMatrixInBodyFrame (#14207)
  • pydrake.multibody.tree.Frame.CalcRotationMatrixInWorld (#14207)
  • pydrake.multibody.tree.Frame.CalcSpatialAccelerationInWorld (#14207)
  • pydrake.multibody.tree.Frame.CalcSpatialVelocity (#14207)
  • pydrake.multibody.tree.Frame.CalcSpatialVelocityInWorld (#14207)
  • pydrake.multibody.tree.Frame.GetFixedOffsetPoseInBody (#14207)
  • pydrake.multibody.tree.Frame.GetFixedPoseInBodyFrame (#14207)
  • pydrake.multibody.tree.Frame.GetFixedRotationMatrixInBody (#14207)
  • pydrake.multibody.tree.Frame.GetFixedRotationMatrixInBodyFrame (#14207)
  • pydrake.multibody.tree.Frame.is_world_frame (#14207)
  • pydrake.solvers.mathematicalprogram.PyFunctionConstraint (#14410)
  • pydrake.symbolic.DecomposeAffineExpression (#14353)
  • pydrake.symbolic.DecomposeAffineExpressions (#14353)
  • pydrake.symbolic.DecomposeLinearExpressions (#14353)
  • pydrake.symbolic.DecomposeQuadraticPolynomial (#14353)
  • pydrake.symbolic.ExtractVariablesFromExpression (#14353)
  • pydrake.symbolic.GetVariableVector (#14353)
  • pydrake.symbolic.MakeMatrixBinaryVariable (#14342)
  • pydrake.symbolic.MakeMatrixBooleanVariable (#14342)
  • pydrake.symbolic.MakeMatrixContinuousVariable (#14342)
  • pydrake.symbolic.MakeMatrixVariable (#14342)
  • pydrake.symbolic.MakeVectorBinaryVariable (#14342)
  • pydrake.symbolic.MakeVectorBooleanVariable (#14342)
  • pydrake.symbolic.MakeVectorContinuousVariable (#14342)
  • pydrake.symbolic.MakeVectorVariable (#14342)
  • pydrake.symbolic.Variable.get_name (#14342)
  • pydrake.systems.framework.OutputPort.get_name (#14438)

Build system and dependencies

  • Add dependency on double-conversion (#14392)
  • Add dependency on lzma (#14392)
  • Add dependency on six (#14390)
  • Add dependency on sqlite3 (#14392)
  • Upgrade dreal to latest release 4.20.12.1 (#14443)
  • Upgrade fcl to latest commit (#14271)
  • Upgrade fmt to latest release 7.1.3 (#14272, #14413)
  • Upgrade ghc_filesystem to latest release 1.3.8 (#14273, #14414)
  • Upgrade ignition_math to latest release 6.7.0 (#14415)
  • Upgrade intel_realsense_ros to latest release 2.2.20 (#14274, #14416)
  • Upgrade lcm to latest commit (#14275, #14418)
  • Upgrade meshcat_python to latest commit (#14417)
  • Upgrade ros_xacro to latest release 1.13.9 (#14276)
  • Upgrade rules_pkg to latest release 0.3.0 (#14277)
  • Upgrade rules_python to latest release 0.1.0 (#14278)
  • Upgrade to rebuilt VTK binaries (#14393, #14395)
  • Neither compile docs nor install documentation prereqs by default (#14168)
  • Add kcov_merge tool to consolidate results; for performance, coverage runs no longer consolidate by default (#14294)
  • Fix to be compatible with Bazel 4.0 release candidate (#14439, #14441, #14442)
  • Don’t install stray __init__.py into site-packages (#14444)
  • Changes specific to Ubuntu:
    • Add libspdlog-dev for Ubuntu 20.04 Focal only (#14429)
    • Remove dependency on libtbb2 (#14395, #14339)
  • Changes specific to macOS:
    • Rebuild drake-visualizer (#14395)
    • Fix compatibility vs Homebrew python 3.8 (#14395, #14428)
    • Remove support for Mojave 10.14 (#14352)
    • Remove support for building documentation (#14350)

Newly-deprecated APIs

LCM messages

  • lcmtypes/lcmt_body_acceleration.lcm (#14372)
  • lcmtypes/lcmt_body_motion_data.lcm (#14372)
  • lcmtypes/lcmt_body_wrench_data.lcm (#14372)
  • lcmtypes/lcmt_constrained_values.lcm (#14372)
  • lcmtypes/lcmt_contact_information.lcm (#14372)
  • lcmtypes/lcmt_desired_body_motion.lcm (#14372)
  • lcmtypes/lcmt_desired_centroidal_momentum_dot.lcm (#14372)
  • lcmtypes/lcmt_desired_dof_motions.lcm (#14372)
  • lcmtypes/lcmt_foot_flag.lcm (#14372)
  • lcmtypes/lcmt_inverse_dynamics_debug_info.lcm (#14372)
  • lcmtypes/lcmt_joint_pd_override.lcm (#14372)
  • lcmtypes/lcmt_manipulator_plan_move_end_effector.lcm (#14372)
  • lcmtypes/lcmt_piecewise_polynomial.lcm (#14372)
  • lcmtypes/lcmt_plan_eval_debug_info.lcm (#14372)
  • lcmtypes/lcmt_polynomial.lcm (#14372)
  • lcmtypes/lcmt_polynomial_matrix.lcm (#14372)
  • lcmtypes/lcmt_qp_controller_input.lcm (#14372)
  • lcmtypes/lcmt_qp_input.lcm (#14372)
  • lcmtypes/lcmt_quadrotor_input_t.lcm (#14372)
  • lcmtypes/lcmt_quadrotor_output_t.lcm (#14372)
  • lcmtypes/lcmt_resolved_contact.lcm (#14372)
  • lcmtypes/lcmt_robot_state.lcm (#14372)
  • lcmtypes/lcmt_scope_data.lcm (#14372)
  • lcmtypes/lcmt_simulation_command.lcm (#14372)
  • lcmtypes/lcmt_support_data.lcm (#14372)
  • lcmtypes/lcmt_viewer2_comms.lcm (#14372)
  • lcmtypes/lcmt_whole_body_data.lcm (#14372)
  • lcmtypes/lcmt_zmp_com_observer_state.lcm (#14372)
  • lcmtypes/lcmt_zmp_data.lcm (#14372)

C++

  • drake::examples::manipulation_station::RegisterRgbdSensor with DepthCameraProperties (#14375)
  • drake::geometry::ConnectDrakeVisualizer (#14282)
  • drake::geometry::DispatchLoadMessage (#14282)
  • drake::geometry::GeometryState::GetSourceName (#14280)
  • drake::geometry::GeometryState::RenderColorImage with CameraProperties (#14359)
  • drake::geometry::GeometryState::RenderDepthImage with DepthCameraProperties (#14359)
  • drake::geometry::GeometryState::RenderLabelImage with CameraProperties (#14359)
  • drake::geometry::GeometryState::X_PF (#14280)
  • drake::geometry::GeometryState::X_WF (#14280)
  • drake::geometry::GeometryState::X_WG (#14280)
  • drake::geometry::QueryObject::RenderColorImage with CameraProperties (#14359)
  • drake::geometry::QueryObject::RenderDepthImage with DepthCameraProperties (#14359)
  • drake::geometry::QueryObject::RenderLabelImage with CameraProperties (#14359)
  • drake::geometry::QueryObject::X_PF (#14280)
  • drake::geometry::QueryObject::X_WF (#14280)
  • drake::geometry::QueryObject::X_WG (#14280)
  • drake::geometry::render::CameraProperties (#14376)
  • drake::geometry::render::DepthCameraProperties (#14376)
  • drake::geometry::render::RenderEngine::RenderColorImage with CameraProperties (#14359)
  • drake::geometry::render::RenderEngine::RenderDepthImage with DepthCameraProperties (#14359)
  • drake::geometry::render::RenderEngine::RenderLabelImage with CameraProperties (#14359)
  • drake::geometry::SceneGraph(data_as_state=true) (#14245)
  • drake::geometry::SceneGraphInspector::GetSourceName (#14280)
  • drake::geometry::SurfaceMesh::kDim (#14420)
  • drake::geometry::VolumeMesh::kDim (#14420)
  • drake::systems::sensors::RgbdSensor::CameraPoses (#14358)
  • drake::systems::sensors::RgbdSensor::RgbdSensor constructor with CameraPoses or CameraProperties (#14358)

Removal of deprecated items

Build system

  • bullet, freetype2 externals (#14398)

C++ items

  • drake::math::Slerp (#14398)
  • drake::pydrake::py_reference (#14267)
  • drake::pydrake::py_reference_internal (#14267)
  • drake::systems::kAutoSize (#14398)
  • drake::systems::Simulator: time jumps warning (#14398)
  • drake::systems::Subvector empty constructor (#14398)

Models

  • examples/irb140/urdf (#14267)
  • examples/kuka_iiwa_arm/models/objects/big_robot_toy.urdf (#14267)
  • manipulation/models/wsg_50_description URDF and meshes (#14267)

Notes

This release provides pre-compiled binaries named drake-20201215-{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.