Drake
ContinuousState< T > Class Template Reference

ContinuousState is a view of, and optionally a container for, all the continuous state variables xc of a Drake System. More...

#include <drake/systems/framework/continuous_state.h>

Inheritance diagram for ContinuousState< T >:
[legend]

Public Member Functions

 ContinuousState (std::unique_ptr< VectorBase< T >> state)
 Constructs a ContinuousState for a system that does not have second-order structure. More...
 
 ContinuousState (std::unique_ptr< VectorBase< T >> state, int num_q, int num_v, int num_z)
 Constructs a ContinuousState that exposes second-order structure. More...
 
 ContinuousState ()
 Constructs a zero-length ContinuousState. More...
 
virtual ~ContinuousState ()
 
std::unique_ptr< ContinuousState< T > > Clone () const
 Creates a deep copy of this object with the same substructure but with all data owned by the copy. More...
 
int size () const
 Returns the size of the entire continuous state vector, which is necessarily num_q + num_v + num_z. More...
 
int num_q () const
 Returns the number of generalized positions q in this state vector. More...
 
int num_v () const
 Returns the number of generalized velocities v in this state vector. More...
 
int num_z () const
 Returns the number of miscellaneous continuous state variables z in this state vector. More...
 
T & operator[] (std::size_t idx)
 
const T & operator[] (std::size_t idx) const
 
const VectorBase< T > & get_vector () const
 Returns a reference to the entire continuous state vector. More...
 
VectorBase< T > & get_mutable_vector ()
 Returns a mutable reference to the entire continuous state vector. More...
 
const VectorBase< T > & get_generalized_position () const
 Returns a const reference to the subset of the state vector that is generalized position q. More...
 
VectorBase< T > & get_mutable_generalized_position ()
 Returns a mutable reference to the subset of the state vector that is generalized position q. More...
 
const VectorBase< T > & get_generalized_velocity () const
 Returns a const reference to the subset of the continuous state vector that is generalized velocity v. More...
 
VectorBase< T > & get_mutable_generalized_velocity ()
 Returns a mutable reference to the subset of the continuous state vector that is generalized velocity v. More...
 
const VectorBase< T > & get_misc_continuous_state () const
 Returns a const reference to the subset of the continuous state vector that is other continuous state z. More...
 
VectorBase< T > & get_mutable_misc_continuous_state ()
 Returns a mutable reference to the subset of the continuous state vector that is other continuous state z. More...
 
void CopyFrom (const ContinuousState< T > &other)
 Copies the values from another ContinuousState of the same scalar type into this State. More...
 
void SetFrom (const ContinuousState< double > &other)
 Initializes this ContinuousState (regardless of scalar type) from a State<double>. More...
 
void SetFromVector (const Eigen::Ref< const VectorX< T >> &value)
 Sets the entire continuous state vector from an Eigen expression. More...
 
VectorX< T > CopyToVector () const
 Returns a copy of the entire continuous state vector into an Eigen vector. More...
 
Does not allow copy, move, or assignment
 ContinuousState (const ContinuousState &)=delete
 
ContinuousStateoperator= (const ContinuousState &)=delete
 
 ContinuousState (ContinuousState &&)=delete
 
ContinuousStateoperator= (ContinuousState &&)=delete
 

Protected Member Functions

 ContinuousState (std::unique_ptr< VectorBase< T >> state, std::unique_ptr< VectorBase< T >> q, std::unique_ptr< VectorBase< T >> v, std::unique_ptr< VectorBase< T >> z)
 Constructs a continuous state that exposes second-order structure, with no particular constraints on the layout. More...
 
virtual std::unique_ptr< ContinuousStateDoClone () const
 DiagramContinuousState must override this to maintain the necessary internal substructure, and to perform a deep copy so that the result owns all its own data. More...
 

Detailed Description

template<typename T>
class drake::systems::ContinuousState< T >

