Drake v0.17.0

Back to Release Notes

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
    • Add bushing force element with 3D rotational (roll-pitch-yaw) and translational stiffness and damping (#11946, #13001)
    • Add a door hinge force element (#12812, #12930, #12960)
  • 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.
  • 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 Nightly 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.