Visual Servoing Platform
version 3.6.1 under development (2024-11-21)
|
#include <visp3/core/vpThetaUVector.h>
Public Member Functions | |
vpThetaUVector () | |
vpThetaUVector (const vpThetaUVector &tu) | |
VP_EXPLICIT | vpThetaUVector (const vpHomogeneousMatrix &M) |
VP_EXPLICIT | vpThetaUVector (const vpPoseVector &p) |
VP_EXPLICIT | vpThetaUVector (const vpRotationMatrix &R) |
VP_EXPLICIT | vpThetaUVector (const vpRzyxVector &rzyx) |
VP_EXPLICIT | vpThetaUVector (const vpRzyzVector &rzyz) |
VP_EXPLICIT | vpThetaUVector (const vpRxyzVector &rxyz) |
VP_EXPLICIT | vpThetaUVector (const vpQuaternionVector &q) |
VP_EXPLICIT | vpThetaUVector (const vpColVector &tu) |
VP_EXPLICIT | vpThetaUVector (const std::vector< double > &tu) |
vpThetaUVector (double tux, double tuy, double tuz) | |
vpThetaUVector & | buildFrom (const vpHomogeneousMatrix &M) |
vpThetaUVector & | buildFrom (const vpPoseVector &p) |
vpThetaUVector & | buildFrom (const vpRotationMatrix &R) |
vpThetaUVector & | buildFrom (const vpRzyxVector &rzyx) |
vpThetaUVector & | buildFrom (const vpRzyzVector &zyz) |
vpThetaUVector & | buildFrom (const vpRxyzVector &xyz) |
vpThetaUVector & | buildFrom (const vpQuaternionVector &q) |
vpThetaUVector & | buildFrom (const vpColVector &tu) |
vpThetaUVector & | buildFrom (const std::vector< double > &tu) |
vpThetaUVector & | buildFrom (const double &tux, const double &tuy, const double &tuz) |
void | extract (double &theta, vpColVector &u) const |
double | getTheta () const |
vpColVector | getU () const |
vpThetaUVector & | operator= (const vpColVector &tu) |
vpThetaUVector & | operator= (double x) |
vpThetaUVector | operator* (const vpThetaUVector &tu_b) const |
vpThetaUVector & | operator= (const std::initializer_list< double > &list) |
Inherited functionalities from vpArray2D | |
unsigned int | getCols () const |
double | getMaxValue () const |
double | getMinValue () const |
unsigned int | getRows () const |
unsigned int | size () const |
void | resize (unsigned int nrows, unsigned int ncols, bool flagNullify=true, bool recopy_=true) |
void | reshape (unsigned int nrows, unsigned int ncols) |
void | insert (const vpArray2D< double > &A, unsigned int r, unsigned int c) |
bool | operator== (const vpArray2D< double > &A) const |
bool | operator!= (const vpArray2D< double > &A) const |
vpArray2D< double > | hadamard (const vpArray2D< double > &m) const |
Public Attributes | |
double * | data |
Related Functions | |
(Note that these are not member functions.) | |
vpColVector | operator* (const double &x, const vpRotationVector &v) |
enum | vpGEMMmethod |
bool | operator== (const vpArray2D< double > &A) const |
bool | operator== (const vpArray2D< float > &A) const |
bool | operator!= (const vpArray2D< double > &A) const |
void | vpGEMM (const vpArray2D< double > &A, const vpArray2D< double > &B, const double &alpha, const vpArray2D< double > &C, const double &beta, vpArray2D< double > &D, const unsigned int &ops=0) |
Inherited functionalities from vpRotationVector | |
double & | operator[] (unsigned int i) |
const double & | operator[] (unsigned int i) const |
vpColVector | operator* (double x) const |
vpRotationVector & | operator<< (double val) |
vpRotationVector & | operator, (double val) |
double | sumSquare () const |
vpRowVector | t () const |
std::vector< double > | toStdVector () const |
unsigned int | m_index |
Inherited I/O from vpArray2D with Static Public Member Functions | |
vpArray2D< double > | insert (const vpArray2D< double > &A, const vpArray2D< double > &B, unsigned int r, unsigned int c) |
unsigned int | rowNum |
unsigned int | colNum |
double ** | rowPtrs |
unsigned int | dsize |
static void | insert (const vpArray2D< double > &A, const vpArray2D< double > &B, vpArray2D< double > &C, unsigned int r, unsigned int c) |
static bool | load (const std::string &filename, vpArray2D< double > &A, bool binary=false, char *header=nullptr) |
static bool | loadYAML (const std::string &filename, vpArray2D< double > &A, char *header=nullptr) |
static bool | save (const std::string &filename, const vpArray2D< double > &A, bool binary=false, const char *header="") |
static bool | saveYAML (const std::string &filename, const vpArray2D< double > &A, const char *header="") |
static vpArray2D< double > | conv2 (const vpArray2D< double > &M, const vpArray2D< double > &kernel, const std::string &mode) |
static void | conv2 (const vpArray2D< double > &M, const vpArray2D< double > &kernel, vpArray2D< double > &res, const std::string &mode) |
Implementation of a rotation vector as axis-angle minimal representation.
Class that consider the case of the parameterization for the rotation.
The vpThetaUVector class is derived from vpRotationVector.
The representation is one of the minimal representation of a rotation matrix, where is a unit vector representing the rotation axis and is the rotation angle.
From the representation it is possible to build the rotation matrix using the Rodrigues formula:
with the identity matrix of dimension and the skew matrix:
From the implementation point of view, it is nothing more than an array of three floats with values in [rad].
You can set values [rad] accessing each element:
You can also initialize the vector using operator<<(double):
Or you can also initialize the vector from a list of doubles if ViSP is build with c++11 enabled:
To get the values [rad] use:
The code below shows first how to initialize a vector, than how to construct a rotation matrix from a vpThetaUVector and finally how to extract the theta U angles from the build rotation matrix.
Definition at line 171 of file vpThetaUVector.h.
vpThetaUVector::vpThetaUVector | ( | ) |
Default constructor that initialize all the 3 angles to zero.
Definition at line 48 of file vpThetaUVector.cpp.
Referenced by operator*().
vpThetaUVector::vpThetaUVector | ( | const vpThetaUVector & | tu | ) |
Copy constructor.
Definition at line 50 of file vpThetaUVector.cpp.
vpThetaUVector::vpThetaUVector | ( | const vpHomogeneousMatrix & | M | ) |
Initialize a vector from an homogeneous matrix.
Definition at line 56 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpPoseVector & | p | ) |
Initialize a vector from a pose vector.
Definition at line 60 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpRotationMatrix & | R | ) |
Initialize a vector from a rotation matrix.
Definition at line 64 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpRzyxVector & | rzyx | ) |
Initialize a vector from an Euler z-y-x representation vector.
Definition at line 69 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpRzyzVector & | rzyz | ) |
Initialize a vector from an Euler z-y-z representation vector.
Definition at line 73 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpRxyzVector & | rxyz | ) |
Initialize a vector from an Euler x-y-z representation vector.
Definition at line 77 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpQuaternionVector & | q | ) |
Initialize a vector from a quaternion representation vector.
Definition at line 81 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const vpColVector & | tu | ) |
Copy constructor from a 3-dimension vector.
Definition at line 52 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | const std::vector< double > & | tu | ) |
Build a vector from a vector of 3 angles in radian.
Definition at line 108 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector::vpThetaUVector | ( | double | tux, |
double | tuy, | ||
double | tuz | ||
) |
Build a vector from 3 angles in radians.
It produces the following printings:
Definition at line 103 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const double & | tux, |
const double & | tuy, | ||
const double & | tuz | ||
) |
Build a vector from 3 angles in radian.
Definition at line 297 of file vpThetaUVector.cpp.
References vpArray2D< double >::data.
vpThetaUVector & vpThetaUVector::buildFrom | ( | const std::vector< double > & | tu | ) |
Build a vector from a 3-dim vectors.
Definition at line 263 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, and vpException::dimensionError.
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpColVector & | tu | ) |
Build a vector from a 3-dim vector.
Definition at line 280 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, vpException::dimensionError, and vpArray2D< Type >::size().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpHomogeneousMatrix & | M | ) |
Converts an homogeneous matrix into a vector.
Definition at line 113 of file vpThetaUVector.cpp.
References vpHomogeneousMatrix::extract().
Referenced by buildFrom(), vpPoseVector::buildFrom(), VISP_NAMESPACE_NAME::eigen2visp(), vpHomogeneousMatrix::extract(), vpRotationMatrix::getThetaUVector(), vpRobotAfma6::getVelocity(), vpRobotViper650::getVelocity(), vpRobotViper850::getVelocity(), vpExponentialMap::inverse(), and vpThetaUVector().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpPoseVector & | p | ) |
Converts a pose vector into a vector copying the values contained in the pose vector.
Definition at line 126 of file vpThetaUVector.cpp.
References vpArray2D< double >::data.
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpQuaternionVector & | q | ) |
Build a vector from a quaternion representation vector.
Definition at line 252 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpRotationMatrix & | R | ) |
Converts a rotation matrix into a vector.
Definition at line 139 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, vpMath::sign(), and vpMath::sinc().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpRxyzVector & | rxyz | ) |
Build a vector from an Euler x-y-z representation vector.
Definition at line 241 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpRzyxVector & | rzyx | ) |
Build a vector from an Euler z-y-x representation vector.
Definition at line 221 of file vpThetaUVector.cpp.
References buildFrom().
vpThetaUVector & vpThetaUVector::buildFrom | ( | const vpRzyzVector & | rzyz | ) |
Build a vector from an Euler z-y-z representation vector.
Definition at line 231 of file vpThetaUVector.cpp.
References buildFrom().
|
staticinherited |
Perform a 2D convolution similar to Matlab conv2 function: .
M | : First matrix. |
kernel | : Second matrix. |
mode | : Convolution mode: "full" (default), "same", "valid". |
Definition at line 1053 of file vpArray2D.h.
|
staticinherited |
Perform a 2D convolution similar to Matlab conv2 function: .
M | : First array. |
kernel | : Second array. |
res | : Result. |
mode | : Convolution mode: "full" (default), "same", "valid". |
Definition at line 1067 of file vpArray2D.h.
void vpThetaUVector::extract | ( | double & | theta, |
vpColVector & | u | ||
) | const |
Extract the rotation angle and the unit vector from the representation.
theta | : Rotation angle in rad. |
u | : 3-dim unit vector representing the rotation axis. |
The following example shows how to use this function:
Definition at line 414 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, getTheta(), and vpColVector::resize().
Referenced by vpQuaternionVector::buildFrom().
|
inlineinherited |
Return the number of columns of the 2D array.
Definition at line 337 of file vpArray2D.h.
|
inherited |
Return the array max value.
Definition at line 339 of file vpArray2D.h.
|
inherited |
Return the array min value.
Definition at line 341 of file vpArray2D.h.
|
inlineinherited |
Return the number of rows of the 2D array.
Definition at line 347 of file vpArray2D.h.
double vpThetaUVector::getTheta | ( | ) | const |
Get the rotation angle from the representation.
The following example shows how to use this function:
Definition at line 456 of file vpThetaUVector.cpp.
References vpArray2D< double >::data.
Referenced by extract(), getU(), operator*(), and VISP_NAMESPACE_NAME::visp2eigen().
vpColVector vpThetaUVector::getU | ( | ) | const |
Get the unit vector from the representation.
The following example shows how to use this function:
Definition at line 491 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, and getTheta().
Referenced by operator*(), and VISP_NAMESPACE_NAME::visp2eigen().
Compute the Hadamard product (element wise matrix multiplication).
m | : Second matrix; |
Definition at line 641 of file vpArray2D.h.
|
inherited |
Insert array B in array A at the given position.
A | : Main array. |
B | : Array to insert. |
r | : Index of the row where to add the array. |
c | : Index of the column where to add the array. |
Definition at line 1081 of file vpArray2D.h.
|
inlineinherited |
Insert array A at the given position in the current array.
A | : The array to insert. |
r | : The index of the row to begin to insert data. |
c | : The index of the column to begin to insert data. |
Definition at line 497 of file vpArray2D.h.
|
inlinestaticinherited |
Load a matrix from a file.
filename | : Absolute file name. |
A | : Array to be loaded |
binary | : If true the matrix is loaded from a binary file, else from a text file. |
header | : Header of the file is loaded in this parameter. |
Definition at line 669 of file vpArray2D.h.
|
inlinestaticinherited |
Load an array from a YAML-formatted file.
filename | : absolute file name. |
A | : array to be loaded from the file. |
header | : header of the file is loaded in this parameter. |
Definition at line 783 of file vpArray2D.h.
|
inherited |
Not equal to comparison operator of a 2D array.
Definition at line 523 of file vpArray2D.h.
vpThetaUVector vpThetaUVector::operator* | ( | const vpThetaUVector & | tu_b | ) | const |
Perform rotation chaining / rotation multiplication using the theta.u rotation representation. See: this answer for some details about the maths.
Definition at line 512 of file vpThetaUVector.cpp.
References vpColVector::crossProd(), vpColVector::dotProd(), getTheta(), getU(), and vpThetaUVector().
|
inherited |
Operator that allows to multiply each element of a rotation vector by a scalar.
x | : The scalar. |
Definition at line 89 of file vpRotationVector.cpp.
References vpArray2D< double >::dsize.
|
inherited |
Set vector second and third element values.
val | : Value of the vector element [rad]. |
The following example shows how to initialize a vector from a list of 3 values [rad].
It produces the following printings:
Definition at line 160 of file vpRotationVector.cpp.
References vpArray2D< double >::data, vpException::dimensionError, vpRotationVector::m_index, and vpArray2D< double >::size().
|
inherited |
Set vector first element value.
val | : Value of the vector first element [rad]. |
The following example shows how to initialize a vector from a list of 3 values [rad].
It produces the following printings:
Definition at line 126 of file vpRotationVector.cpp.
References vpArray2D< double >::data, and vpRotationVector::m_index.
vpThetaUVector & vpThetaUVector::operator= | ( | const std::initializer_list< double > & | list | ) |
Set vector from a list of 3 double angle values in radians.
It produces the following printings:
Definition at line 551 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, vpException::dimensionError, and vpArray2D< double >::size().
vpThetaUVector & vpThetaUVector::operator= | ( | const vpColVector & | tu | ) |
Copy operator that initializes a vector from a 3-dimension column vector tu.
tu | : 3-dimension vector containing the values of the vector. |
Definition at line 367 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, vpException::dimensionError, vpArray2D< double >::size(), and vpArray2D< Type >::size().
vpThetaUVector & vpThetaUVector::operator= | ( | double | v | ) |
Initialize each element of the vector to the same angle value v.
v | : Angle value to set for each element of the vector. |
Definition at line 332 of file vpThetaUVector.cpp.
References vpArray2D< double >::data, and vpArray2D< double >::dsize.
Equal to comparison operator of a 2D array.
Definition at line 519 of file vpArray2D.h.
|
inlineinherited |
Operator that allows to set the value of an element of the rotation vector: r[i] = value
Definition at line 124 of file vpRotationVector.h.
|
inlineinherited |
Operator that allows to get the value of an element of the rotation vector: value = r[i]
Definition at line 129 of file vpRotationVector.h.
|
inlineinherited |
Definition at line 456 of file vpArray2D.h.
|
inlineinherited |
Set the size of the array and initialize all the values to zero.
nrows | : number of rows. |
ncols | : number of column. |
flagNullify | : if true, then the array is re-initialized to 0 after resize. If false, the initial values from the common part of the array (common part between old and new version of the array) are kept. Default value is true. |
recopy_ | : if true, will perform an explicit recopy of the old data. |
Definition at line 362 of file vpArray2D.h.
|
inlinestaticinherited |
Save a matrix to a file.
filename | : Absolute file name. |
A | : Array to be saved. |
binary | : If true the matrix is saved in a binary file, else a text file. |
header | : Optional line that will be saved at the beginning of the file. |
Warning : If you save the matrix as in a text file the precision is less than if you save it in a binary file.
Definition at line 874 of file vpArray2D.h.
|
inlinestaticinherited |
Save an array in a YAML-formatted file.
filename | : absolute file name. |
A | : array to be saved in the file. |
header | : optional lines that will be saved at the beginning of the file. Should be YAML-formatted and will adapt to the indentation if any. |
Here is an example of outputs.
Content of matrix.yml:
Content of matrixIndent.yml:
Definition at line 972 of file vpArray2D.h.
|
inlineinherited |
Return the number of elements of the 2D array.
Definition at line 349 of file vpArray2D.h.
|
inherited |
Return the sum square of all the elements of the rotation vector r(m).
.
Definition at line 179 of file vpRotationVector.cpp.
References vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.
|
inherited |
Return the transpose of the rotation vector.
Definition at line 53 of file vpRotationVector.cpp.
References vpArray2D< double >::data, and vpArray2D< double >::dsize.
Referenced by vpQuaternionVector::lerp(), vpQuaternionVector::nlerp(), and vpQuaternionVector::slerp().
|
inherited |
Converts the vpRotationVector to a std::vector.
Definition at line 68 of file vpRotationVector.cpp.
References vpArray2D< double >::data, and vpArray2D< double >::size().
|
related |
Insert array B in array A at the given position.
A | : Main array. |
B | : Array to insert. |
C | : Result array. |
r | : Index of the row where to insert array B. |
c | : Index of the column where to insert array B. |
Definition at line 1096 of file vpArray2D.h.
|
related |
Definition at line 1351 of file vpArray2D.h.
|
related |
Allows to multiply a scalar by rotaion vector.
Definition at line 195 of file vpRotationVector.cpp.
|
related |
Definition at line 1313 of file vpArray2D.h.
|
related |
Definition at line 1332 of file vpArray2D.h.
|
related |
This function performs generalized matrix multiplication: D = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T. Operation on A, B and C matrices is described by enumeration vpGEMMmethod().
For example, to compute D = alpha*A^T*B^T+beta*C we need to call :
If C is not used, vpGEMM must be called using an empty array null. Thus to compute D = alpha*A^T*B, we have to call:
vpException::incorrectMatrixSizeError | if the sizes of the matrices do not allow the operations. |
A | : An array that could be a vpMatrix. |
B | : An array that could be a vpMatrix. |
alpha | : A scalar. |
C | : An array that could be a vpMatrix. |
beta | : A scalar. |
D | : The resulting array that could be a vpMatrix. |
ops | : A scalar describing operation applied on the matrices. Possible values are the one defined in vpGEMMmethod(): VP_GEMM_A_T, VP_GEMM_B_T, VP_GEMM_C_T. |
|
related |
Enumeration of the operations applied on matrices in vpGEMM() function.
Operations are :
|
protectedinherited |
Number of columns in the array.
Definition at line 1103 of file vpArray2D.h.
|
inherited |
Address of the first element of the data array.
Definition at line 148 of file vpArray2D.h.
|
protectedinherited |
Current array size (rowNum * colNum)
Definition at line 1107 of file vpArray2D.h.
|
protectedinherited |
Definition at line 159 of file vpRotationVector.h.
Referenced by vpRotationVector::operator,(), and vpRotationVector::operator<<().
|
protectedinherited |
Number of rows in the array.
Definition at line 1101 of file vpArray2D.h.
|
protectedinherited |
Address of the first element of each rows.
Definition at line 1105 of file vpArray2D.h.