ContinuousState is a view of, and optionally a container for, all the continuous state variables xc of a Drake System.

Continuous state variables are those whose values are defined by differential equations, so we expect there to be a well-defined time derivative xcdotd/dt xc.

The contents of xc are conceptually partitioned into three groups:

  • q is generalized position
  • v is generalized velocity
  • z is other continuous state

For a Drake LeafSystem these partitions are stored contiguously in memory in this sequence: xc=[q v z]. But because a Drake System may be a Diagram composed from subsystems, each with its own continuous state variables ("substates"), the composite continuous state will not generally be stored in contiguous memory. In that case the most we can say is that xc={q,v,z}, that is, it consists of all the q's, v's, and z's, in some order.

Nevertheless, this ContinuousState class provides a vector view of the data that groups together all the q partitions, v partitions, and z partitions. For example, if there are three subsystems (possibly Diagrams) whose continuous state variables are respectively xc₁={q₁,v₁,z₁}, xc₂={q₂,v₂,z₂}, and xc₃={q₃,v₃,z₃} the composite xc includes all the partitions in an undefined order. However, composite q, v, and z appear ordered as q=[q₁ q₂ q₃], v=[v₁ v₂ v₃], z=[z₁ z₂ z₃]. Note that the element ordering of the composite xc is not a concatenation of the composite subgroups. Do not index elements of the full state xc unless you know it is the continuous state of a LeafSystem (a LeafSystem looking at its own Context can depend on that).

Any of the groups may be empty. However, groups q and v must be either both present or both empty, because the time derivative qdot of the second-order state variables q must be computable using a linear mapping qdot=N(q)*v.

The time derivative xcdot has the identical substructure to xc, with the partitions interpreted as qdot, vdot, and zdot. We use identical ContinuousState objects for both.

Memory ownership

When a ContinuousState represents the state of a LeafSystem, it always owns the memory that is used for the state variables and is responsible for destruction. For a Diagram, ContinuousState can instead be a view of the underlying LeafSystem substates, so that modifying the Diagram's continuous state affects the LeafSystems appropriately. In that case, the memory is owned by the underlying LeafSystems. However, when a ContinuousState object of any structure is cloned, the resulting object always owns all its underlying memory, which is initialized with a copy of the original state variable values but is otherwise independent. The cloned object retains the structure and ordering of the elements and does not guarantee contiguous storage.

See also
DiagramContinuousState for more information.
Template Parameters
TA mathematical type compatible with Eigen's Scalar.

Constructor & Destructor Documentation

ContinuousState ( const ContinuousState< T > &  )
delete
ContinuousState ( ContinuousState< T > &&  )
delete
ContinuousState ( std::unique_ptr< VectorBase< T >>  state)
inlineexplicit

Constructs a ContinuousState for a system that does not have second-order structure.

The q and v partitions are empty; all of the state xc is miscellaneous continuous state z.

ContinuousState ( std::unique_ptr< VectorBase< T >>  state,
int  num_q,
int  num_v,
int  num_z 
)
inline

Constructs a ContinuousState that exposes second-order structure.

Parameters
stateThe source xc of continuous state information.
num_qThe number of position variables q.
num_vThe number of velocity variables v.
num_zThe number of other continuous variables z.

We require that num_q ≥ num_v and that the sum of the partition sizes adds up to the size of state.

ContinuousState ( )
inline

Constructs a zero-length ContinuousState.

virtual ~ContinuousState ( )
inlinevirtual
ContinuousState ( std::unique_ptr< VectorBase< T >>  state,
std::unique_ptr< VectorBase< T >>  q,
std::unique_ptr< VectorBase< T >>  v,
std::unique_ptr< VectorBase< T >>  z 
)
inlineprotected

Constructs a continuous state that exposes second-order structure, with no particular constraints on the layout.

