68 std::vector<Eigen::MatrixXf>
depth;
72 std::vector<Eigen::MatrixXf>
xx;
76 std::vector<Eigen::MatrixXf>
yy;
92 Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic>
null;
225 unsigned int& num_rows,
unsigned int& num_cols)
const 239 inline void setFOV(
float new_fovh,
float new_fovv);
242 inline void getFOV(
float& cur_fovh,
float& cur_fovv)
const 244 cur_fovh = 57.296 *
fovh;
245 cur_fovv = 57.296 *
fovv;
275 Eigen::MatrixXf&
x, Eigen::MatrixXf&
y, Eigen::MatrixXf&
z);
280 Eigen::MatrixXf& cur_du, Eigen::MatrixXf& cur_dv,
281 Eigen::MatrixXf& cur_dt);
float previous_speed_const_weight
Speed filter parameters: Previous_speed_const_weight - Directly weights the previous speed in order t...
unsigned int image_level
Aux varibles: levels of the image pyramid and the solver, respectively.
std::vector< Eigen::MatrixXf > xx
mrpt::poses::CPose3D cam_oldpose
Previous camera pose.
std::vector< Eigen::MatrixXf > depth_warped
std::vector< Eigen::MatrixXf > yy_warped
float fps
Frames per second (Hz)
unsigned int rows_i
Aux variables: number of rows and cols at a given level.
float previous_speed_eig_weight
Default 0.5.
std::vector< Eigen::MatrixXf > xx_old
std::vector< Eigen::MatrixXf > xx_warped
void buildCoordinatesPyramid()
Create the gaussian image pyramid according to the number of coarse-to-fine levels.
void calculateDepthDerivatives()
Calculates the depth derivatives respect to u,v (rows and cols) and t (time)
float getSpeedFilterConstWeight() const
Get the filter constant-weight of the velocity filter.
void getCTFLevels(unsigned int &levels) const
Get the number of coarse-to-fine levels that are considered by the visual odometry method...
mrpt::math::CMatrixFloat61 getSolverSolution() const
Get the camera velocity (vx, vy, vz, wx, wy, wz) expressed in local reference frame estimated by the ...
std::vector< Eigen::MatrixXf > transformations
Transformations of the coarse-to-fine levels.
unsigned int rows
The maximum resolution that will be considered by the visual odometry method.
virtual void loadFrame()=0
Virtual method to be implemented in derived classes.
Eigen::MatrixXf depth_wf
Matrix that stores the original depth frames with the image resolution.
mrpt::math::CMatrixFloat66 getCovariance() const
Get the least-square covariance matrix.
std::vector< Eigen::MatrixXf > yy_old
float getSpeedFilterEigWeight() const
Get the filter eigen-weight of the velocity filter.
Eigen::Matrix< float, 6, 1 > kai_abs
Last filtered velocity in absolute coordinates.
bool fast_pyramid
Gaussian masks used to build the pyramid and flag to select accurate or fast pyramid.
void computeWeights()
This method computes the weighting fuction associated to measurement and linearization errors...
void solveOneLevel()
The Solver.
float execution_time
Execution time (ms)
void setFOV(float new_fovh, float new_fovv)
Set the horizontal and vertical field of vision (in degrees)
void odometryCalculation()
This method performs all the necessary steps to estimate the camera velocity once the new image is re...
void calculateCoord()
Calculate the "average" coordinates of the points observed by the camera between two consecutive fram...
A numeric matrix of compile-time fixed size.
void getDepthDerivatives(Eigen::MatrixXf &cur_du, Eigen::MatrixXf &cur_dv, Eigen::MatrixXf &cur_dt)
Get the depth derivatives (last level) respect to u,v and t respectively.
Eigen::MatrixXf weights
Weights for the range flow constraint equations in the least square solution.
void getWeights(Eigen::MatrixXf &we)
Get the matrix of weights.
void getFOV(float &cur_fovh, float &cur_fovv) const
Get the horizontal and vertical field of vision (in degrees)
mrpt::math::CMatrixFloat61 getLastSpeedAbs() const
Get the last camera velocity (vx, vy, vz, wx, wy, wz) expressed in the world reference frame...
std::vector< Eigen::MatrixXf > depth_inter
Classes for computer vision, detectors, features, etc.
unsigned int width
Aux variables: size from which the pyramid starts to be built.
std::vector< Eigen::MatrixXf > depth_old
Eigen::Matrix< float, 6, 1 > kai_loc
Filtered velocity in local coordinates.
This abstract class implements a method called "Difodo" to perform Visual odometry with range cameras...
unsigned int ctf_levels
Number of coarse-to-fine levels.
void filterLevelSolution()
Method to filter the velocity at each level of the pyramid.
void poseUpdate()
Update camera pose and the velocities for the filter.
Eigen::Matrix< float, 6, 1 > kai_loc_level
Solution from the solver at a given level.
void getPointsCoord(Eigen::MatrixXf &x, Eigen::MatrixXf &y, Eigen::MatrixXf &z)
Get the coordinates of the points considered by the visual odometry method.
Eigen::Matrix< float, 6, 1 > kai_loc_old
std::vector< Eigen::MatrixXf > yy
std::vector< Eigen::MatrixXf > yy_inter
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
unsigned int num_valid_points
Num of valid points after removing null pixels.
float fovh
Camera properties:
void setSpeedFilterConstWeight(float new_cweight)
Set the filter constant-weight of the velocity filter.
mrpt::poses::CPose3D cam_pose
Camera poses.
void setSpeedFilterEigWeight(float new_eweight)
Set the filter eigen-weight of the velocity filter.
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic > null
Matrix which indicates whether the depth of a pixel is zero (null = 1) or not (null = 00)...
Eigen::Matrix< float, 6, 6 > est_cov
Least squares covariance matrix.
std::vector< Eigen::MatrixXf > depth
Matrices that store the point coordinates after downsampling.
float fovv
Vertical field of view (rad)
unsigned int downsample
Downsample the image taken by the range camera.
std::vector< Eigen::MatrixXf > xx_inter
void getRowsAndCols(unsigned int &num_rows, unsigned int &num_cols) const
Get the rows and cols of the depth image that are considered by the visual odometry method...
void buildCoordinatesPyramidFast()
unsigned int cam_mode
Resolution of the images taken by the range camera.
Eigen::MatrixXf du
Matrices that store the depth derivatives.
void performWarping()
Warp the second depth image against the first one according to the 3D transformations accumulated up ...