Drake v1.10.0

Back to Release Notes

Announcements

  • macOS Big Sur is no longer supported (#18299)
  • The new module pydrake.visualization.model_visualizer provides an easy way to visualize SDFormat and/or URDF models (#18180)
  • pydrake now provides *.pyi files to improve VSCode auto-completion (#18074)
  • New Event API has been provided for more consistent and clear definition and execution of events (#18106)

Breaking changes since v1.9.0

  • BsplineTrajectory construction in pydrake has changed how it interprets numpy array parameters. (#18182)
  • drake::systems::EventData (and its binding in pydrake) as a base class has been eliminated; its role is now played by std::variant. (#18068)

Refer to our Drake Stability Guidelines for our policy on API changes.

Changes since v1.9.0

Dynamical Systems

New features

  • Factor out magical lcm_buses lookup for reuse (#18090)
  • Add more by-name sugar to Diagram and DiagramBuilder (#18078)
  • Add lcm_bus name to CameraConfig (#18069)
  • Add APIs for manual triggering of periodic discrete updates (#18048)
  • Implement JointStiffnessController (#18272)
  • InverseDynamics and InverseDynamicsController support Drake default scalars (#18271)
  • Add the ability to deprecate input and output ports (#18274)
  • Add KinematicTrajectoryOptimization (#18190) (#18309)
  • Modernize and clarify Event APIs on System and LeafSystem (#18106)

Fixes

  • None

Mathematical Program

New features

  • Add affine cone constraint in MOSEK (#18114)
  • Support L2NormCost in SnoptSolver and IpoptSolver (#18184)
  • Replace quadratic cost with affine cone constraint and linear cost in MOSEK (#18185)
  • Allow IrisInConfigurationSpace to optionally consider configuration space obstacles (#18136)

Fixes

  • GraphOfConvexSets correctly handles multiple costs for a Vertex (#18043)
  • Fix depth first search failure in GraphOfConvexSets rounding (#18063)
  • Remove requirement that CartesianProduct sets must be bounded (#18140)
  • Gurobi solver options are handled more gracefully (#18124)
  • Fix MathematicalProgram::Clone to clone everything (#18135)
  • Aggregate duplicated variables in constraints in MosekSolver (#18280)
  • Enable Gurobi to handle duplicated variables in its linear constraints (#18291)
  • Fix bug in HPolyhedron::ReduceInequalities (#18302)

Multibody Dynamics and Geometry

New features

  • Meshcat’s JointSliders::Run() returns the final positions (#18215)
  • Support keycodes in Meshcat’s JointSliders (#18087)
  • Add capsule support for Meshcat (#17319)
  • Add Parser::AddModelsFromString (#18110)
  • Add new Parser::AddModels function (#18208)
  • Add ScrewJoint constructor that accepts axis vector (#18019)
  • Parse screw joints from SDFormat (#18127)
  • Parse screw joints from URDF (#18191)
  • Add RationalForwardKinematics (#17572)
  • Add ExternallyAppliedSpatialForceMultiplexer (#18171)
  • Add 16U PNG and TIFF depth support to remote rendering (#18205)
  • Add support for gamepads in Meshcat (#18243)
  • Implement CalcVolume for Mesh and Convex Shapes (#18312)
  • Implement basic material and mesh support in MuJoCo parser (#18317)

Fixes

  • Correct calculations of spatial velocity across ScrewJoint (#18019)
  • Add hydroelastic forces to continuous mode reaction forces computation (#18057)
  • Add multibody::world_frame_index() getter (#18149)
  • Change world body name from “WorldBody” to “world” (#18158)
  • Fix Meshcat’s PerspectiveCamera msgpack (#18213)
  • Fix two bugs in GlobalInverseKinematics (#18206)
  • Improve MultibodyPlant detection/feedback for invalid mass/inertia properties (#18153)
  • Add FixedOffsetFrame::SetPoseInParentFrame() (#18198)

Planning

New features

  • None

Fixes

  • None

Tutorials and examples

  • Add python flavor of the hardware_sim example (#18066)

Miscellaneous features and fixes

New features

  • Add optional use_robot_state port to Diff IK Integrator (#18073)
  • Expose utime input port for IiwaCommandSender and IiwaStatusSender (#18167)
  • Add tests for RotationMatrix::ToRollPitchYaw() (#18172)
  • Convert between std::vector<VectorX> and MatrixX ([#18183][_#18183])
  • Support prismatic joint in RationalForwardKinematics (#18179)
  • Apply stereographic projection substitution for more general trigonometric polynomial (#18203)
  • Compute monomial basis with the degree for each variable <= 1 (#18222)
  • Add jaco lcm time input/output ports (#18220)
  • Add helper systems ColorizeDepthImage, ColorizeLabelImage, and ConcatenateImages (#17597)
  • Add StackedTrajectory (#18192)
  • Parallelize point cloud operations with OpenMP and use common_robotics_utilities’s DynamicSpatialHashedVoxelGrid for voxel filter (#18216)

Fixes

  • Remove manipulation/util/geometry_inspector (#18058)
  • Fix SparseMatrix data loss ([#18219][_#18219])
  • Don’t use march=broadwell on Ubuntu arm64 machines in @drake//math (#18238)
  • Fully evict pydrake from drake-visualizer (#18144)

pydrake bindings

New features

  • Add get_module_name() to cpp_template.py (#18169)
  • Use Python’s typing for generic types (#18117)
  • Add repr() for spatial vectors (#18112)
  • Add type canonicalization for all unsigned ints (#18115)
  • Improve BsplineTrajectory usability (#18182)
  • Bind dataclass-like schemas for serializable structs (#18109)
  • Move manip/util/show_model to pydrake/visualization/model_visualizer (#18180)
  • Add a Stop Running button and Meshcat reuse to ModelVisualizer (#18284)
  • Add VideoWriter system (#17597)

Fixes

  • py serialize: Add missing .Finished() for no-doc case (#18207)
  • ‘import pydrake’ now loads its native code immediately, instead of deferring it (#18141)
  • Move import-error handling out of pydrake.all (#18081)
  • Remove spurous keep-alive annotations (#18301)
  • Do not show stack trace for meldis on sigint (#18293)

Newly bound

  • pydrake.geometry.Meshcat.SetTriangleColorMesh (#18100)
  • pydrake.math.RigidTransform.IsExactlyEqualTo (#18173)
  • pydrake.math.RigidTransform.GetmaximumAbsoluteDifference (#18173)
  • pydrake.math.RigidTransform.GetmaximumAbsoluteTranslationDifference (#18173)
  • pydrake.math.RotationMatrix.ToRollPitchYaw (#18187)
  • pydrake.math.VectorToSkewSymmetric (#18086)
  • pydrake.multibody.parsing.AddCollisionFilterGroup (#18108)
  • pydrake.multibody.parsing.AddDirectives (#18108)
  • pydrake.multibody.parsing.AddModel (#18108)
  • pydrake.multibody.parsing.AddModelInstance (#18108)
  • pydrake.multibody.parsing.AddWeld (#18108)
  • pydrake.multibody.parsing.ModelDirective (#18066)
  • pydrake.multibody.plant.DiscreteContactSolver (#18214)
  • pydrake.multibody.plant.MultibodyPlant.get_discrete_contact_solver (#18214)
  • pydrake.multibody.plant.MultibodyPlant.set_discrete_contact_solver (#18214)
  • pydrake.multibody.plant.MultibodyPlant.MakeActuatorSelectorMatrix (#18209)
  • pydrake.multibody.tree.ScrewJoint (#18049)
  • pydrake.systems.Context.SetStateAndParametersFrom (#18267)
  • pydrake.systems.framework.State.get_abstract_state (#18070)
  • pydrake.systems.primitives.PortSwitch (#18072)
  • pydrake.systems.sensors.LcmImageArrayToImages (#18237)
  • pydrake.systems.sensors.Image.Image (default constructor) (#17597)

Build system

New features

  • Provide Python module information in drake-config.cmake (#18201)
  • Install .pyi files (#18074)

Fixes

  • Fix installation of symlinks (#18107)
  • Improve error reporting when pydrake import fails (#18015)
  • Remove errors on Ubuntu arm64 (#18261)
  • Drop macOS Big Sur support (#18299)

Build dependencies

  • Remove dependency on msgpack_lite_js (#18269)
  • Fully evict pydrake from drake-visualizer (#18144)
  • Add dependency on bazelbuild/platforms (#18250)
  • Don’t abort for unsupported macOS versions (#18210)
  • Upgrade abseil_cpp_internal to latest commit (#18244)
  • Upgrade common_robotics_utilities to latest commit (#18128)
  • Upgrade curl_internal to latest release 7.86.0 (#18285)
  • Upgrade dm_control_internal to latest commit (#18244)
  • Upgrade meshcat to latest commit (#18132) (#18269)
  • Upgrade petsc to latest release v3.18.1 (#18244)
  • Upgrade ros_xacro_internal to latest release 1.14.14 (#18244)
  • Upgrade sdformat_internal to 13.1.0 (#18130)
  • Upgrade styleguide to latest commit (#18244)
  • Upgrade tinyobjloader to latest commit (#18244)
  • Upgrade typing_extensions_internal to latest release 4.4.0 (#18244)
  • Upgrade wheel build’s libjpeg-turbo to release 2.1.4 (#18189)
  • Upgrade wheel build’s libpng to release 1.6.38 (#18189)

Newly-deprecated APIs

  • drake::common::PiecewisePolynomial::Cubic (#18319)
  • drake::multibody::FixedOffsetFrame::SetPoseInBodyFrame (18198)
  • drake::multibody::MultibodyPlant::GetOutputPort(“continuous_state”) (and model instance-specific prefixed state port, e.g., “my_robot_continuous_state”) (#18274)
  • drake::multibody::parsing::AddModelFromString (#18110)
  • drake::multibody::parsing::PopulateFromEnvironment(“ROS_PACKAGE_PATH”) (#18226)
  • drake::solvers::DrealSolver (#18156)
  • drake::solvers::SolverType::kDReal (#18156)
  • drake::solvers::IbexSolver (#18156)
  • drake::solvers::SolverType::kIbex (#18156)
  • drake::symbolic::SubstituteStereographicProjection symbolic::Exprssion overload (#18179)
  • drake::systems::LeafSystem::DeclarePeriodicDiscreteUpdate (#18106)
  • drake::systems::LeafSystem::DeclarePeriodicPublish (#18106)
  • drake::systems::LeafSystem::DeclarePeriodicUnrestrictedUpdate (#18106)
  • drake::systems::System::CalcDiscreteVariableUpdates (#18106)
  • drake::systems::System::CalcUnrestrictedUpdate (#18106)
  • drake::systems::System::Publish (#18106)
  • pydrake.multibody.parsing.AddModelFromString (#18110)
  • pydrake.solvers.dreal.DrealSolver (#18156)
  • pydrake.solvers.ibex.IbexSolver (#18156)
  • pydrake.solvers.SolverType.kDRael (#18156)
  • pydrake.solvers.SolverType.kIbex (#18156)
  • pydrake.systems.LeafSystem.DeclarePeriodicDiscreteUpdate (#18106)
  • pydrake.systems.LeafSystem.DeclarePeriodicPublish (#18106)
  • pydrake.systems.LeafSystem.DeclarePeriodicUnrestrictedUpdate (#18106)
  • pydrake.systems.System.CalcDiscreteVariableUpdates (#18106)
  • pydrake.systems.System.CalcUnrestrictedUpdate (#18106)
  • pydrake.systems.System.Publish (#18106)
  • pydrake.visualization.meldis (#18160)
  • pydrake.visualization.plotting (#18160)
  • Referencing the world body in MultibodyPlant as “WorldBody” (it is now “world”) (#18158)
  • Deprecate cds (#18156)
  • Deprecate dreal (#18156)
  • Deprecate ibex (#18156)
  • Deprecate picosat (#18156)

Removal of deprecated items

  • The build target, file, and function for drake::autodiffxd_make_coherent (#18224)
  • The build target and header file: @drake//common:symbolic and drake/common/symbolic.h (#18224)
  • The build target @drake//common:symbolic_decompose (and header file drake/common/sybmolic_latex.h) (#18224)
  • The build target @drake//common:symbolic_latex (#18224)
  • The build target @drake//common:symbolic_trigonometric_polynomial (#18224)
  • drake::multibody::Body::get_default_mass() (#18242)
  • drake::symbolic::DecomposeAffineExpressions (reference-valued coeffs overload) (#18224)
  • drake::systems::sensors::ApplyCameraConfig() (without lcm_buses) (#18069)
  • drake::systems::System::GetPeriodicEvents() (no parameters) (#18094)
  • pydrake.geometry.MeshcatVisualizerCpp (#18225)
  • pydrake.geometry.MeshcatPointCloudVisualizerCpp (#18225)
  • pydrake.multibody.tree.ScrewJoint constructor with default parameters (#18122)

Notes

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