This abstract class implements a method called "Difodo" to perform Visual odometry with range cameras.
It is based on the range flow equation and assumes that the scene is rigid. It can work with different image resolutions (640 x 480, 320 x 240 or 160 x 120) and a different number of coarse-to-fine levels which can be adjusted with the member variables (rows,cols,ctf_levels).
How to use:
- A derived class must be created which defines the method "loadFrame(...)" according to the user application. This method has to load the depth image into the variable "depth_wf".
- Call loadFrame();
- Call odometryCalculation();
For further information have a look at the apps:
- DifOdometry-Camera
DifOdometry-Datasets
Please refer to the respective publication when using this method: title = {Fast Visual Odometry for {3-D} Range Sensors}, author = {Jaimez, Mariano and Gonzalez-Jimenez, Javier}, journal = {IEEE Transactions on Robotics}, volume = {31}, number = {4}, pages = {809 - 822}, year = {2015}
JUN/2013: First design.
Definition at line 55 of file CDifodo.h.
|
void | odometryCalculation () |
| This method performs all the necessary steps to estimate the camera velocity once the new image is read, and updates the camera pose. More...
|
|
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. More...
|
|
void | getCTFLevels (unsigned int &levels) const |
| Get the number of coarse-to-fine levels that are considered by the visual odometry method. More...
|
|
void | setFOV (float new_fovh, float new_fovv) |
| Set the horizontal and vertical field of vision (in degrees) More...
|
|
void | getFOV (float &cur_fovh, float &cur_fovv) const |
| Get the horizontal and vertical field of vision (in degrees) More...
|
|
float | getSpeedFilterConstWeight () const |
| Get the filter constant-weight of the velocity filter. More...
|
|
float | getSpeedFilterEigWeight () const |
| Get the filter eigen-weight of the velocity filter. More...
|
|
void | setSpeedFilterConstWeight (float new_cweight) |
| Set the filter constant-weight of the velocity filter. More...
|
|
void | setSpeedFilterEigWeight (float new_eweight) |
| Set the filter eigen-weight of the velocity filter. More...
|
|
void | getPointsCoord (Eigen::MatrixXf &x, Eigen::MatrixXf &y, Eigen::MatrixXf &z) |
| Get the coordinates of the points considered by the visual odometry method. More...
|
|
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. More...
|
|
mrpt::math::CMatrixFloat61 | getSolverSolution () const |
| Get the camera velocity (vx, vy, vz, wx, wy, wz) expressed in local reference frame estimated by the solver (before filtering) More...
|
|
mrpt::math::CMatrixFloat61 | getLastSpeedAbs () const |
| Get the last camera velocity (vx, vy, vz, wx, wy, wz) expressed in the world reference frame, obtained after filtering. More...
|
|
mrpt::math::CMatrixFloat66 | getCovariance () const |
| Get the least-square covariance matrix. More...
|
|
void | getWeights (Eigen::MatrixXf &we) |
| Get the matrix of weights. More...
|
|
virtual void | loadFrame ()=0 |
| Virtual method to be implemented in derived classes. More...
|
|
| CDifodo () |
|
|
Eigen::MatrixXf | depth_wf |
| Matrix that stores the original depth frames with the image resolution. More...
|
|
std::vector< Eigen::MatrixXf > | depth |
| Matrices that store the point coordinates after downsampling. More...
|
|
std::vector< Eigen::MatrixXf > | depth_old |
|
std::vector< Eigen::MatrixXf > | depth_inter |
|
std::vector< Eigen::MatrixXf > | depth_warped |
|
std::vector< Eigen::MatrixXf > | xx |
|
std::vector< Eigen::MatrixXf > | xx_inter |
|
std::vector< Eigen::MatrixXf > | xx_old |
|
std::vector< Eigen::MatrixXf > | xx_warped |
|
std::vector< Eigen::MatrixXf > | yy |
|
std::vector< Eigen::MatrixXf > | yy_inter |
|
std::vector< Eigen::MatrixXf > | yy_old |
|
std::vector< Eigen::MatrixXf > | yy_warped |
|
Eigen::MatrixXf | du |
| Matrices that store the depth derivatives. More...
|
|
Eigen::MatrixXf | dv |
|
Eigen::MatrixXf | dt |
|
Eigen::MatrixXf | weights |
| Weights for the range flow constraint equations in the least square solution. More...
|
|
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). More...
|
|
Eigen::Matrix< float, 6, 6 > | est_cov |
| Least squares covariance matrix. More...
|
|
bool | fast_pyramid |
| Gaussian masks used to build the pyramid and flag to select accurate or fast pyramid. More...
|
|
Eigen::Matrix4f | f_mask |
|
float | g_mask [5][5] |
|
float | fovh |
| Camera properties: More...
|
|
float | fovv |
| Vertical field of view (rad) More...
|
|
unsigned int | rows |
| The maximum resolution that will be considered by the visual odometry method. More...
|
|
unsigned int | cols |
|
unsigned int | width |
| Aux variables: size from which the pyramid starts to be built. More...
|
|
unsigned int | height |
|
unsigned int | rows_i |
| Aux variables: number of rows and cols at a given level. More...
|
|
unsigned int | cols_i |
|
unsigned int | ctf_levels |
| Number of coarse-to-fine levels. More...
|
|
unsigned int | image_level |
| Aux varibles: levels of the image pyramid and the solver, respectively. More...
|
|
unsigned int | level |
|
float | previous_speed_const_weight |
| Speed filter parameters: Previous_speed_const_weight - Directly weights the previous speed in order to calculate the filtered velocity. More...
|
|
float | previous_speed_eig_weight |
| Default 0.5. More...
|
|
std::vector< Eigen::MatrixXf > | transformations |
| Transformations of the coarse-to-fine levels. More...
|
|
Eigen::Matrix< float, 6, 1 > | kai_loc_level |
| Solution from the solver at a given level. More...
|
|
Eigen::Matrix< float, 6, 1 > | kai_abs |
| Last filtered velocity in absolute coordinates. More...
|
|
Eigen::Matrix< float, 6, 1 > | kai_loc |
| Filtered velocity in local coordinates. More...
|
|
Eigen::Matrix< float, 6, 1 > | kai_loc_old |
|
float mrpt::vision::CDifodo::previous_speed_const_weight |
|
protected |
Speed filter parameters: Previous_speed_const_weight - Directly weights the previous speed in order to calculate the filtered velocity.
Recommended range - (0, 0.5) Previous_speed_eig_weight - Weights the product of the corresponding eigenvalue and the previous velocity to calculate the filtered velocity Default 0.05
Definition at line 123 of file CDifodo.h.