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>

## 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.

Template Parameters
 T A mathematical type compatible with Eigen's Scalar.

## ◆ ContinuousState() [1/6]

 ContinuousState ( const ContinuousState< T > & )
delete

## ◆ ContinuousState() [2/6]

 ContinuousState ( ContinuousState< T > && )
delete

## ◆ ContinuousState() [3/6]

 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() [4/6]

 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
 state The source xc of continuous state information. num_q The number of position variables q. num_v The number of velocity variables v. num_z The 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() [5/6]

 ContinuousState ( )
inline

Constructs a zero-length ContinuousState.

## ◆ ~ContinuousState()

 virtual ~ContinuousState ( )
inlinevirtual

## ◆ ContinuousState() [6/6]

 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
 state The entire continuous state. q The subset of state that is generalized position. v The subset of state that is generalized velocity. z The subset of state that is neither position nor velocity.

## ◆ Clone()

 std::unique_ptr > 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.

## ◆ CopyFrom()

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

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

## ◆ CopyToVector()

 VectorX CopyToVector ( ) const
inline

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

## ◆ DoClone()

 virtual std::unique_ptr 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.

## ◆ get_generalized_position()

 const VectorBase& 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.

## ◆ get_generalized_velocity()

 const VectorBase& 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.

## ◆ get_misc_continuous_state()

 const VectorBase& 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.

## ◆ get_mutable_generalized_position()

 VectorBase& 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.

## ◆ get_mutable_generalized_velocity()

 VectorBase& 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.

## ◆ get_mutable_misc_continuous_state()

 VectorBase& 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.

## ◆ get_mutable_vector()

 VectorBase& get_mutable_vector ( )
inline

Returns a mutable reference to the entire continuous state vector.

## ◆ get_vector()

 const VectorBase& get_vector ( ) const
inline

Returns a reference to the entire continuous state vector.

## ◆ num_q()

 int num_q ( ) const
inline

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

## ◆ num_v()

 int num_v ( ) const
inline

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

## ◆ num_z()

 int num_z ( ) const
inline

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

## ◆ operator=() [1/2]

 ContinuousState& operator= ( ContinuousState< T > && )
delete

## ◆ operator=() [2/2]

 ContinuousState& operator= ( const ContinuousState< T > & )
delete

## ◆ operator[]() [1/2]

 T& operator[] ( std::size_t idx )
inline

## ◆ operator[]() [2/2]

 const T& operator[] ( std::size_t idx ) const
inline

## ◆ SetFrom()

 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.

## ◆ SetFromVector()

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

Sets the entire continuous state vector from an Eigen expression.

## ◆ size()

 int size ( ) const
inline

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

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