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
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.