SaDVIO
frame.h
Go to the documentation of this file.
1 #ifndef FRAME_H
2 #define FRAME_H
3 
6 #include "isaeslam/typedefs.h"
7 
8 namespace isae {
9 
10 class ImageSensor;
11 class ASensor;
12 class IMU;
13 
22 class Frame : public std::enable_shared_from_this<Frame> {
23  public:
24  Frame() = default;
25 
26  static int _frame_count;
27  int _id;
28 
32  void init(const std::vector<std::shared_ptr<ImageSensor>> &sensors, unsigned long long timestamp);
33 
37  void init(std::shared_ptr<IMU> &imu, unsigned long long timestamp);
38 
42  void init(const std::vector<std::shared_ptr<ASensor>> &sensors, unsigned long long timestamp);
43 
44  std::vector<std::shared_ptr<ImageSensor>> getSensors() const { return _sensors; }
45  std::shared_ptr<IMU> getIMU() const { return _imu; }
46  void setIMU(std::shared_ptr<IMU> &imu, Eigen::Affine3d T_s_f);
47 
51  void cleanSensors() {
52  _imu = nullptr;
53  _sensors.clear();
54  }
55 
59  void setWorld2FrameTransform(Eigen::Affine3d T_f_w) {
60  std::lock_guard<std::mutex> lock(_frame_mtx);
61  _T_f_w = T_f_w;
62  }
63 
67  Eigen::Affine3d getWorld2FrameTransform() const {
68  std::lock_guard<std::mutex> lock(_frame_mtx);
69  return _T_f_w;
70  }
71 
75  Eigen::Affine3d getFrame2WorldTransform() const {
76  std::lock_guard<std::mutex> lock(_frame_mtx);
77  return _T_f_w.inverse();
78  }
79 
80  void addLandmark(std::shared_ptr<ALandmark> ldmk) { _landmarks[ldmk->_label].push_back(ldmk); }
82  for (auto typed_ldmks : ldmks) {
83  for (auto l : typed_ldmks.second)
84  _landmarks[typed_ldmks.first].push_back(l);
85  }
86  }
87  typed_vec_landmarks getLandmarks() const { return _landmarks; }
88 
89  uint getInMapLandmarksNumber() const;
90  uint getLandmarksNumber() const {
91  uint N = 0;
92  for (const auto &typeldmk : _landmarks)
93  N += typeldmk.second.size();
94  return N;
95  }
96  void cleanLandmarks();
97 
98  unsigned long long getTimestamp() const { return _timestamp; }
99 
100  void setKeyFrame() { _is_kf = true; }
101  void unsetKeyFrame() { _is_kf = false; }
102 
106  bool isKeyFrame() const { return _is_kf; }
107 
108  // Handles a prior on T_f_w
109  bool hasPrior() const { return _has_prior; }
110  void setPrior(Eigen::Affine3d T_prior, Vector6d inf_prior) {
111  _has_prior = true;
112  _T_prior = T_prior;
113  _inf_T_prior = inf_prior;
114  }
115  Eigen::Affine3d getPrior() const { return _T_prior; }
116  Vector6d getInfPrior() const { return _inf_T_prior; }
117 
118  // Handles relative pose covariance
119  // The convention is wrt the previous frame
120  void setdTCov(Eigen::MatrixXd dT_cov) { _dT_cov = dT_cov; }
121  Eigen::MatrixXd getdTCov() const { return _dT_cov; }
122 
123  private:
124  Eigen::Affine3d _T_f_w = Eigen::Affine3d::Identity();
125  typed_vec_landmarks _landmarks;
126 
127  unsigned long long _timestamp;
128  std::vector<std::shared_ptr<ImageSensor>> _sensors;
129  std::shared_ptr<IMU> _imu;
130 
131  bool _is_kf = false;
132  bool _has_prior = false;
133 
134  Eigen::Affine3d _T_prior = Eigen::Affine3d::Identity();
135  Vector6d _inf_T_prior = Vector6d::Zero();
136  Eigen::MatrixXd _dT_cov =
137  Eigen::MatrixXd::Identity(6, 6);
138 
139  mutable std::mutex _frame_mtx;
140 };
141 
142 } // namespace isae
143 
144 #endif // FRAME_H
isae::Frame::_frame_count
static int _frame_count
Static counter for frame IDs.
Definition: frame.h:26
isae::Frame::getPrior
Eigen::Affine3d getPrior() const
Definition: frame.h:115
isae::Frame::setIMU
void setIMU(std::shared_ptr< IMU > &imu, Eigen::Affine3d T_s_f)
Definition: frame.cpp:56
isae::Frame::setKeyFrame
void setKeyFrame()
Definition: frame.h:100
isae::Frame::setPrior
void setPrior(Eigen::Affine3d T_prior, Vector6d inf_prior)
Definition: frame.h:110
isae::Frame::getFrame2WorldTransform
Eigen::Affine3d getFrame2WorldTransform() const
Get the pose of the frame in the world frame.
Definition: frame.h:75
isae::Frame::getWorld2FrameTransform
Eigen::Affine3d getWorld2FrameTransform() const
Get the pose of the world wrt to the frame.
Definition: frame.h:67
isae::Frame::cleanSensors
void cleanSensors()
free all the pointers related to sensors
Definition: frame.h:51
isae::Frame::getIMU
std::shared_ptr< IMU > getIMU() const
Definition: frame.h:45
isae::Frame::setdTCov
void setdTCov(Eigen::MatrixXd dT_cov)
Definition: frame.h:120
isae::Frame::getInfPrior
Vector6d getInfPrior() const
Definition: frame.h:116
AFeature2D.h
isae::Frame::setWorld2FrameTransform
void setWorld2FrameTransform(Eigen::Affine3d T_f_w)
Set the pose of the world wrt the frame.
Definition: frame.h:59
isae::Frame::isKeyFrame
bool isKeyFrame() const
Return true if the frame is a keyframe, false otherwise.
Definition: frame.h:106
isae::Frame::getInMapLandmarksNumber
uint getInMapLandmarksNumber() const
Definition: frame.cpp:64
isae::Frame::getSensors
std::vector< std::shared_ptr< ImageSensor > > getSensors() const
Definition: frame.h:44
typedefs.h
ALandmark.h
isae::Frame::cleanLandmarks
void cleanLandmarks()
Definition: frame.cpp:85
isae::Frame::getLandmarksNumber
uint getLandmarksNumber() const
Definition: frame.h:90
isae
Definition: AFeature2D.h:8
isae::Frame::hasPrior
bool hasPrior() const
Definition: frame.h:109
isae::typed_vec_landmarks
std::unordered_map< std::string, std::vector< std::shared_ptr< isae::ALandmark > > > typed_vec_landmarks
A typed vector of landmarks to handle hetereogeneous landmark sets.
Definition: typedefs.h:30
isae::Frame::getLandmarks
typed_vec_landmarks getLandmarks() const
Definition: frame.h:87
isae::Frame::getTimestamp
unsigned long long getTimestamp() const
Definition: frame.h:98
isae::Frame::init
void init(const std::vector< std::shared_ptr< ImageSensor >> &sensors, unsigned long long timestamp)
Initialization of a frame with images.
isae::Vector6d
Eigen::Matrix< double, 6, 1 > Vector6d
A double Eigen vector in 6D.
Definition: typedefs.h:16
isae::Frame::unsetKeyFrame
void unsetKeyFrame()
Definition: frame.h:101
isae::Frame::addLandmark
void addLandmark(std::shared_ptr< ALandmark > ldmk)
Definition: frame.h:80
isae::Frame::Frame
Frame()=default
isae::Frame::getdTCov
Eigen::MatrixXd getdTCov() const
Definition: frame.h:121
isae::Frame
A Frame class representing a set of sensors and landmarks at a specific timestamp.
Definition: frame.h:22
isae::Frame::_id
int _id
Unique ID for the frame, assigned at initialization.
Definition: frame.h:27
isae::Frame::addLandmarks
void addLandmarks(isae::typed_vec_landmarks ldmks)
Definition: frame.h:81