Pivot point calibration. More...
#include <PivotCalibration.hpp>
Public Types | |
typedef T | value_type |
typedef super::Vector3T | Vector3T |
typedef super::Vector4T | Vector4T |
typedef super::VectorXT | VectorXT |
typedef super::Matrix3T | Matrix3T |
typedef super::Matrix4T | Matrix4T |
typedef super::MatrixXT | MatrixXT |
typedef super::Point | Point |
typedef super::DataType | DataType |
enum | Error { NOT_ENOUGH_INPUT_DATA, UNEQUAL_CARDINALITY_OF_INPUT_SETS, UNKNOWN_ERROR } |
Public Member Functions | |
size_t | getNumberItemsRequired () const |
Returns the minimum number of locations and rotations needed for the algorithm. | |
void | setLocations (Range< Vector3T > locations) |
void | setRotations (Range< Matrix3T > rotations) |
T | compute () |
Returns the RMSE. | |
T | getRMSE () const |
Returns the RMSE of the last computation. | |
const Vector3T & | getPivotPoint () const |
Returns the pivot point (or tool tip) in world coordinates. | |
const Vector3T & | getLocalPivotPoint () const |
Returns the pivot point (or tool tip) in local coordinates. |
Pivot point calibration.
T | scalar (floating point) type |
This class estimates the pivot point of a rigid body whose movement is constrained to rotate around a certain pivot point and whose movement is tracked via a localization system. Typical examples of application include the tool tip calibration or the hip center determination.
The calibration procedure to obtain a tool tip location is as follows: The tool tip is placed in a divot and the tool is moved around this pivot point while always touching the divot with its tip. The location as well as the rotation of the sensor system is saved for each sampling instance. Then this list is passed to one of the pivot calibration algorithms and the sought location/translation is computed.
Movement of a tool while recording data for the tool tip calibration.
Given a new measurement of the tracker (which comprises the position \( t_i \) and orientation \( R_i \) of the sensor in the global coordinate system) the pivot point the tool tip location in global coordinates can be easily computed as \( p_{global} = R_i p_{local} + t_i \).
If a tool touches the pivot point with its tip, the pivot point's location \( M \) in global coordinates is
\[ M = R_i t + t_i \]
where \( R_i \) is the rotation and \( t_i \) the location of the tool sensor in the world or tracking coordinate system. \( t \) is the sought location of the tool tip in the sensor's local coordinate system. Note, that \( t \) remains the same for all measurements. Now, using two different measurements, the pivot point M can be eliminated
\[ R_i t + t_i = R_j t + t_j \]
This can be rearranged to
\[ (R_i - R_j) t = (t_j - t_i) \]
Doing this for all combinations of all measurements yields an over-determined system of equations \( Ax = b \) (with \( x = t \)) which can be solved for the sought translation vector \( t \) via the method of least squares.
\[ \begin{pmatrix} R_1 & -R2 \\ R_1 & -R3 \\ R_1 & -R4 \\ \vdots & \vdots \\ R_n & -R_{n-1} \\ \end{pmatrix} t = \begin{pmatrix} t_2 & -t1 \\ t_3 & -t1 \\ t_4 & -t1 \\ \vdots & \vdots \\ t_{n-1} & -t_n \\ \end{pmatrix} \quad\quad \Leftrightarrow \quad\quad At = b \]
\[ t = (A^T A)^{-1} A^T B \quad\quad \text{(Moore-Penrose pseudoinverse)} \]
Note: Not all combinations are taken into account. For instance, the case \( i == j \) is omitted.
For some example code please be referred to PivotCalibration.
Definition at line 272 of file PivotCalibration.hpp.
Documentation generated by Doxygen