Visual Servoing Platform  version 3.4.0
vpExponentialMap Class Reference

#include <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) = {^{c(t)}}{\bf M}_{c(t+\Delta t)} \]

where $ {^c}{\bf v}_c$ is the velocity skew vector applied during $\Delta t$ seconds at point $ c $ in frame $ c $, while $ {^{c(t)}}{\bf M}_{c(t+\Delta 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)}}{\bf M}_{c(t+\Delta t)}$ using ${^c}{\bf v}_c$ as input:

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

    where $ o $ is a reference frame. With direct(), the velocity skew vector $ {^c}{\bf v}_c $ 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 $ \bf {^c}{\bf v}_c $ from the displacement $ {^{c(t)}}{\bf M}_{c(t+\Delta 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 velocities $ \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 93 of file vpExponentialMap.h.

Member Function Documentation

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, and exponentialMap.cpp.

Definition at line 59 of file vpExponentialMap.cpp.

Referenced by vpPoseFeatures::computePose(), vpMbDepthDenseTracker::computeVVS(), vpMbDepthNormalTracker::computeVVS(), vpMbEdgeKltTracker::computeVVS(), vpMbKltTracker::computeVVS(), vpMbGenericTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), vpMbEdgeTracker::computeVVSFirstPhasePoseEstimation(), vpPose::poseVirtualVS(), vpPose::poseVirtualVSrobust(), vpRobotBebop2::setVelocity(), vpSimulatorCamera::setVelocity(), vpRobotCamera::setVelocity(), and vpMbGenericTracker::track().

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 79 of file vpExponentialMap.cpp.

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

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 202 of file vpExponentialMap.cpp.

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

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 221 of file vpExponentialMap.cpp.

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