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 welldefined time derivative xcdot
≜ d/dt xc
.
The contents of xc
are conceptually partitioned into three groups:
q
is generalized positionv
is generalized velocityz
is other continuous stateFor 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 secondorder 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.
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.
T  The scalar type, which must be one of the default scalars. 
#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 secondorder structure. More...  
ContinuousState (std::unique_ptr< VectorBase< T >> state, int num_q, int num_v, int num_z)  
Constructs a ContinuousState that exposes secondorder structure. More...  
ContinuousState ()  
Constructs a zerolength 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...  
template<typename U >  
void  SetFrom (const ContinuousState< U > &other) 
Copies the values from other into this , converting the scalar type as necessary. 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  
ContinuousState &  operator= (const ContinuousState &)=delete 
ContinuousState (ContinuousState &&)=delete  
ContinuousState &  operator= (ContinuousState &&)=delete 
System compatibility  
See System Compatibility.  
internal::SystemId  get_system_id () const 
(Internal) Gets the id of the subsystem that created this state. More...  
void  set_system_id (internal::SystemId id) 
(Internal) Records the id of the subsystem that created this state. More...  
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 secondorder structure, with no particular constraints on the layout. More...  
virtual std::unique_ptr< ContinuousState >  DoClone () 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...  

delete 

delete 

explicit 
Constructs a ContinuousState for a system that does not have secondorder 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  
) 
Constructs a ContinuousState that exposes secondorder structure.
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  (  ) 
Constructs a zerolength ContinuousState.

virtual 

protected 
Constructs a continuous state that exposes secondorder structure, with no particular constraints on the layout.
state
.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. 
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.
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.
VectorX<T> CopyToVector  (  )  const 
Returns a copy of the entire continuous state vector into an Eigen vector.

protectedvirtual 
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. The implementation should not set_system_id on the result, the caller will set an id on the state after this method returns.
const VectorBase<T>& get_generalized_position  (  )  const 
Returns a const reference to the subset of the state vector that is generalized position q
.
May be zero length.
const VectorBase<T>& get_generalized_velocity  (  )  const 
Returns a const reference to the subset of the continuous state vector that is generalized velocity v
.
May be zero length.
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
.
May be zero length.
VectorBase<T>& get_mutable_generalized_position  (  ) 
Returns a mutable reference to the subset of the state vector that is generalized position q
.
May be zero length.
VectorBase<T>& get_mutable_generalized_velocity  (  ) 
Returns a mutable reference to the subset of the continuous state vector that is generalized velocity v
.
May be zero length.
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
.
May be zero length.
VectorBase<T>& get_mutable_vector  (  ) 
Returns a mutable reference to the entire continuous state vector.
internal::SystemId get_system_id  (  )  const 
(Internal) Gets the id of the subsystem that created this state.
const VectorBase<T>& get_vector  (  )  const 
Returns a reference to the entire continuous state vector.
int num_q  (  )  const 
Returns the number of generalized positions q in this state vector.
int num_v  (  )  const 
Returns the number of generalized velocities v in this state vector.
int num_z  (  )  const 
Returns the number of miscellaneous continuous state variables z in this state vector.

delete 

delete 
T& operator[]  (  std::size_t  idx  ) 
const T& operator[]  (  std::size_t  idx  )  const 
void set_system_id  (  internal::SystemId  id  ) 
(Internal) Records the id of the subsystem that created this state.
void SetFrom  (  const ContinuousState< U > &  other  ) 
Copies the values from other
into this
, converting the scalar type as necessary.
void SetFromVector  (  const Eigen::Ref< const VectorX< T >> &  value  ) 
Sets the entire continuous state vector from an Eigen expression.
int size  (  )  const 
Returns the size of the entire continuous state vector, which is necessarily num_q + num_v + num_z
.