The Mat class represents a 4x4 pose matrix. The main purpose of this object is to represent a pose in the 3D space (position and orientation). In other words, a pose is a 4x4 matrix that represents the position and orientation of one reference frame with respect to another one, in the 3D space. Poses are commonly used in robotics to place objects, reference frames and targets with respect to each other.
\( transl(x,y,z) rotx(r) roty(p) rotz(w) = \\ \begin{bmatrix} n_x & o_x & a_x & x \\ n_y & o_y & a_y & y \\ n_z & o_z & a_z & z \\ 0 & 0 & 0 & 1 \end{bmatrix} \).
More...
#include <robodk_api.h>
Public Member Functions | |
Mat () | |
Create the identity matrix. More... | |
Mat (bool valid) | |
Create a valid or an invalid matrix. More... | |
Mat (const QMatrix4x4 &matrix) | |
Create a copy of the matrix. More... | |
Mat (const Mat &matrix) | |
Create a copy of the matrix. More... | |
Mat (double nx, double ox, double ax, double tx, double ny, double oy, double ay, double ty, double nz, double oz, double az, double tz) | |
Matrix class constructor for a 4x4 homogeneous matrix given N, O, A & T vectors More... | |
Mat (const double values[16]) | |
Create a homogeneoux matrix given a one dimensional 16-value array (doubles) More... | |
Mat (const float values[16]) | |
Create a homogeneoux matrix given a one dimensional 16-value array (floats) More... | |
operator QString () const | |
To String operator (use with qDebug() << tJoints;. More... | |
void | setVX (double x, double y, double z) |
Set the X vector values (N vector) More... | |
void | setVY (double x, double y, double z) |
Set the Y vector values (O vector) More... | |
void | setVZ (double x, double y, double z) |
Set the Z vector values (A vector) More... | |
void | setPos (double x, double y, double z) |
Set the position (T position) in mm. More... | |
void | setVX (double xyz[3]) |
Set the X vector values (N vector) More... | |
void | setVY (double xyz[3]) |
Set the Y vector values (O vector) More... | |
void | setVZ (double xyz[3]) |
Set the Z vector values (A vector) More... | |
void | setPos (double xyz[3]) |
Set the position (T position) in mm. More... | |
void | VX (tXYZ xyz) const |
Get the X vector (N vector) More... | |
void | VY (tXYZ xyz) const |
Get the Y vector (O vector) More... | |
void | VZ (tXYZ xyz) const |
Get the Z vector (A vector) More... | |
void | Pos (tXYZ xyz) const |
Get the position (T position), in mm. More... | |
void | Set (int r, int c, double value) |
Set a matrix value. More... | |
double | Get (int r, int c) const |
Get a matrix value. More... | |
Mat | inv () const |
Invert the pose (homogeneous matrix assumed) More... | |
bool | isHomogeneous () const |
Returns true if the matrix is homogeneous, otherwise it returns false. More... | |
bool | MakeHomogeneous () |
Forces 4x4 matrix to be homogeneous (vx,vy,vz must be unitary vectors and respect: vx x vy = vz). Returns True if the matrix was not homogeneous and it was be modified to make it homogeneous. More... | |
void | ToXYZRPW (tXYZWPR xyzwpr) const |
Calculates the equivalent position and euler angles ([x,y,z,r,p,w] vector) of the given pose Note: transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180) See also: FromXYZRPW() More... | |
QString | ToString (const QString &separator=", ", int precision=3, bool xyzwpr_only=false) const |
Retrieve a string representation of the pose. More... | |
bool | FromString (const QString &str) |
Set the matrix given a XYZRPW string array (6-values) More... | |
void | FromXYZRPW (tXYZWPR xyzwpr) |
Calculates the pose from the position and euler angles ([x,y,z,r,p,w] vector) The result is the same as: H = transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180) More... | |
const double * | ValuesD () const |
Get a pointer to the 16-digit double array. More... | |
const float * | ValuesF () const |
Get a pointer to the 16-digit array as an array of floats. More... | |
const double * | Values () const |
Get a pointer to the 16-digit array (doubles or floats if ROBODK_API_FLOATS is defined). More... | |
void | Values (double values[16]) const |
Copy the 16-values of the 4x4 matrix to a double array. More... | |
void | Values (float values[16]) const |
Copy the 16-values of the 4x4 matrix to a double array. More... | |
bool | Valid () const |
Check if the matrix is valid. More... | |
Static Public Member Functions | |
static Mat | XYZRPW_2_Mat (double x, double y, double z, double r, double p, double w) |
Calculates the pose from the position and euler angles ([x,y,z,r,p,w] vector) The result is the same as: H = transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180) More... | |
static Mat | XYZRPW_2_Mat (tXYZWPR xyzwpr) |
static Mat | transl (double x, double y, double z) |
Return a translation matrix. More... | |
static Mat | rotx (double rx) |
Return the X-axis rotation matrix. More... | |
static Mat | roty (double ry) |
Return a Y-axis rotation matrix More... | |
static Mat | rotz (double rz) |
Return a Z-axis rotation matrix. More... | |
Private Attributes | |
bool | _valid |
Flags if a matrix is not valid. More... | |
double | _ddata16 [16] |
Copy of the data as a double array. More... | |
The Mat class represents a 4x4 pose matrix. The main purpose of this object is to represent a pose in the 3D space (position and orientation). In other words, a pose is a 4x4 matrix that represents the position and orientation of one reference frame with respect to another one, in the 3D space. Poses are commonly used in robotics to place objects, reference frames and targets with respect to each other.
\( transl(x,y,z) rotx(r) roty(p) rotz(w) = \\ \begin{bmatrix} n_x & o_x & a_x & x \\ n_y & o_y & a_y & y \\ n_z & o_z & a_z & z \\ 0 & 0 & 0 & 1 \end{bmatrix} \).
Definition at line 506 of file robodk_api.h.
Mat | ( | ) |
Create the identity matrix.
Definition at line 189 of file robodk_api.cpp.
Mat | ( | bool | valid | ) |
Create a valid or an invalid matrix.
Definition at line 193 of file robodk_api.cpp.
Mat | ( | const QMatrix4x4 & | matrix | ) |
Create a copy of the matrix.
Definition at line 198 of file robodk_api.cpp.
Mat | ( | double | nx, |
double | ox, | ||
double | ax, | ||
double | tx, | ||
double | ny, | ||
double | oy, | ||
double | ay, | ||
double | ty, | ||
double | nz, | ||
double | oz, | ||
double | az, | ||
double | tz | ||
) |
Matrix class constructor for a 4x4 homogeneous matrix given N, O, A & T vectors
nx | Matrix[0,0] |
ox | Matrix[0,1] |
ax | Matrix[0,2] |
tx | Matrix[0,3] |
ny | Matrix[1,0] |
oy | Matrix[1,1] |
ay | Matrix[1,2] |
ty | Matrix[1,3] |
nz | Matrix[2,0] |
oz | Matrix[2,1] |
az | Matrix[2,2] |
tz | Matrix[2,3] |
Definition at line 207 of file robodk_api.cpp.
Mat | ( | const double | values[16] | ) |
Create a homogeneoux matrix given a one dimensional 16-value array (doubles)
values | [nx,ny,nz,0, ox,oy,oz,0, ax,ay,az,0, tx,ty,tz,1]
|
Definition at line 212 of file robodk_api.cpp.
Mat | ( | const float | values[16] | ) |
Create a homogeneoux matrix given a one dimensional 16-value array (floats)
values | [nx,ny,nz,0, ox,oy,oz,0, ax,ay,az,0, tx,ty,tz,1]
|
Definition at line 217 of file robodk_api.cpp.
~Mat | ( | ) |
Definition at line 225 of file robodk_api.cpp.
bool FromString | ( | const QString & | str | ) |
Set the matrix given a XYZRPW string array (6-values)
Definition at line 444 of file robodk_api.cpp.
void FromXYZRPW | ( | tXYZWPR | xyzwpr | ) |
Calculates the pose from the position and euler angles ([x,y,z,r,p,w] vector) The result is the same as:
H = transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180)
Definition at line 480 of file robodk_api.cpp.
double Get | ( | int | r, |
int | c | ||
) | const |
Get a matrix value.
r | row |
c | column |
Definition at line 302 of file robodk_api.cpp.
Mat inv | ( | ) | const |
Invert the pose (homogeneous matrix assumed)
Definition at line 309 of file robodk_api.cpp.
bool isHomogeneous | ( | ) | const |
Returns true if the matrix is homogeneous, otherwise it returns false.
Definition at line 313 of file robodk_api.cpp.
bool MakeHomogeneous | ( | ) |
Forces 4x4 matrix to be homogeneous (vx,vy,vz must be unitary vectors and respect: vx x vy = vz). Returns True if the matrix was not homogeneous and it was be modified to make it homogeneous.
Definition at line 354 of file robodk_api.cpp.
|
inline |
To String operator (use with qDebug() << tJoints;.
Definition at line 567 of file robodk_api.h.
void Pos | ( | tXYZ | xyz | ) | const |
Get the position (T position), in mm.
Definition at line 245 of file robodk_api.cpp.
|
static |
Return the X-axis rotation matrix.
rx | Rotation around X axis (in radians). |
Definition at line 534 of file robodk_api.cpp.
|
static |
Return a Y-axis rotation matrix
ry | Rotation around Y axis (in radians) |
Definition at line 540 of file robodk_api.cpp.
|
static |
Return a Z-axis rotation matrix.
rz | Rotation around Z axis (in radians) |
Definition at line 546 of file robodk_api.cpp.
void Set | ( | int | r, |
int | c, | ||
double | value | ||
) |
Set a matrix value.
r | row |
c | column |
value | value |
Definition at line 293 of file robodk_api.cpp.
void setPos | ( | double | x, |
double | y, | ||
double | z | ||
) |
Set the position (T position) in mm.
Definition at line 267 of file robodk_api.cpp.
void setPos | ( | double | xyz[3] | ) |
Set the position (T position) in mm.
Definition at line 287 of file robodk_api.cpp.
void setVX | ( | double | x, |
double | y, | ||
double | z | ||
) |
Set the X vector values (N vector)
Definition at line 250 of file robodk_api.cpp.
void setVX | ( | double | xyz[3] | ) |
Set the X vector values (N vector)
Definition at line 272 of file robodk_api.cpp.
void setVY | ( | double | x, |
double | y, | ||
double | z | ||
) |
Set the Y vector values (O vector)
Definition at line 255 of file robodk_api.cpp.
void setVY | ( | double | xyz[3] | ) |
Set the Y vector values (O vector)
Definition at line 277 of file robodk_api.cpp.
void setVZ | ( | double | x, |
double | y, | ||
double | z | ||
) |
Set the Z vector values (A vector)
Definition at line 261 of file robodk_api.cpp.
void setVZ | ( | double | xyz[3] | ) |
Set the Z vector values (A vector)
Definition at line 282 of file robodk_api.cpp.
QString ToString | ( | const QString & | separator = ", " , |
int | precision = 3 , |
||
bool | xyzwpr_only = false |
||
) | const |
Retrieve a string representation of the pose.
separator | String separator |
precision | Number of decimals |
xyzwpr_only | if set to true (default) the pose will be represented as XYZWPR 6-dimensional array using ToXYZRPW, if set to false, it will include information about the pose |
Definition at line 408 of file robodk_api.cpp.
void ToXYZRPW | ( | tXYZWPR | xyzwpr | ) | const |
Calculates the equivalent position and euler angles ([x,y,z,r,p,w] vector) of the given pose Note: transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180) See also: FromXYZRPW()
Definition at line 382 of file robodk_api.cpp.
|
static |
Return a translation matrix.
x | translation along X (mm) |
y | translation along Y (mm) |
z | translation along Z (mm) |
Definition at line 527 of file robodk_api.cpp.
bool Valid | ( | ) | const |
Check if the matrix is valid.
Definition at line 523 of file robodk_api.cpp.
const double * Values | ( | ) | const |
Get a pointer to the 16-digit array (doubles or floats if ROBODK_API_FLOATS is defined).
Definition at line 505 of file robodk_api.cpp.
void Values | ( | double | values[16] | ) | const |
Copy the 16-values of the 4x4 matrix to a double array.
Definition at line 513 of file robodk_api.cpp.
void Values | ( | float | values[16] | ) | const |
Copy the 16-values of the 4x4 matrix to a double array.
Definition at line 518 of file robodk_api.cpp.
const double * ValuesD | ( | ) | const |
Get a pointer to the 16-digit double array.
Definition at line 489 of file robodk_api.cpp.
const float * ValuesF | ( | ) | const |
Get a pointer to the 16-digit array as an array of floats.
Definition at line 496 of file robodk_api.cpp.
void VX | ( | tXYZ | xyz | ) | const |
Get the X vector (N vector)
Definition at line 230 of file robodk_api.cpp.
void VY | ( | tXYZ | xyz | ) | const |
Get the Y vector (O vector)
Definition at line 235 of file robodk_api.cpp.
void VZ | ( | tXYZ | xyz | ) | const |
Get the Z vector (A vector)
Definition at line 240 of file robodk_api.cpp.
|
static |
Calculates the pose from the position and euler angles ([x,y,z,r,p,w] vector) The result is the same as:
H = transl(x,y,z)*rotz(w*pi/180)*roty(p*pi/180)*rotx(r*pi/180)
Definition at line 464 of file robodk_api.cpp.
Definition at line 476 of file robodk_api.cpp.
|
private |
Copy of the data as a double array.
Definition at line 753 of file robodk_api.h.
|
private |
Flags if a matrix is not valid.
Definition at line 748 of file robodk_api.h.