state.h
Go to the documentation of this file.
1 //=================================================================================================
2 // Copyright (c) 2013, Johannes Meyer, TU Darmstadt
3 // All rights reserved.
4 
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // * Neither the name of the Flight Systems and Automatic Control group,
13 // TU Darmstadt, nor the names of its contributors may be used to
14 // endorse or promote products derived from this software without
15 // specific prior written permission.
16 
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //=================================================================================================
28 
29 #ifndef HECTOR_POSE_ESTIMATION_STATE_H
30 #define HECTOR_POSE_ESTIMATION_STATE_H
31 
33 
34 #include <boost/function.hpp>
35 #include <boost/shared_ptr.hpp>
36 #include <boost/weak_ptr.hpp>
37 
38 #include <ros/time.h>
39 
40 namespace hector_pose_estimation {
41 
42 class State {
43 public:
47 
48  typedef VectorBlock<Vector> VectorSegment;
49  typedef Block<Covariance::Base> CovarianceBlock;
50  typedef VectorBlock<const Vector> ConstVectorSegment;
51  typedef Block<const Covariance::Base> ConstCovarianceBlock;
52 
54  typedef VectorBlock<Vector,4> OrientationType;
55  typedef VectorBlock<const Vector,4> ConstOrientationType;
57  typedef VectorBlock<Vector,3> RateType;
58  typedef VectorBlock<const Vector,3> ConstRateType;
60  typedef VectorBlock<Vector,3> PositionType;
61  typedef VectorBlock<const Vector,3> ConstPositionType;
63  typedef VectorBlock<Vector,3> VelocityType;
64  typedef VectorBlock<const Vector,3> ConstVelocityType;
66  typedef VectorBlock<Vector,3> AccelerationType;
67  typedef VectorBlock<const Vector,3> ConstAccelerationType;
68 
69  typedef std::vector<SubStatePtr> SubStates;
70 
72 
73 public:
74  virtual ~State();
75 
76  virtual IndexType getVectorDimension() const { return vector_.rows(); }
77  virtual IndexType getCovarianceDimension() const { return covariance_.rows(); }
78 
79  virtual void reset();
80  virtual void updated();
81  virtual void normalize();
82 
83  virtual bool valid() const;
84 
85  virtual BaseState& base() { return *base_; }
86  virtual const BaseState& base() const { return *base_; }
87 
88  virtual const Vector& getVector() const { return vector_; }
89  virtual const Covariance& getCovariance() const { return covariance_; }
90  template <int Size> VectorBlock<const Vector, Size> getSegment(IndexType start) const { return vector_.segment<Size>(start); }
91 
92  virtual Vector& x() { return vector_; }
93  virtual Covariance& P() { return covariance_; }
94 // virtual VectorSegment x0() { return vector_.segment<VectorDimension>(0); }
95 // virtual CovarianceBlock P0() { return covariance_.block<CovarianceDimension,CovarianceDimension>(0, 0); }
96 
97  virtual void update(const Vector &vector_update);
98  virtual void updateOrientation(const ColumnVector3 &rotation_vector);
99 
100  virtual SystemStatus getSystemStatus() const { return system_status_; }
102 
103  virtual bool inSystemStatus(SystemStatus test_status) const;
104  virtual bool setSystemStatus(SystemStatus new_status);
105  virtual bool setMeasurementStatus(SystemStatus new_status);
106  virtual bool updateSystemStatus(SystemStatus set, SystemStatus clear);
107  virtual bool updateMeasurementStatus(SystemStatus set, SystemStatus clear);
108 
109  typedef boost::function<bool(SystemStatus&)> SystemStatusCallback;
110  virtual void addSystemStatusCallback(const SystemStatusCallback& callback);
111 
113  virtual const boost::shared_ptr<RateStateType> &rate() const { return rate_; }
114  virtual const boost::shared_ptr<PositionStateType> &position() const { return position_; }
115  virtual const boost::shared_ptr<VelocityStateType> &velocity() const { return velocity_; }
117 
118  virtual ConstOrientationType getOrientation() const;
119  virtual ConstRateType getRate() const;
120  virtual ConstPositionType getPosition() const;
121  virtual ConstVelocityType getVelocity() const;
122  virtual ConstAccelerationType getAcceleration() const;
123 
125  template <typename Derived> void setOrientation(const Eigen::MatrixBase<Derived>& orientation);
126  void setRollPitch(const Quaternion& orientation);
127  void setRollPitch(ScalarType roll, ScalarType pitch);
128  void setYaw(const Quaternion& orientation);
129  void setYaw(ScalarType yaw);
130  template <typename Derived> void setRate(const Eigen::MatrixBase<Derived>& rate);
131  template <typename Derived> void setPosition(const Eigen::MatrixBase<Derived>& position);
132  template <typename Derived> void setVelocity(const Eigen::MatrixBase<Derived>& velocity);
133  template <typename Derived> void setAcceleration(const Eigen::MatrixBase<Derived>& acceleration);
134 
135  void getRotationMatrix(RotationMatrix &R) const;
136  const State::RotationMatrix &R() const;
137  double getYaw() const;
138  void getEuler(double &roll, double &pitch, double &yaw) const;
139  ColumnVector3 getEuler() const;
140 
141  const SubStates& getSubStates() const { return substates_; }
142  template <int SubVectorDimension, int SubCovarianceDimension> boost::shared_ptr<SubState_<SubVectorDimension,SubCovarianceDimension> > getSubState(const Model *model) const;
143  template <int SubVectorDimension, int SubCovarianceDimension> boost::shared_ptr<SubState_<SubVectorDimension,SubCovarianceDimension> > getSubState(const std::string& name) const;
144  template <int SubVectorDimension, int SubCovarianceDimension> boost::shared_ptr<SubState_<SubVectorDimension,SubCovarianceDimension> > addSubState(const std::string& name = std::string());
145  template <int SubVectorDimension, int SubCovarianceDimension> boost::shared_ptr<SubState_<SubVectorDimension,SubCovarianceDimension> > addSubState(const Model *model, const std::string& name = std::string());
146 
147  const ros::Time& getTimestamp() const { return timestamp_; }
148  void setTimestamp(const ros::Time& timestamp) { timestamp_ = timestamp; }
149 
150 protected:
151  State();
152  void construct();
153 
154  OrientationType orientationPart();
155  RateType ratePart();
156  PositionType positionPart();
157  VelocityType velocityPart();
158  AccelerationType accelerationPart();
159 
160  void orientationSet();
161  void rollpitchSet();
162  void yawSet();
163  void rateSet();
164  void positionSet();
165  void velocitySet();
166  void accelerationSet();
167 
168 protected:
169  Vector vector_;
170  Covariance covariance_;
171 
174 
175  std::vector<SystemStatusCallback> status_callbacks_;
176 
177  SubStates substates_;
178  std::map<const Model *, SubStateWPtr> substates_by_model_;
179  std::map<std::string, SubStateWPtr> substates_by_name_;
180 
187 
189  Vector fake_rate_;
193 
195 
196  // cached rotation matrix
197  mutable RotationMatrix R_;
198  mutable bool R_valid_;
199 };
200 
201 class FullState : public State
202 {
203 public:
204  FullState();
205  virtual ~FullState();
206 };
207 
209 {
210 public:
213 };
214 
216 {
217 public:
219  virtual ~OrientationOnlyState();
220 };
221 
223 {
224 public:
226  virtual ~PositionVelocityState();
227 };
228 
229 } // namespace hector_pose_estimation
230 
231 #include <hector_pose_estimation/state.inl>
232 
233 #endif // HECTOR_POSE_ESTIMATION_STATE_H
OrientationType orientationPart()
boost::shared_ptr< SubState_< SubVectorDimension, SubCovarianceDimension > > getSubState(const Model *model) const
virtual void updated()
Definition: state.cpp:110
boost::shared_ptr< SubState_< SubVectorDimension, SubCovarianceDimension > > addSubState(const std::string &name=std::string())
VectorBlock< Vector, 3 > AccelerationType
Definition: state.h:66
std::vector< SubStatePtr > SubStates
Definition: state.h:69
void setOrientation(const Quaternion &orientation)
Definition: state.cpp:262
AccelerationType accelerationPart()
virtual const boost::shared_ptr< OrientationStateType > & orientation() const
Definition: state.h:112
SymmetricMatrix Covariance
Definition: state.h:45
Matrix_< 3, 3 >::type RotationMatrix
Definition: state.h:71
VectorBlock< const Vector, 3 > ConstAccelerationType
Definition: state.h:67
virtual BaseState & base()
Definition: state.h:85
boost::function< bool(SystemStatus &)> SystemStatusCallback
Definition: state.h:109
SubState_< 3, 3 > VelocityStateType
Definition: state.h:62
std::map< std::string, SubStateWPtr > substates_by_name_
Definition: state.h:179
virtual ConstRateType getRate() const
Definition: state.cpp:117
void setYaw(const Quaternion &orientation)
Definition: state.cpp:281
virtual void normalize()
Definition: state.cpp:255
const State::RotationMatrix & R() const
Definition: state.cpp:131
virtual ConstVelocityType getVelocity() const
Definition: state.cpp:119
boost::shared_ptr< AccelerationStateType > acceleration_
Definition: state.h:186
SystemStatus measurement_status_
Definition: state.h:173
virtual const boost::shared_ptr< PositionStateType > & position() const
Definition: state.h:114
virtual ConstOrientationType getOrientation() const
Definition: state.cpp:116
Block< const Covariance::Base > ConstCovarianceBlock
Definition: state.h:51
void setRate(const Eigen::MatrixBase< Derived > &rate)
SubState_< 4, 3 > OrientationStateType
Definition: state.h:53
virtual void updateOrientation(const ColumnVector3 &rotation_vector)
Definition: state.cpp:195
VectorBlock< Vector, 3 > VelocityType
Definition: state.h:63
ColumnVector3 getEuler() const
Definition: state.cpp:153
boost::shared_ptr< PositionStateType > position_
Definition: state.h:184
Eigen::Quaternion< ScalarType > Quaternion
Definition: matrix.h:49
virtual const Covariance & getCovariance() const
Definition: state.h:89
SubState_< 3, 3 > RateStateType
Definition: state.h:56
virtual const BaseState & base() const
Definition: state.h:86
Eigen::DenseIndex IndexType
Definition: matrix.h:47
void setVelocity(const Eigen::MatrixBase< Derived > &velocity)
VectorBlock< Vector, 3 > RateType
Definition: state.h:57
virtual void reset()
Definition: state.cpp:84
const SubStates & getSubStates() const
Definition: state.h:141
boost::shared_ptr< BaseState > base_
Definition: state.h:181
virtual IndexType getCovarianceDimension() const
Definition: state.h:77
virtual const Vector & getVector() const
Definition: state.h:88
boost::shared_ptr< VelocityStateType > velocity_
Definition: state.h:185
virtual Covariance & P()
Definition: state.h:93
std::vector< SystemStatusCallback > status_callbacks_
Definition: state.h:175
double getYaw() const
Definition: state.cpp:139
virtual bool inSystemStatus(SystemStatus test_status) const
Definition: state.cpp:211
SubState_< 3, 3 > AccelerationStateType
Definition: state.h:65
ColumnVector_< Dynamic >::type ColumnVector
Definition: matrix.h:58
unsigned int SystemStatus
Definition: types.h:70
void setPosition(const Eigen::MatrixBase< Derived > &position)
boost::shared_ptr< RateStateType > rate_
Definition: state.h:183
VectorBlock< Vector, 4 > OrientationType
Definition: state.h:54
virtual const boost::shared_ptr< VelocityStateType > & velocity() const
Definition: state.h:115
virtual bool updateSystemStatus(SystemStatus set, SystemStatus clear)
Definition: state.cpp:241
SystemStatus system_status_
Definition: state.h:172
VectorBlock< Vector, 3 > PositionType
Definition: state.h:60
virtual IndexType getVectorDimension() const
Definition: state.h:76
virtual SystemStatus getSystemStatus() const
Definition: state.h:100
virtual bool setMeasurementStatus(SystemStatus new_status)
Definition: state.cpp:231
VectorBlock< Vector > VectorSegment
Definition: state.h:48
virtual bool valid() const
Definition: state.cpp:106
Block< Covariance::Base > CovarianceBlock
Definition: state.h:49
virtual ConstAccelerationType getAcceleration() const
Definition: state.cpp:120
void setTimestamp(const ros::Time &timestamp)
Definition: state.h:148
VectorBlock< const Vector, 4 > ConstOrientationType
Definition: state.h:55
void getRotationMatrix(RotationMatrix &R) const
Definition: state.cpp:122
VectorBlock< const Vector > ConstVectorSegment
Definition: state.h:50
virtual Vector & x()
Definition: state.h:92
virtual bool setSystemStatus(SystemStatus new_status)
Definition: state.cpp:215
virtual const boost::shared_ptr< RateStateType > & rate() const
Definition: state.h:113
VectorBlock< const Vector, 3 > ConstRateType
Definition: state.h:58
void setAcceleration(const Eigen::MatrixBase< Derived > &acceleration)
std::map< const Model *, SubStateWPtr > substates_by_model_
Definition: state.h:178
Matrix_< Dynamic, Dynamic >::type Matrix
Definition: matrix.h:79
void setRollPitch(const Quaternion &orientation)
Definition: state.cpp:267
VectorBlock< const Vector, 3 > ConstPositionType
Definition: state.h:61
virtual void update(const Vector &vector_update)
Definition: state.cpp:160
SubState_< 3, 3 > PositionStateType
Definition: state.h:59
virtual SystemStatus getMeasurementStatus() const
Definition: state.h:101
const ros::Time & getTimestamp() const
Definition: state.h:147
virtual bool updateMeasurementStatus(SystemStatus set, SystemStatus clear)
Definition: state.cpp:245
SymmetricMatrix_< Dynamic >::type SymmetricMatrix
Definition: matrix.h:88
ColumnVector_< 3 >::type ColumnVector3
Definition: matrix.h:59
boost::shared_ptr< OrientationStateType > orientation_
Definition: state.h:182
virtual ConstPositionType getPosition() const
Definition: state.cpp:118
VectorBlock< const Vector, 3 > ConstVelocityType
Definition: state.h:64
virtual const boost::shared_ptr< AccelerationStateType > & acceleration() const
Definition: state.h:116
virtual void addSystemStatusCallback(const SystemStatusCallback &callback)
Definition: state.cpp:249
VectorBlock< const Vector, Size > getSegment(IndexType start) const
Definition: state.h:90


hector_pose_estimation_core
Author(s): Johannes Meyer
autogenerated on Thu Feb 18 2021 03:29:30