Visual Servoing Platform  version 3.2.0 under development (2018-08-20)
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 is the relationship between the velocity of a moving body and its pose. The exponential map transforms exponentially the velocity skew vector $ \bf v $ applied during a given time $\Delta t$ to its corresponding pose. The exponential map is usually written using homogeneous matrices as:

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

where ${\bf M}_{t}$ is a pose before applied velocity and ${\bf M}_{t+1}$ the result.

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

  • The direct exponential map allows to determine the displacement $ \exp^{({\bf v}, \Delta t)} $ from a velocity vector skew $ \bf v $ applied during a sampling time $\Delta t$. With direct() the sampling time is set to 1 second. 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 a velocity skew vector $ \bf v $ from a displacement 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 $.

The displacement is represented as an homogeneous matrix implemented in vpHomogeneousMatrix. Velocities $ \bf v $ are represented as a velocity skew 6 dimension 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 91 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:
calibrateTsai.cpp, and exponentialMap.cpp.

Definition at line 59 of file vpExponentialMap.cpp.

Referenced by vpCalibration::calibrationTsai(), vpPoseFeatures::computePose(), vpMbDepthDenseTracker::computeVVS(), vpMbDepthNormalTracker::computeVVS(), vpMbKltMultiTracker::computeVVS(), vpMbEdgeKltTracker::computeVVS(), vpMbEdgeMultiTracker::computeVVS(), vpMbEdgeKltMultiTracker::computeVVS(), vpMbGenericTracker::computeVVS(), vpMbKltTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), vpMbEdgeMultiTracker::computeVVSFirstPhasePoseEstimation(), vpMbEdgeTracker::computeVVSFirstPhasePoseEstimation(), vpPose::poseVirtualVS(), vpPose::poseVirtualVSrobust(), 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},\Delta t)} $ 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(), vpHomogeneousMatrix::insert(), vpMath::mcosc(), vpMath::msinc(), and vpMath::sinc().

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

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