Announcements
On macOS, Drake now only supports Python 3.8. Users must read #13097 for upgrade instructions.
When paths are set incorrectly, you will see an error such as this:
ImportError: Python version mismatch: module was compiled for Python 3.8, but the interpreter version is incompatible: 3.7.7
- We’ve made substantial enhancements to Drake’s integrators (including documentation, configuration, dense output, and symbolic expressions) as well as the trajectory family of data types.
- We’ve added new multibody plant primitives (ball rpy joint, bushing force element, door hinge force element) and added added a bit more SDF and URDF parsing support.
- RigidBodyPlant and all of the drake “attic” is scheduled for removal on
2020-09-01 (#12158, #13030).
- Please see #12158 for details of the timeline, and let us know if this will cause a problem.
- DrakeMockLcm is now just a simple alias for the memq:// provider (#13028)
Breaking Changes since v0.16.1
These are breaking changes that did not undergo a deprecation period:
- PiecewisePolynomial multiplication operator is no longer coefficient-wise (#4854, #13072)
- PiecewisePolynomial constant trajectory is now ∀t ∈ [-∞, ∞] not just [0, ∞] (#13096)
- PiecewiseTrajectory::value virtual method is now pass-by-const-reference; classes that override it will need rework; callers are unchanged (#12986)
- PiecewiseTrajectory tolerance for successive segments is now machine epsilon instead of 1e-10 (#13045)
- Integrators’ dense output representation is now PiecewiseTrajectory (#13008)
- IntegratorBase::DoDenseStep is no longer virtual (#13045)
- lcmt_jaco_status message now has external torque fields (#13017)
- WitnessFunction constructor has changed; users should not be using this constructor anyway (#12894)
- DrakeLcmInterface has a new pure virtual method; users should not be directly inheriting from this class anyway (#13051)
Changes since v0.16.1:
Dynamical Systems
New features
- Integrators
- Add doxygen group for our suite of integrators (#12900)
- Add simulator_flags configuration helper to select an integrator (#13013)
- Add support for starting from negative times (#13061)
- Add error control to Velocity-Implicit Euler Integrator (#12528, #12760)
- Add symbolic expression support to ExplicitEulerIntegrator and RungeKutta2Integrator (#12922, #12919)
- Replace integrators’ DenseOutput with PiecewiseTrajectory (#13008)
- Dense integration works with witness isolation (#13045)
- Add Automatic Differentiated Jacobians to Velocity-Implicit Euler Integrator (#12967)
- Trajectories
- Add symbolic::IsAffine (#12933)
- Add Polynomial::SetIndeterminates (#12902)
- Add Polynomial::CoefficientsAlmostEqual (#12853)
- Add PiecewisePolynomial::ScaleTime and PiecewisePolynomial::ReverseTime (#12966)
- Add PiecewisePolynomial::Reshape (#13062)
- Add derivative-at-a-point methods to Polynomial, PiecewisePolynomial (#12951)
- Support default scalars in Polynomial, PiecewiseTrajectory, PiecewisePolynomial (#12973, #12986, #12991, #13076)
- Add Trajectory::vector_values (#12855)
- Construct HermitianDenseOutput from PiecewisePolynomial (#12952, #12957, #13006)
- Add BsplineBasis and BsplineTrajectory (#11990)
- PiecewisePolynomial multiplication operator is no longer coefficient-wise (#4854, #13072)
- PiecewisePolynomial constant trajectory is now ∀t ∈ [-∞, ∞] not just [0, ∞] (#13096)
- Controllers
- Add utility to “balance” two quadratic forms and uses it in RegionOfAttraction (#12875, #12882)
- Support region of attraction when Vdot is indefinite at the origin (#12864)
- Add the “star” region of attraction test (#12881)
- Add finite horizon linear quadratic regulator (first version – continuous-time only, Q and R are time-invariant) (#13078)
Fixes
- Fix SymbolicVectorSystem autodiff when some derivatives are empty (#13077)
Mathematical Program
New features
- Add MathematicalProgram::AddConstraint(Eigen::Matrix
) ([#12858][_#12858]) - Add MathematicalProgram::MakePolynomial (#12847)
- Add MathematicalProgram::Reparse for polynomials taken as arguments (#12902)
- Add dual solution to OsqpSolverDetails (#12916)
- Add DrakeSolverOption (#12884)
- Add AddLogarithmicSos1Constraint overload with num_lambda (#13043)
Fixes
- Add MakeSolver to mathematical program tutorial (#12885)
- Add default std::nullopt arguments to SolverBase::Solve (#12866)
- Check x_init size for all solvers (#12995)
- Check constraint bounds size (#13004)
- Mention naive branch-and-bound solver in documentation (#13090)
Multibody Dynamics
New features
- Add PointToPointDistanceConstraint (#12896)
- InverseKinematics allows ignoring joint limits in the constructor (#12872)
- Add missing energy and power overrides to MultibodyPlant (#12895, #12955)
- Add CoM methods to MultibodyPlant (#12839)
- Parse joint effort limits from URDF (#12863)
- Parse revolute joint
and from SDF ([#12992][_#12992]) - Add BallRpyJoint (#13039)
- Enable mutating a Joint’s position limits (#13039)
- Allow a geometry to target a renderer (#13053)
- Preliminary steps to introduce new RenderEngine implementation based on direct OpenGl calls (#12850, #12963, #12964)
- New ForceElement implementations
- New hydroelastic contact model in progress (#12975, #12901, #12954, #12860,
#12998, #12976, #12909, #12820, #12935, #12806, #12932)
- Still only experimental
- Improve performance
- Improve architecture
Fixes
- Fix ABI::IsPhysicallyValid() to avoid false negatives (#12879)
- Fix HydroelasticContactInfoAndBodySpatialForces runtime hash warning (#12953)
- Modify cube texture coordinate generation so textures stretch across faces (#12972)
- Remove implicit converting copy constructors from MultibodyPlant’s and SceneGraph internals (#12891)
Miscellaneous features and fixes
- Add hand/arm only jaco 7dof URDFs, along with sphere collision versions (#13007)
- Add external torque fields for the jaco status message (#13017)
- Add a drake-ified version of the Franka Panda arm (#13012)
- Add some useful functions to manipulation/util (#13015)
- Add pyplot to geometry_inspector (#12918)
- Add yaml support for merge keys (#12924)
- Replace custom DrakeMockLcm implementation with memq (#13028, #13051)
pydrake bindings
- pydrake.examples.pendulum.PendulumInput.with_tau (#12940)
- pydrake.examples.pendulum.PendulumParams.with_damping (#12940)
- pydrake.examples.pendulum.PendulumParams.with_gravity (#12940)
- pydrake.examples.pendulum.PendulumParams.with_length (#12940)
- pydrake.examples.pendulum.PendulumParams.with_mass (#12940)
- pydrake.examples.pendulum.PendulumPlant.get_mutable_parameters (#12940)
- pydrake.examples.pendulum.PendulumPlant.get_mutable_state (#12940)
- pydrake.examples.pendulum.PendulumPlant.get_parameters (#12940)
- pydrake.examples.pendulum.PendulumPlant.get_state (#12940)
- pydrake.examples.pendulum.PendulumState.with_theta (#12940)
- pydrake.examples.pendulum.PendulumState.with_thetadot (#12940)
- pydrake.examples.rimless_wheel.RimlessWheel.calc_alpha (#13048)
- pydrake.multibody.plant.MultibodyPlant.AddJointActuator (#13092)
- pydrake.multibody.plant.MultibodyPlant.HasJointActuatorNamed (#13100)
- pydrake.multibody.plant.MultibodyPlant.get_generalized_acceleration_output_port (#12883)
- pydrake.multibody.plant.MultibodyPlant.get_generalized_acceleration_output_port (#12883)
- pydrake.multibody.plant.MultibodyPlant.get_reaction_forces_output_port (#12883)
- pydrake.multibody.plant.MultibodyPlant.num_force_elements (#13094)
- pydrake.multibody.plant.MultibodyPlant.set_penetration_tolerance (#13094)
- pydrake.multibody.tree.Body.is_floating (#13094)
- pydrake.solvers.branch_and_bound.MixedIntegerBranchAndBound (#13002)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.generic_constraints (#13005)
- pydrake.solvers.mathematicalprogram.MathematicalProgram.generic_costs (#13005)
- pydrake.solvers.mixed_integer_optimization_util.AddLogarithmicSos2Constraint (#13029)
- pydrake.solvers.mixed_integer_optimization_util.AddSos2Constraint (#13029)
- pydrake.symbolic.Expression.is_polynomial (#12854)
- pydrake.systems.analysis.IntegratorBase for more scalar types (#12922)
- pydrake.systems.analysis.IntegratorBase.StartDenseIntegration (#13044)
- pydrake.systems.analysis.IntegratorBase.StopDenseIntegration (#13044)
- pydrake.systems.analysis.IntegratorBase.get_dense_output (#13044)
- pydrake.systems.analysis.RungeKutta2Integrator for more scalar types (#12922)
- pydrake.systems.analysis.RungeKutta3Integrator for more scalar types (#12922)
- pydrake.systems.analysis.Simulator for more scalar types (#12922)
- pydrake.systems.analysis.Simulator.get_actual_realtime_rate (#12920)
- pydrake.systems.analysis.Simulator.get_target_realtime_rate (#12920)
- pydrake.systems.framework.ContinuousState.CopyToVector (#12865)
- pydrake.systems.lcm.LcmInterfaceSystem (#13067, #13075)
New features
- Add Python 3.8 support for macOS (#13035)
- Add SystemSliders Tkinter-based controller for vector input ports (#12925)
- Add ConnectPlanarSceneGraphVisualizer sugar (#12961)
Fixes
- API docs now show constructors first (#12787, #12910, #12921)
- Find fallback obj files in PlanarSceneGraphVisualizer (#12917)
- Fix meshcat name parsing (#13018)
- Improve args and doc for pyplot_visualizer (#12915)
- Plot sub-level sets in pydrake.visualization.plotting (#12854)
- Extend pydrake.systems.Simulator.reset_integrator’s deprecation window (#13013)
Build system and dependencies
- Use Python 3.8 on macOS (#13031)
- Upgrade recommended Bazel version to 3.0 (#13032)
- Add new dependency on libx11-dev on Ubuntu; no change on macOS (#12862)
- Add new dependency on ros_xacro (#13022)
- Upgrade bazel_skylib to latest release 0.9.0 (#12978)
- Upgrade buildifier to latest release 2.2.1 (#12977)
- Upgrade dreal to latest release 4.20.03.4 (#12905)
- Upgrade ghc_filesystem to latest release 1.3.2 (#12979)
- Upgrade meshcat to latest commit (#12993)
- Upgrade meshcat_python to latest commit (#12993)
- Upgrade pybind11 to latest commit (#13027, #13044)
- Upgrade rules_pkg to latest release 0.2.5 (#12978)
- Upgrade rules_python to latest commit (#12978)
- Annotate repository rules with configure=True (#12988)
- Fix macOS cask rename for DejaVu fonts (#13070, #13098)
- Fix drake_bazel_installed use in docker (#13016)
- Fix pkg-config problems on macOS (#13019)
Newly-deprecated APIs
::Polynomial<T>
(#12946)- Use drake::Polynomial.
- ::Polynomiald (#12946)
- Use drake::Polynomiald.
::TrigPoly<T>
(#12946)- Use drake::TrigPoly.
- ::TrigPolyd (#12946)
- Use drake::TrigPolyd.
- :: VectorXPoly (#12946)
- Use drake::VectorXPoly.
- ::VectorXTrigPoly (#12946)
- Use drake::VectorXTrigPoly.
- drake::systems::AntiderivativeFunction::SpecifiedValues (#12931)
- Use drake::systems::AntiderivativeFunction::IntegrableFunctionContext.
- drake::symbolic::Expression::ToPolynomial (#12950)
- Use drake::Polynomial::FromExpression.
- drake::systems::InitialValueProblem::SpecifiedValues (#12931)
- Use drake::systems::InitialValueProblem::OdeContext.
- drake::systems::InitialValueProblem::ODEFunction (#12931)
- Use drake::systems::InitialValueProblem::OdeFunction.
- drake::systems::ScalarInitialValueProblem::SpecifiedValues (#12931)
- Use drake::systems::InitialValueProblem::ScalarOdeContext.
- drake::systems::ScalarInitialValueProblem::ScalarODEFunction (#12931)
- Use drake::systems::ScalarInitialValueProblem::ScalarOdeFunction.
- drake::trajectories::PiecewisePolynomial::Cubic (#12939)
- Use drake::trajectories::PiecewisePolynomial::CubicWithContinuousSecondDerivatives or drake::trajectories::PiecewisePolynomial::CubicHermite.
- drake::trajectories::PiecewisePolynomial::Pchip (#12939)
- Use drake::trajectories::PiecewisePolynomial::CubicShapePreserving.
drake::trajectories::PiecewisePolynomial<T>::PolynomialType
(#12991)- Use drake::trajectories::Polynomial
.
- Use drake::trajectories::Polynomial
- drake::trajectories::PiecewiseQuaternionSlerp::get_quaternion_knots (#12939)
- Use drake::trajectories::PiecewiseQuaternionSlerp::get_quaternion_samples.
Removal of deprecated items
- drake::common::NewPythonVariable (#12442, #12974)
- pydrake.systems.pyplot_visualizer.PyPlotVisualizer.start_recording(show) (#12974)
Notes
This release provides
pre-compiled binaries
named drake-20200421-{bionic|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.