Precondition
The q, v, z are all views into the same storage as state.
Parameters
stateThe entire continuous state.
qThe subset of state that is generalized position.
vThe subset of state that is generalized velocity.
zThe subset of state that is neither position nor velocity.

Member Function Documentation

std::unique_ptr<ContinuousState<T> > Clone ( ) const
inline

Creates a deep copy of this object with the same substructure but with all data owned by the copy.

That is, if the original was a Diagram continuous state that merely referenced substates, the clone will not include any references to the original substates and is thus decoupled from the Context containing the original. The concrete type of the BasicVector underlying each leaf ContinuousState is preserved. See the class comments above for more information.

void CopyFrom ( const ContinuousState< T > &  other)
inline

Copies the values from another ContinuousState of the same scalar type into this State.

VectorX<T> CopyToVector ( ) const
inline

Returns a copy of the entire continuous state vector into an Eigen vector.

Here is the caller graph for this function:

virtual std::unique_ptr<ContinuousState> DoClone ( ) const
inlineprotectedvirtual

DiagramContinuousState must override this to maintain the necessary internal substructure, and to perform a deep copy so that the result owns all its own data.

The default implementation here requires that the full state is a BasicVector (that is, this is a leaf continuous state). The BasicVector is cloned to preserve its concrete type and contents, then the q, v, z Subvectors are created referencing it.

Here is the caller graph for this function:

const VectorBase<T>& get_generalized_position ( ) const
inline

Returns a const reference to the subset of the state vector that is generalized position q.

May be zero length.

Here is the caller graph for this function:

const VectorBase<T>& get_generalized_velocity ( ) const
inline

Returns a const reference to the subset of the continuous state vector that is generalized velocity v.

May be zero length.

Here is the caller graph for this function:

const VectorBase<T>& get_misc_continuous_state ( ) const
inline

Returns a const reference to the subset of the continuous state vector that is other continuous state z.

May be zero length.

Here is the caller graph for this function:

VectorBase<T>& get_mutable_generalized_position ( )
inline

Returns a mutable reference to the subset of the state vector that is generalized position q.

May be zero length.

Here is the caller graph for this function:

VectorBase<T>& get_mutable_generalized_velocity ( )
inline

Returns a mutable reference to the subset of the continuous state vector that is generalized velocity v.

May be zero length.

Here is the caller graph for this function:

VectorBase<T>& get_mutable_misc_continuous_state ( )
inline

Returns a mutable reference to the subset of the continuous state vector that is other continuous state z.

May be zero length.

Here is the caller graph for this function:

VectorBase<T>& get_mutable_vector ( )
inline

Returns a mutable reference to the entire continuous state vector.

Here is the caller graph for this function:

const VectorBase<T>& get_vector ( ) const
inline

Returns a reference to the entire continuous state vector.

Here is the caller graph for this function:

int num_q ( ) const
inline

Returns the number of generalized positions q in this state vector.

Here is the caller graph for this function:

int num_v ( ) const
inline

Returns the number of generalized velocities v in this state vector.

Here is the caller graph for this function:

int num_z ( ) const
inline

Returns the number of miscellaneous continuous state variables z in this state vector.

Here is the caller graph for this function:

ContinuousState& operator= ( ContinuousState< T > &&  )
delete
ContinuousState& operator= ( const ContinuousState< T > &  )
delete
T& operator[] ( std::size_t  idx)
inline
const T& operator[] ( std::size_t  idx) const
inline
void SetFrom ( const ContinuousState< double > &  other)
inline

Initializes this ContinuousState (regardless of scalar type) from a State<double>.

All scalar types in Drake must support initialization from doubles.

void SetFromVector ( const Eigen::Ref< const VectorX< T >> &  value)
inline

Sets the entire continuous state vector from an Eigen expression.

Here is the caller graph for this function:

int size ( ) const
inline

Returns the size of the entire continuous state vector, which is necessarily num_q + num_v + num_z.

Here is the caller graph for this function:


The documentation for this class was generated from the following file: