Visual Servoing Platform  version 3.6.1 under development (2024-11-15)
vpExponentialMap Class Reference

#include <visp3/core/vpExponentialMap.h>

Static Public Member Functions

static vpHomogeneousMatrix direct (const vpColVector &v)
 
static vpHomogeneousMatrix direct (const vpColVector &v, const double &delta_t)
 
static vpColVector inverse (const vpHomogeneousMatrix &M)
 
static vpColVector inverse (const vpHomogeneousMatrix &M, const double &delta_t)
 

Detailed Description

Direct or inverse exponential map computation.

The exponential map gives the relationship between the velocity of a moving body and its displacement:

\[ \exp({^c}{\bf v}_c(t - \Delta t)) = {^{c(t - \Delta t)}}{\bf M}_{c(t)} \]

where $ {^c}{\bf v}_c(t - \Delta t)$ is the velocity skew vector at the previous iteration applied during $\Delta t$ seconds at point $ c $ in frame $ c $, while $ {^{c(t- \Delta t)}}{\bf M}_{c(t)} $ is the corresponding displacement.

This class allows to compute the direct or the inverse exponential map.

  • The direct exponential map allows to compute the displacement ${^{c(t - \Delta t)}}{\bf M}_{c(t)}$ using ${^c}{\bf v}_c(t - \Delta t)$ as input:

    \[ {^{o}}{\bf M}_{c(t)} = {^{o}}{\bf M}_{c(t - \Delta t)} \exp({^c}{\bf v}_c(t - \Delta t)) \]

    where $ o $ is a reference frame. With direct(), the velocity skew vector $ {^c}{\bf v}_c(t - \Delta t) $ is applied during 1 second considering $ \Delta t = 1$. With direct(const vpColVector &, const double &) the sampling time can be set to an other value where the second argument is $ \Delta t $.
  • The inverse exponential map allows to compute the velocity skew vector $ {^c}{\bf v}_c(t - \Delta t) $ from the displacement $ {^{c(t - \Delta t)}}{\bf M}_{c(t)}$ measured during a time interval $ \Delta t $. With inverse() the time interval also called sampling time is set to 1 second. With inverse(const vpHomogeneousMatrix &, const double &) the sampling time can be set to an other value where the second argument is $ \Delta t $.

A displacement $ \bf M $ is represented as an homogeneous matrix implemented in vpHomogeneousMatrix. A velocity $ \bf v $ is represented as a 6 dimension velocity skew vector $ [v, \omega] $, where $ v $ is a velocity translation vector with values in m/s and $ \omega $ a velocity rotation vector with values expressed in rad/s.

Definition at line 89 of file vpExponentialMap.h.

Member Function Documentation

◆ direct() [1/2]

BEGIN_VISP_NAMESPACE vpHomogeneousMatrix vpExponentialMap::direct ( const vpColVector v)
static

Compute the exponential map. The inverse function is inverse(). The sampling time is here set to 1 second. To use an other value you should use direct(const vpColVector &, const double &).

Parameters
v: Instantaneous velocity skew represented by a 6 dimension vector $ {\bf v} = [v, \omega] $ where $ v $ is a translation velocity vector and $ \omega $ is a rotation velocity vector.
Returns
An homogeneous matrix $ \bf M $ computed from an instantaneous velocity $ \bf v $, where ${\bf M} = \exp{({\bf v})} $ is the displacement of the object when the velocity $ \bf v $ is applied during 1 second.
See also
inverse(const vpHomogeneousMatrix &)
Examples
calibrate-hand-eye.cpp, exponentialMap.cpp, and tutorial-panda3d-renderer.cpp.

Definition at line 54 of file vpExponentialMap.cpp.

Referenced by vpMbDepthDenseTracker::computeVVS(), vpMbDepthNormalTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), vpMbGenericTracker::computeVVS(), vpMbEdgeTracker::computeVVSFirstPhasePoseEstimation(), vpPose::poseVirtualVS(), vpPose::poseVirtualVSrobust(), vpRobotBebop2::setVelocity(), and vpSimulatorCamera::setVelocity().

◆ direct() [2/2]

vpHomogeneousMatrix vpExponentialMap::direct ( const vpColVector v,
const double &  delta_t 
)
static

Compute the exponential map. The inverse function is inverse().

Parameters
v: Instantaneous velocity skew represented by a 6 dimension vector $ {\bf v} = [v, \omega] $ where $ v $ is a translation velocity vector and $ \omega $ is a rotation velocity vector.
delta_t: Sampling time $ \Delta t $. Time during which the velocity $ \bf v $ is applied.
Returns
An homogeneous matrix $ \bf M $ computed from an instantaneous velocity $ \bf v $, where ${\bf M} = \exp{({\bf v})} $ is the displacement of the object when the velocity $ \bf v $ is applied during $\Delta t$ seconds.
See also
inverse(const vpHomogeneousMatrix &, const double &)

Definition at line 74 of file vpExponentialMap.cpp.

References vpRotationMatrix::buildFrom(), vpException::dimensionError, vpHomogeneousMatrix::insert(), vpMath::mcosc(), vpMath::msinc(), vpMath::sinc(), and vpArray2D< Type >::size().

◆ inverse() [1/2]

vpColVector vpExponentialMap::inverse ( const vpHomogeneousMatrix M)
static

Computes an instantaneous velocity skew from an homogeneous matrix. The inverse function is the exponential map, see direct().

Parameters
M: An homogeneous matrix corresponding to the displacement of an object during 1 second.
Returns
Instantaneous velocity skew $ \bf v $ represented by a 6 dimension vector $ [v, \omega] $ where $ v $ is a translation velocity vector and $ \omega $ is a rotation velocity vector.
See also
direct(const vpColVector &)
Examples
exponentialMap.cpp.

Definition at line 141 of file vpExponentialMap.cpp.

Referenced by vpRobotBiclops::getDisplacement(), vpRobotAfma4::getVelocity(), vpRobotAfma6::getVelocity(), vpRobotViper650::getVelocity(), and vpRobotViper850::getVelocity().

◆ inverse() [2/2]

vpColVector vpExponentialMap::inverse ( const vpHomogeneousMatrix M,
const double &  delta_t 
)
static

Compute an instantaneous velocity from an homogeneous matrix. The inverse function is the exponential map, see direct().

Parameters
M: An homogeneous matrix corresponding to the displacement of an object during $\Delta t$ seconds.
delta_t: Sampling time $ \Delta t $. Time during which the displacement is applied.
Returns
Instantaneous velocity skew $ \bf v $ represented by a 6 dimension vector $ [v, \omega] $ where $ v $ is a translation velocity vector and $ \omega $ is a rotation velocity vector.
See also
direct(const vpColVector &, const double &)

Definition at line 160 of file vpExponentialMap.cpp.

References vpThetaUVector::buildFrom(), vpHomogeneousMatrix::extract(), vpMath::mcosc(), vpMath::msinc(), and vpMath::sinc().