odometry
Odometry.hpp
Go to the documentation of this file.
1 #ifndef __ODOMETRY_ODOMETRY_HPP__
2 #define __ODOMETRY_ODOMETRY_HPP__
3 
4 #include <base/Time.hpp>
5 #include <base/Pose.hpp>
6 
7 #include <odometry/Gaussian.hpp>
8 #include <odometry/Configuration.hpp>
9 #include <odometry/BodyState.hpp>
10 #include <odometry/State.hpp>
11 #include <odometry/Gaussian3D.hpp>
12 #include <odometry/Sampling3D.hpp>
13 #include <odometry/Sampling2D.hpp>
14 #include <base/samples/Joints.hpp>
15 
16 namespace odometry
17 {
25  : public Gaussian3D,
26  public Sampling3D,
27  public Sampling2D
28  {
29  public:
32 
33  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
39  SkidOdometry(const Configuration& config, double wheelRadiusAvg, double trackWidth, double wheelBase,
40  const std::vector<std::string> &leftWheelNames, const std::vector<std::string> &rightWheelNames);
41 
47  SkidOdometry(const Configuration& config, double wheelRadiusAvg, double trackWidth, double wheelBase,
48  const std::vector<std::string> &leftWheelNames, const std::vector<std::string> &rightWheelNames,
49  const std::vector<std::string> &leftSteeringNames, const std::vector<std::string> &rightSteeringNames);
50 
57  void update( Eigen::Vector2d diff, const Eigen::Quaterniond& orientation );
58 
65  void update( double d, const Eigen::Quaterniond& orientation );
66 
73  void update(const base::samples::Joints &js, const Eigen::Quaterniond& orientation);
74 
82  void update(const base::samples::Joints &jsw,const base::samples::Joints &jss, const Eigen::Quaterniond& orientation);
83 
90  base::Pose getPoseDelta();
96  Eigen::Matrix3d getPositionError();
104  Eigen::Matrix3d getOrientationError();
105 
112  Matrix6d getPoseError();
113 
114  public:
125  base::Pose getPoseDeltaSample();
126 
135  base::Pose2D getPoseDeltaSample2D();
136 
137  protected:
140 
144  double trackWidth;
146  double wheelBase;
147 
149 
150  Eigen::Quaterniond orientation, prevOrientation;
151  base::Pose pose;
152 
155 
156  std::vector<std::string> leftWheelNames;
157  std::vector<std::string> rightWheelNames;
158  std::vector<std::string> leftSteeringNames;
159  std::vector<std::string> rightSteeringNames;
160 
165  double getTranslation(const std::vector< std::string >& actuatorNames);
166 
171  double getRotation(const std::vector< std::string >& actuatorNames);
172  };
173 
185  : public SkidOdometry
186  {
187  public:
188  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
189 
196  Skid4Odometry(const Configuration& config, double wheelRadiusAvg, double trackWidth, double wheelBase);
203  void update(const BodyState &bs, const Eigen::Quaterniond& orientation);
204 
210  Eigen::Matrix3d getPositionError();
218  Eigen::Matrix3d getOrientationError();
219 
227 
228  // DEPRECATED, PLEASE REMOVE.
229  // only use the interface defined in the base class.
230  // if interface not sufficient, discuss.
231  Eigen::Vector3d getTranslation();
232  Eigen::Vector3d getVelocity();
233  Eigen::Vector3d getAngularVelocity();
234  Eigen::Matrix3d getVelocityError();
235  double getDeltaYaw();
236 
237  public:
241  };
242 
243 }
244 
245 #endif
Class which provides a simple wheel (skid steering) odometry from asguard.
Definition: Odometry.hpp:184
helper class that represents a pose (position and orientation) and associated gaussian uncertainty...
Definition: Gaussian.hpp:21
Eigen::Matrix3d getOrientationError()
provide the orientation covariance matrix for the current pose delta
Definition: Odometry.cpp:219
GaussianSamplingPose3D sampling
Definition: Odometry.hpp:148
State< BodyState > state
Definition: Odometry.hpp:240
Definition: Sampling3D.hpp:12
State< base::samples::Joints > steeringJointState
Definition: Odometry.hpp:154
void update(Eigen::Vector2d diff, const Eigen::Quaterniond &orientation)
update method which is called for each new measurement
Definition: Odometry.cpp:185
std::vector< std::string > leftSteeringNames
Definition: Odometry.hpp:158
base::Pose pose
Definition: Odometry.hpp:151
std::vector< std::string > rightSteeringNames
Definition: Odometry.hpp:159
double wheelRadiusAvg
Definition: Odometry.hpp:142
Configuration config
Definition: Odometry.hpp:139
State< base::samples::Joints > jointState
Definition: Odometry.hpp:153
double trackWidth
Definition: Odometry.hpp:144
double wheelBase
Definition: Odometry.hpp:146
Matrix6d getPoseError()
Definition: Odometry.cpp:224
EIGEN_MAKE_ALIGNED_OPERATOR_NEW SkidOdometry(const Configuration &config, double wheelRadiusAvg, double trackWidth, double wheelBase, const std::vector< std::string > &leftWheelNames, const std::vector< std::string > &rightWheelNames)
default constructor for wheel odometry class
base::Pose getPoseDelta()
provides the mean of the change in pose between the last two update calls
Definition: Odometry.cpp:31
Eigen::Quaterniond orientation
Definition: Odometry.hpp:150
std::vector< std::string > rightWheelNames
Definition: Odometry.hpp:157
Eigen::Matrix3d getPositionError()
Provide the error covariance matrix for the current pose delta.
Definition: Odometry.cpp:214
Eigen::Quaterniond prevOrientation
Definition: Odometry.hpp:150
base::Matrix6d Matrix6d
Definition: Odometry.hpp:30
Definition: Sampling2D.hpp:12
base::Pose2D getPoseDeltaSample2D()
provide a 2d pose sample based on the current state of the odometry
Definition: Odometry.cpp:41
base::Vector6d Vector6d
Definition: Odometry.hpp:31
Eigen::Matrix< double, 6, 1 > Vector6d
Definition: ContactOdometry.hpp:15
double getRotation(const std::vector< std::string > &actuatorNames)
Definition: Odometry.cpp:98
base::Pose getPoseDeltaSample()
get a 3d pose sample based on the current state of the odometry
Definition: Odometry.cpp:36
double getTranslation(const std::vector< std::string > &actuatorNames)
Definition: Odometry.cpp:72
Class which provides a simple wheel (skid steering) odometry.
Definition: Odometry.hpp:24
std::vector< std::string > leftWheelNames
Definition: Odometry.hpp:156
Definition: Configuration.hpp:19
Definition: Gaussian3D.hpp:12
Definition: BodyState.cpp:5
Eigen::Matrix< double, 6, 6 > Matrix6d
Definition: ContactOdometry.hpp:14
Definition: BodyState.hpp:34