---
title: Drake v0.14.0
date: 2020-01-16
released: 2020-01-16
---

# Announcements

* Drake's [tutorials][_tutorials] are directly runnable using Binder ([#12472][_#12472])

# Breaking Changes

These are breaking changes that did not undergo a deprecation period.

* SDFormat 1.7 backwards-incompatible changes ([#12505][_#12505])
  * Models must have at least one link
  * The model frame is now attached to a link
  * Model frames can no longer reference "world"
* Drake no longer accidentally supports regexes in the channel name passed to
  DrakeLcm::Subscribe ([#12534][_#12534])
* Remove unused constraint equation API form Systems framework ([#12553][_#12553])
  * Removed the following public API:
    * drake::systems::System::CalcConstraintErrorNorm
    * drake::systems::System::CalcVelocityChangeFromConstraintImpulses
    * drake::systems::System::EvalConstraintEquationsDot
    * drake::systems::System::num_constraint_equations
  * Removed the following protected API:
    * drake::systems::System::DoCalcConstraintErrorNorm
    * drake::systems::System::DoCalcVelocityChangeFromConstraintImpulses
    * drake::systems::System::DoEvalConstraintEquations
    * drake::systems::System::DoEvalConstraintEquationsDot
    * drake::systems::System::do_get_num_constraint_equations

## Dynamical Systems

New features

* Add ability to implicit integrators to do full Newton ([#12524][_#12524])

Fixes

* Update Simulator's interface for changing integrators ([#12520][_#12520])
* Eliminate spurious algebraic loop from SymbolicVectorSystem ([#12500][_#12500])
* Systems reject Contexts that they did not create ([#12551][_#12551])

Documentation

* Add high level event documentation ([#12501][_#12501])

## Mathematical Program

Fixes

* Check output size in EvaluatorBase ([#10987][_#10987])

## Multibody Dynamics

New features

* Use Articulated Body Algorithm (ABA) in
  MultibodyPlant::DoCalcTimeDerivatives() ([#12470][_#12470])
* Add drake contact material properties to SDFormat/URDF parsing ([#12491][_#12491])
* Parse the collision filter group for URDFs ([#12495][_#12495])
* Register a geometry frame for all MultibodyPlant bodies ([#12489][_#12489])
* Add ability to construct MultibodyForces before constructing a MultibodyPlant
  ([#12556][_#12556])
* Support ellipsoid rendering ([#12547][_#12547])
* Add graphviz visualization of multibodyplant topology ([#12485][_#12485])
* Support parsing SDFormat 1.7 ([#12505][_#12505], [#12533][_#12533]), incorporating the `pose
  frame semantics <https://bit.ly/2ZSl1kH>`_ proposal
* Support textures for primitive objects, not just meshes ([#12423][_#12423]); this
  only applies to rendering (RenderEngine*)
* Add C++17 structured binding support to AddMultibodyPlantSceneGraphResult
  ([#12559][_#12559])

Fixes

* Fix warning on unsupported joint limits for continuous models ([#12531][_#12531],
  [#12499][_#12499])
* Fix scalar conversion bug in RevoluteSpring ([#12522][_#12522])

New hydroelastic contact model in progress ([#12538][_#12538], [#12541][_#12541], [#12418][_#12418],
[#12471][_#12471], [#12493][_#12493], [#12529][_#12529]):

* Still only experimental
* Improve performance
* Improve visualization
* Improve specification

## Miscellaneous features and fixes

Common:

* Add scope_exit class ([#12537][_#12537])
* Copy yaml_write_archive from Anzu and adapt to Drake ([#12568][_#12568])

LCM fixes:

* Escape regex characters in DrakeLcm channel names ([#12534][_#12534])
* Clean up DrakeLcm comment/documentation ([#12521][_#12521])

Examples:

* Add planar IIWA URDF and use it in ManipulationStation ([#12502][_#12502])
* Add planar IIWA joint teleop example ([#12503][_#12503])
* Add LCM messaging to the planar-gripper simulation ([#12469][_#12469])
* Add AcrobotGeometry and purge RigidBody from examples/Acrobot ([#12567][_#12567])

## pydrake bindings

New features

Fixes

* Use np.asarray in gradient and jacobian ([#12511][_#12511])
* Remove "Please see ..." addendum from deprecation messages ([#12578][_#12578])

Newly bound

* pydrake.examples.acrobot.AcrobotGeometry ([#12574][_#12574])
* pydrake.examples.pendulum.PendulumGeometry ([#12569][_#12569])
* pydrake.examples.manipulation_station.ManipulationStation.SetupPlanarIiwaStation ([#12503][_#12503])
* pydrake.examples.manipulation_station.ManipulationStation.num_iiwa_joints ([#12503][_#12503])
* pydrake.examples.manipulation_station.ManipulationStation.RegisterRgbdSensor ([#12513][_#12513])

## Build system and dependencies

* Add Dockerfile for Binder ([#12472][_#12472])
* Fix Binder Dockerfile for Docker versions before 19.03 ([#12510][_#12510])
* Error out on now-unsupported --config=snopt_fortran ([#12549][_#12549], [#12545][_#12545])
* Update recommended Bazel version to 2.0 ([#12526][_#12526])
* Ensure drake lcmtypes are exposed in installed bazel external repository
  ([#12573][_#12573])
* Fix mkdoc comment handling edge cases ([#12519][_#12519])
* Upgrade bullet to latest release 2.89 ([#12516][_#12516])
* Upgrade libsdformat to latest release 9.0 ([#12505][_#12505])
* Upgrade meshcat to latest commit ([#12516][_#12516])
* Upgrade pybind fork to use merge with latest upstream ([#12572][_#12572])
* Upgrade semantic_version to latest release 2.8.4 ([#12516][_#12516])
* Upgrade uritemplate_py to latest release 3.0.1 ([#12516][_#12516])
* Remove uninstall of ipopt and mumps on macOS ([#12517][_#12517])

# Newly-deprecated APIs

* drake::multibody::MultibodyPlant default constructor with no arguments
  ([#12525][_#12525])
  * Use constructor with time_step argument explicit specified instead.
* drake::multibody::AddMultibodyPlantSceneGraph overload without time_step or
  plant specified ([#12558][_#12558])
  * Use overload with time_step or plant explicitly specified.
* pydrake.multibody.rigid_body_tree.RigidBodyTree.number_of_positions
  ([#12514][_#12514])
  * Use pydrake.multibody.rigid_body_tree.RigidBodyTree.get_num_positions
    instead.
* pydrake.multibody.rigid_body_tree.RigidBodyTree.number_of_velocities
  ([#12514][_#12514])
  * Use pydrake.multibody.rigid_body_tree.RigidBodyTree.get_num_velocities
    instead.
* DRAKE_NODISCARD in common/drake_nodiscard.h ([#12539][_#12539])
  * Use ``[[nodiscard]]`` directly.
* drake/examples/kuka_iiwa/iiwa_wsg_simulation will be removed from Drake
  ([#12581][_#12581])
  * Copy the code into your own project if still needed.
* drake::examples::kuka_iiwa_arm::OracularStateEstimation ([#12581][_#12581])
  *  Copy the code into your own project if still needed.
* drake::examples::kuka_iiwa_arm::IiwaAndWsgPlantWithStateEstimator ([#12581][_#12581])
  *  Copy the code into your own project if still needed.

# Removal of deprecated APIs

* drake::systems::Simulator::StepTo ([#12515][_#12515])
  * Use drake::systems::Simulator::AdvanceTo instead.
* ``drake::systems::Simulator::reset_integrator(std::unique_ptr<U>)``
  ([#12520][_#12520])
  * Use void or max-step-size version of reset_integrator() instead.
* ``drake::systems::Simulator::reset_integrator(Args&&...)``
  ([#12520][_#12520])
  * Use void or max-step-size version of reset_integrator() instead.
* Bazel label @drake//solvers:mathematical_program_lite ([#12515][_#12515])
  * Use @drake//solvers:mathematical_program instead.
* Attic removals ([#12514][_#12514])
  * DrakeJoint::getNumPositions
    * Use DrakeJoint::get_num_positions instead.
  * DrakeJoint::getNumVelocities
    * Use DrakeJoint::get_num_velocities instead.
  * DrakeJoint::getTransformToParentBody
    * Use DrakeJoint::get_transform_to_parent_body instead.
  * DrakeJoint::getName
    * Use DrakeJoint::get_name instead.
  * DrakeJoint::getPositionName
    * Use DrakeJoint::get_position_name instead.
  * DrakeJoint::getVelocityName
    * Use DrakeJoint::get_velocity_name instead.
  * DrakeJoint::isFloating
    * Use DrakeJoint::is_floating instead.
  * Several overloads of AddModelInstanceFromUrdfString
    * Use more specific overload names.
  * RigidBody::hasParent
    * Use RigidBody::has_parent_body instead.
  * RigidBodyTree::get_number_of_model_instances
    * Use RigidBodyTree::get_num_model_instances instead.
  * RigidBodyTree::getPositionName
    * Use RigidBodyTree::get_position_name instead.
  * RigidBodyTree::getVelocityName
    * Use RigidBodyTree::get_velocity_name instead.
  * RigidBodyTree::findAncestorBodies
    * Use RigidBodyTree::FindAncestorBodies instead.
  * RigidBodyTree::findLinkId
    * Use RigidBodyTree::FindBodyIndex instead.
  * RigidBodyTree::findJointId
    * Use RigidBodyTree::FindIndexOfChildBodyOfJoint instead.
  * RigidBodyTree::get_number_of_bodies
    * Use RigidBodyTree::get_num_bodies instead.
  * RigidBodyTree::number_of_positions
    * Use RigidBodyTree::get_num_positions instead.
  * RigidBodyTree::number_of_velocities
    * Use RigidBodyTree::get_num_velocities instead.
  * RigidBodyTree::bodies
    * Use RigidBodyTree::get_bodies and RigidBodyTree::add_rigid_body instead.
  * RigidBodyTree::frames
    *  Use RigidBodyTree::get_frames and RigidBodyTree::addFrame instead.
  * ``InverseDynamics(const RigidBodyTree<T>*, bool)``
    * Use constructor with InverseDynamicsType instead.
  * InverseDynamics::get_output_port_torque
    * Use InverseDynamics::get_output_port_force instead.
  * InverseDynamicsController::get_robot_for_control
    * Use InverseDynamicsController::get_rigid_body_tree_for_control instead.

This release provides
[pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v0.14.0)
named ``drake-20200116-{bionic|mac}.tar.gz``. See
[Stable Releases](/from_binary.html#stable-releases) for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of
[SNOPT](https://ccom.ucsd.edu/~optimizers/solvers/snopt/) as part of the
[Mathematical Program toolbox](https://drake.mit.edu/doxygen_cxx/group__solvers.html).
Thanks to Philip E. Gill and Elizabeth Wong for their kind support.

[_tutorials]: https://github.com/RobotLocomotion/drake/tree/master/tutorials

[_#10987]: https://github.com/RobotLocomotion/drake/pull/10987
[_#12418]: https://github.com/RobotLocomotion/drake/pull/12418
[_#12423]: https://github.com/RobotLocomotion/drake/pull/12423
[_#12469]: https://github.com/RobotLocomotion/drake/pull/12469
[_#12470]: https://github.com/RobotLocomotion/drake/pull/12470
[_#12471]: https://github.com/RobotLocomotion/drake/pull/12471
[_#12472]: https://github.com/RobotLocomotion/drake/pull/12472
[_#12485]: https://github.com/RobotLocomotion/drake/pull/12485
[_#12489]: https://github.com/RobotLocomotion/drake/pull/12489
[_#12491]: https://github.com/RobotLocomotion/drake/pull/12491
[_#12493]: https://github.com/RobotLocomotion/drake/pull/12493
[_#12495]: https://github.com/RobotLocomotion/drake/pull/12495
[_#12499]: https://github.com/RobotLocomotion/drake/pull/12499
[_#12500]: https://github.com/RobotLocomotion/drake/pull/12500
[_#12501]: https://github.com/RobotLocomotion/drake/pull/12501
[_#12502]: https://github.com/RobotLocomotion/drake/pull/12502
[_#12503]: https://github.com/RobotLocomotion/drake/pull/12503
[_#12505]: https://github.com/RobotLocomotion/drake/pull/12505
[_#12510]: https://github.com/RobotLocomotion/drake/pull/12510
[_#12511]: https://github.com/RobotLocomotion/drake/pull/12511
[_#12513]: https://github.com/RobotLocomotion/drake/pull/12513
[_#12514]: https://github.com/RobotLocomotion/drake/pull/12514
[_#12515]: https://github.com/RobotLocomotion/drake/pull/12515
[_#12516]: https://github.com/RobotLocomotion/drake/pull/12516
[_#12517]: https://github.com/RobotLocomotion/drake/pull/12517
[_#12519]: https://github.com/RobotLocomotion/drake/pull/12519
[_#12520]: https://github.com/RobotLocomotion/drake/pull/12520
[_#12521]: https://github.com/RobotLocomotion/drake/pull/12521
[_#12522]: https://github.com/RobotLocomotion/drake/pull/12522
[_#12524]: https://github.com/RobotLocomotion/drake/pull/12524
[_#12525]: https://github.com/RobotLocomotion/drake/pull/12525
[_#12526]: https://github.com/RobotLocomotion/drake/pull/12526
[_#12529]: https://github.com/RobotLocomotion/drake/pull/12529
[_#12531]: https://github.com/RobotLocomotion/drake/pull/12531
[_#12533]: https://github.com/RobotLocomotion/drake/pull/12533
[_#12534]: https://github.com/RobotLocomotion/drake/pull/12534
[_#12537]: https://github.com/RobotLocomotion/drake/pull/12537
[_#12538]: https://github.com/RobotLocomotion/drake/pull/12538
[_#12539]: https://github.com/RobotLocomotion/drake/pull/12539
[_#12541]: https://github.com/RobotLocomotion/drake/pull/12541
[_#12545]: https://github.com/RobotLocomotion/drake/pull/12545
[_#12547]: https://github.com/RobotLocomotion/drake/pull/12547
[_#12549]: https://github.com/RobotLocomotion/drake/pull/12549
[_#12551]: https://github.com/RobotLocomotion/drake/pull/12551
[_#12553]: https://github.com/RobotLocomotion/drake/pull/12553
[_#12556]: https://github.com/RobotLocomotion/drake/pull/12556
[_#12558]: https://github.com/RobotLocomotion/drake/pull/12558
[_#12559]: https://github.com/RobotLocomotion/drake/pull/12559
[_#12567]: https://github.com/RobotLocomotion/drake/pull/12567
[_#12568]: https://github.com/RobotLocomotion/drake/pull/12568
[_#12569]: https://github.com/RobotLocomotion/drake/pull/12569
[_#12572]: https://github.com/RobotLocomotion/drake/pull/12572
[_#12573]: https://github.com/RobotLocomotion/drake/pull/12573
[_#12574]: https://github.com/RobotLocomotion/drake/pull/12574
[_#12578]: https://github.com/RobotLocomotion/drake/pull/12578
[_#12581]: https://github.com/RobotLocomotion/drake/pull/12581

{% comment %}
Changelog oldest_commit f09a56e68b31b2bd35db66362b0ac3bde638ec67 (inclusive).
Changelog newest_commit 5259cc0ae11add6d00d1d4baf1f1c2946ca624b0 (inclusive).
{% endcomment %}
