Core algorithms for OpenVINS. More...
Classes | |
class | BsplineSE3 |
B-Spline which performs interpolation over SE(3) manifold. More... | |
class | CamBase |
Base pinhole camera model class. More... | |
class | CamEqui |
Fisheye / equadistant model pinhole camera model class. More... | |
struct | CameraData |
Struct for a collection of camera measurements. More... | |
class | CamRadtan |
Radial-tangential / Brown–Conrady model pinhole camera model class. More... | |
class | CpiBase |
Base class for continuous preintegration integrators. More... | |
class | CpiV1 |
Model 1 of continuous preintegration. More... | |
class | CpiV2 |
Model 2 of continuous preintegration. More... | |
class | DatasetReader |
Helper functions to read in dataset files. More... | |
class | Feature |
Sparse feature class used to collect measurements. More... | |
class | FeatureDatabase |
Database containing features we are currently tracking. More... | |
class | FeatureHelper |
Contains some nice helper functions for features. More... | |
class | FeatureInitializer |
Class that triangulates feature. More... | |
struct | FeatureInitializerOptions |
Struct which stores all our feature initializer options. More... | |
class | Grider_FAST |
Extracts FAST features in a grid pattern. More... | |
class | Grider_GRID |
Extracts FAST features in a grid pattern. More... | |
struct | ImuData |
Struct for a single imu measurement (time, wm, am) More... | |
class | LambdaBody |
class | Printer |
Printer for open_vins that allows for various levels of printing to be done. More... | |
class | TrackAruco |
Tracking of OpenCV Aruoc tags. More... | |
class | TrackBase |
Visual feature tracking base class. More... | |
class | TrackDescriptor |
Descriptor-based visual tracking. More... | |
class | TrackKLT |
KLT tracking of features. More... | |
class | TrackSIM |
Simulated tracker for when we already have uv measurements! More... | |
class | YamlParser |
Helper class to do OpenCV yaml parsing from both file and ROS. More... | |
Functions | |
Eigen::Matrix4d | exp_se3 (Eigen::Matrix< double, 6, 1 > vec) |
SE(3) matrix exponential function. More... | |
Eigen::Matrix< double, 3, 3 > | exp_so3 (const Eigen::Matrix< double, 3, 1 > &w) |
SO(3) matrix exponential. More... | |
Eigen::Matrix4d | hat_se3 (const Eigen::Matrix< double, 6, 1 > &vec) |
Hat operator for R^6 -> Lie Algebra se(3) More... | |
Eigen::Matrix< double, 4, 1 > | Inv (Eigen::Matrix< double, 4, 1 > q) |
JPL Quaternion inverse. More... | |
Eigen::Matrix4d | Inv_se3 (const Eigen::Matrix4d &T) |
SE(3) matrix analytical inverse. More... | |
Eigen::Matrix< double, 3, 3 > | Jl_so3 (const Eigen::Matrix< double, 3, 1 > &w) |
Computes left Jacobian of SO(3) More... | |
Eigen::Matrix< double, 3, 3 > | Jr_so3 (const Eigen::Matrix< double, 3, 1 > &w) |
Computes right Jacobian of SO(3) More... | |
Eigen::Matrix< double, 6, 1 > | log_se3 (Eigen::Matrix4d mat) |
SE(3) matrix logarithm. More... | |
Eigen::Matrix< double, 3, 1 > | log_so3 (const Eigen::Matrix< double, 3, 3 > &R) |
SO(3) matrix logarithm. More... | |
Eigen::Matrix< double, 4, 4 > | Omega (Eigen::Matrix< double, 3, 1 > w) |
Integrated quaternion from angular velocity. More... | |
Eigen::Matrix< double, 3, 3 > | quat_2_Rot (const Eigen::Matrix< double, 4, 1 > &q) |
Converts JPL quaterion to SO(3) rotation matrix. More... | |
Eigen::Matrix< double, 4, 1 > | quat_multiply (const Eigen::Matrix< double, 4, 1 > &q, const Eigen::Matrix< double, 4, 1 > &p) |
Multiply two JPL quaternions. More... | |
Eigen::Matrix< double, 4, 1 > | quatnorm (Eigen::Matrix< double, 4, 1 > q_t) |
Normalizes a quaternion to make sure it is unit norm. More... | |
Eigen::Matrix< double, 3, 1 > | rot2rpy (const Eigen::Matrix< double, 3, 3 > &rot) |
Gets roll, pitch, yaw of argument rotation (in that order). More... | |
Eigen::Matrix< double, 4, 1 > | rot_2_quat (const Eigen::Matrix< double, 3, 3 > &rot) |
Returns a JPL quaternion from a rotation matrix. More... | |
Eigen::Matrix< double, 3, 3 > | rot_x (double t) |
Construct rotation matrix from given roll. More... | |
Eigen::Matrix< double, 3, 3 > | rot_y (double t) |
Construct rotation matrix from given pitch. More... | |
Eigen::Matrix< double, 3, 3 > | rot_z (double t) |
Construct rotation matrix from given yaw. More... | |
Eigen::Matrix< double, 3, 3 > | skew_x (const Eigen::Matrix< double, 3, 1 > &w) |
Skew-symmetric matrix from a given 3x1 vector. More... | |
Eigen::Matrix< double, 3, 1 > | vee (const Eigen::Matrix< double, 3, 3 > &w_x) |
Returns vector portion of skew-symmetric. More... | |
Core algorithms for OpenVINS.
This has the core algorithms that all projects within the OpenVINS ecosystem leverage. The purpose is to allow for the reuse of code that could be shared between different localization systems (i.e. msckf-based, batch-based, etc.). These algorithms are the foundation which is necessary before we can even write an estimator that can perform localization. The key components of the ov_core codebase are the following:
Please take a look at classes that we offer for the user to leverage as each has its own documentation. If you are looking for the estimator please take a look at the ov_msckf project which leverages these algorithms. If you are looking for the different types please take a look at the ov_type namespace for the ones we have.
|
inline |
SE(3) matrix exponential function.
Equation is from Ethan Eade's reference: http://ethaneade.com/lie.pdf
where we have the following definitions
vec | 6x1 in the R(6) space [omega, u] |
Definition at line 332 of file quat_ops.h.
|
inline |
SO(3) matrix exponential.
SO(3) matrix exponential mapping from the vector to SO(3) lie group. This formula ends up being the Rodrigues formula. This definition was taken from "Lie Groups for 2D and 3D Transformations" by Ethan Eade equation 15. http://ethaneade.com/lie.pdf
[in] | w | 3x1 vector in R(3) we will take the exponential of |
Definition at line 231 of file quat_ops.h.
|
inline |
Hat operator for R^6 -> Lie Algebra se(3)
vec | 6x1 in the R(6) space [omega, u] |
Definition at line 419 of file quat_ops.h.
|
inline |
JPL Quaternion inverse.
See equation 21 in Indirect Kalman Filter for 3D Attitude Estimation.
[in] | q | quaternion we want to change |
Definition at line 457 of file quat_ops.h.
|
inline |
SE(3) matrix analytical inverse.
It seems that using the .inverse() function is not a good way. This should be used in all cases we need the inverse instead of numerical inverse. https://github.com/rpng/open_vins/issues/12
[in] | T | SE(3) matrix |
Definition at line 439 of file quat_ops.h.
|
inline |
Computes left Jacobian of SO(3)
The left Jacobian of SO(3) is defined equation (7.77b) in State Estimation for Robotics by Timothy D. Barfoot [Barfoot2017]. Specifically it is the following (with and ):
w | axis-angle |
Definition at line 515 of file quat_ops.h.
|
inline |
Computes right Jacobian of SO(3)
The right Jacobian of SO(3) is related to the left by Jl(-w)=Jr(w). See equation (7.87) in State Estimation for Robotics by Timothy D. Barfoot [Barfoot2017]. See Jl_so3() for the definition of the left Jacobian of SO(3).
w | axis-angle |
Definition at line 537 of file quat_ops.h.
|
inline |
SE(3) matrix logarithm.
Equation is from Ethan Eade's reference: http://ethaneade.com/lie.pdf
where we have the following definitions
This function is based on the GTSAM one as the original implementation was a bit unstable. See the following:
mat | 4x4 SE(3) matrix |
Definition at line 388 of file quat_ops.h.
|
inline |
SO(3) matrix logarithm.
This definition was taken from "Lie Groups for 2D and 3D Transformations" by Ethan Eade equation 17 & 18. http://ethaneade.com/lie.pdf
This function is based on the GTSAM one as the original implementation was a bit unstable. See the following:
[in] | R | 3x3 SO(3) rotation matrix |
Definition at line 273 of file quat_ops.h.
|
inline |
Integrated quaternion from angular velocity.
See equation (48) of trawny tech report Indirect Kalman Filter for 3D Attitude Estimation. This matrix is derived in Section 1.5 of the report by finding the Quaterion Time Derivative.
w | Angular velocity |
Definition at line 482 of file quat_ops.h.
|
inline |
Converts JPL quaterion to SO(3) rotation matrix.
This is based on equation 62 in Indirect Kalman Filter for 3D Attitude Estimation:
[in] | q | JPL quaternion |
Definition at line 152 of file quat_ops.h.
|
inline |
Multiply two JPL quaternions.
This is based on equation 9 in Indirect Kalman Filter for 3D Attitude Estimation. We also enforce that the quaternion is unique by having q_4 be greater than zero.
[in] | q | First JPL quaternion |
[in] | p | Second JPL quaternion |
Definition at line 180 of file quat_ops.h.
|
inline |
Normalizes a quaternion to make sure it is unit norm.
q_t | Quaternion to normalized |
Definition at line 496 of file quat_ops.h.
|
inline |
Gets roll, pitch, yaw of argument rotation (in that order).
To recover the matrix: R_input = R_z(yaw)*R_y(pitch)*R_x(roll) If you are interested in how to compute Jacobians checkout this report: http://mars.cs.umn.edu/tr/reports/Trawny05c.pdf
rot | SO(3) rotation matrix |
Definition at line 549 of file quat_ops.h.
|
inline |
Returns a JPL quaternion from a rotation matrix.
This is based on the equation 74 in Indirect Kalman Filter for 3D Attitude Estimation. In the implementation, we have 4 statements so that we avoid a division by zero and instead always divide by the largest diagonal element. This all comes from the definition of a rotation matrix, using the diagonal elements and an off-diagonal.
[in] | rot | 3x3 rotation matrix |
Definition at line 88 of file quat_ops.h.
|
inline |
Construct rotation matrix from given roll.
t | roll angle |
Definition at line 577 of file quat_ops.h.
|
inline |
Construct rotation matrix from given pitch.
t | pitch angle |
Definition at line 600 of file quat_ops.h.
|
inline |
Construct rotation matrix from given yaw.
t | yaw angle |
Definition at line 623 of file quat_ops.h.
|
inline |
Skew-symmetric matrix from a given 3x1 vector.
This is based on equation 6 in Indirect Kalman Filter for 3D Attitude Estimation:
[in] | w | 3x1 vector to be made a skew-symmetric |
Definition at line 135 of file quat_ops.h.
|
inline |
Returns vector portion of skew-symmetric.
See skew_x() for details.
[in] | w_x | skew-symmetric matrix |
Definition at line 205 of file quat_ops.h.