Drake Concepts
Last updated
Last updated
Drake's core library has 3 big parts:
Drake provides tools to model the physics of a dynamic system, which can be used for analysis and simulation.
Drake's system modeling works like Matlab Simulink. Drake constructs complex systems from blocks called system
. system
has input/output ports that could be connected with other systems. A system
block can be a diagram
or a leafsystem
. leafsystem
is the minimum build block, and a diagram
is composed of multiple leafsystems
or diagrams
.
leafsystem
functions as basic components in robotics systems, such as signals, sensors, controllers, planners, etc.
Drake uses diagram
to represent compound systems
. diagram
internally contain several connected subsystems. diagram
itself is a system
and can be nested. The root diagram contains all the subsystems and subdiagrams.
The main function in Drake usually starts from a blank root diagram
. systems
are added to the rootdiagram
and connected through their input/output ports.
context
contains the data of system states and parameters cached in a separate place. Each diagram
and system
has its own context
. The context
and the diagram
are the only information a simulator
requires to simulate. Given the context
, all methods called on a system
should be completely deterministic and repeatable (Ref. Underactuated Robotics textbook).
Drake has a method diagram->CreateDefaultContext()
to create the context with default values for all the subsystems. Values in the context, such as the initial state and the initial time, can be independently set before the simulation begins.
A context can have continuous state, discrete state, and abstract variable. Based on the variable type, the simulator would update the context data by either numerically integrating the continuous derivative or updating the states using state-space dynamics.
Drake is a simulation software. The Drake simulator
takes in the system diagram
together with its context
to simulate by updating parameters such as integral continuous state derivatives, compute discrete state updates, allocates the various outputs of a system
, etc.
Drake incorporates famous and useful optimization tools, for example, Gurobi, SNOPT, IPOPT, SCS, MOSEK. These tools help to solve mathematical problems in robotics, such as motion planning and control.
To use Mathematical Programming, there is a very good starting point written in python. The same idea applies to C++.
Multibody means multiple rigid bodies connected in an articulated structure. The root diagram
that contains a unique leafsystem
namedMultibodyPlant
is considered as a robotic system. MultibodyPlant
internally uses rigid body tree algorithms to compute the robot's kinematics, dynamics, jacobian, etc.
MultibodyPlant
is a system
. So it has input/output ports that could be connected to other systems like controllers and visualizers.
Eigen is a C++ library with linear algebra operations and algorithms.
A convenient technique to compute Derivative. Computing Integral is trivial and computing Derivative is non-trivial. AutoDiff is a good solution that Eigen provides to solve the derivative.
LCM is a multi-process communication tool. LCM is everywhere in Drake. It serves as the bridge between system ports, so all the communications between systems are transported using LCM, which can be inspected by LCM spy tool.
A handy tool that parses XML files, enables Drake to parse URDF and SDF, thus creating MultibodyPlant
for simulation.
Drake uses VTK as a geometry rendering tool. The Drake visualizer communicates with the simulator through LCM.