visual-tracking-control
BrownianMotionPose.h
Go to the documentation of this file.
1 #ifndef BROWNIANMOTIONPOSE_H
2 #define BROWNIANMOTIONPOSE_H
3 
4 #include <functional>
5 #include <random>
6 
7 #include <BayesFilters/StateModel.h>
8 
9 
10 class BrownianMotionPose : public bfl::StateModel
11 {
12 public:
13  BrownianMotionPose(const float q_xy, const float q_z, const float theta, const float cone_angle, const unsigned int seed) noexcept;
14 
15  BrownianMotionPose(const float q_xy, const float q_z, const float theta, const float cone_angle) noexcept;
16 
17  BrownianMotionPose() noexcept;
18 
20 
22 
23  ~BrownianMotionPose() noexcept;
24 
26 
28 
29  void propagate(const Eigen::Ref<const Eigen::MatrixXf>& cur_state, Eigen::Ref<Eigen::MatrixXf> prop_state) override;
30 
31  void motion(const Eigen::Ref<const Eigen::MatrixXf>& cur_state, Eigen::Ref<Eigen::MatrixXf> mot_state) override;
32 
33  Eigen::MatrixXf getNoiseSample(const int num) override;
34 
35  Eigen::MatrixXf getNoiseCovarianceMatrix() override { return Eigen::MatrixXf::Zero(1, 1); };
36 
37  bool setProperty(const std::string& property) override { return false; };
38 
39 protected:
40  float q_xy_; /* Noise standard deviation for z 3D position */
41  float q_z_; /* Noise standard deviation for x-y 3D position */
42  float theta_; /* Noise standard deviation for axis-angle rotation */
43  float cone_angle_; /* Noise standard deviation for axis-angle axis cone */
44 
45  Eigen::Vector4f cone_dir_; /* Cone direction of rotation. Fixed, left here for future implementation. */
46 
47  std::mt19937_64 generator_;
48  std::normal_distribution<float> distribution_pos_xy_;
49  std::normal_distribution<float> distribution_pos_z_;
50  std::normal_distribution<float> distribution_theta_;
51  std::uniform_real_distribution<float> distribution_cone_;
52  std::function<float()> gaussian_random_pos_xy_;
53  std::function<float()> gaussian_random_pos_z_;
54  std::function<float()> gaussian_random_theta_;
55  std::function<float()> gaussian_random_cone_;
56 
57  void addAxisangleDisturbance(const Eigen::Ref<const Eigen::MatrixXf>& disturbance_vec, Eigen::Ref<Eigen::MatrixXf> current_vec);
58 };
59 
60 #endif /* BROWNIANMOTIONPOSE_H */
std::function< float()> gaussian_random_pos_xy_
std::normal_distribution< float > distribution_pos_xy_
Eigen::MatrixXf getNoiseCovarianceMatrix() override
BrownianMotionPose & operator=(const BrownianMotionPose &bm)
void propagate(const Eigen::Ref< const Eigen::MatrixXf > &cur_state, Eigen::Ref< Eigen::MatrixXf > prop_state) override
std::normal_distribution< float > distribution_pos_z_
Eigen::Vector4f cone_dir_
void addAxisangleDisturbance(const Eigen::Ref< const Eigen::MatrixXf > &disturbance_vec, Eigen::Ref< Eigen::MatrixXf > current_vec)
void motion(const Eigen::Ref< const Eigen::MatrixXf > &cur_state, Eigen::Ref< Eigen::MatrixXf > mot_state) override
std::function< float()> gaussian_random_pos_z_
std::uniform_real_distribution< float > distribution_cone_
bool setProperty(const std::string &property) override
std::normal_distribution< float > distribution_theta_
Eigen::MatrixXf getNoiseSample(const int num) override
std::function< float()> gaussian_random_cone_
std::mt19937_64 generator_
std::function< float()> gaussian_random_theta_