43 #include <visp3/vision/vpPose.h>
44 #include <visp3/core/vpPoint.h>
45 #include <visp3/core/vpExponentialMap.h>
46 #include <visp3/core/vpRobust.h>
61 double residu_1 = 1e8 ;
68 unsigned int nb = (
unsigned int)
listP.size() ;
75 std::list<vpPoint> lP ;
79 for (std::list<vpPoint>::const_iterator it =
listP.begin(); it !=
listP.end(); ++it)
83 sd[2*k+1] = P.
get_y() ;
89 while((
int)((residu_1 - r)*1e12) !=0)
95 for (std::list<vpPoint>::const_iterator it = lP.begin(); it != lP.end(); ++it)
103 double x = s[2*k] = P.
get_x();
104 double y = s[2*k+1] = P.
get_y();
105 double Z = P.
get_Z() ;
110 L[2*k][4] = -(1+x*x) ;
116 L[2*k+1][3] = 1+y*y ;
139 if (iter++>vvsIterMax) break ;
142 if(computeCovariance)
165 double residu_1 = 1e8 ;
174 unsigned int nb = (
unsigned int)
listP.size() ;
182 std::list<vpPoint> lP ;
186 for (std::list<vpPoint>::const_iterator it =
listP.begin(); it !=
listP.end(); ++it)
189 sd[2*k_] = P.
get_x() ;
190 sd[2*k_+1] = P.
get_y() ;
200 while((
int)((residu_1 - r)*1e12) !=0)
206 for (std::list<vpPoint>::const_iterator it = lP.begin(); it != lP.end(); ++it)
214 double x = s[2*k_] = P.
get_x();
215 double y = s[2*k_+1] = P.
get_y();
216 double Z = P.
get_Z() ;
221 L[2*k_][4] = -(1+x*x) ;
225 L[2*k_+1][1] = -1/Z ;
227 L[2*k_+1][3] = 1+y*y ;
228 L[2*k_+1][4] = -x*y ;
239 for(
unsigned int k=0 ; k <error.
getRows()/2 ; k++)
247 for (
unsigned int k=0 ; k < error.
getRows()/2 ; k++)
250 W[2*k+1][2*k+1] = w[k] ;
254 (W*L).pseudoInverse(Lp,1e-6) ;
260 if (iter++>vvsIterMax) break ;
263 if(computeCovariance)
Implementation of a matrix and operations on matrices.
static vpMatrix computeCovarianceMatrixVVS(const vpHomogeneousMatrix &cMo, const vpColVector &deltaS, const vpMatrix &Ls, const vpMatrix &W)
void MEstimator(const vpRobustEstimatorType method, const vpColVector &residues, vpColVector &weights)
Compute the weights according a residue vector and a PsiFunction.
void poseVirtualVSrobust(vpHomogeneousMatrix &cMo)
compute the pose using a robust virtual visual servoing approach
void resize(const unsigned int nrows, const unsigned int ncols, const bool flagNullify=true)
Implementation of an homogeneous matrix and operations on such kind of matrices.
void track(const vpHomogeneousMatrix &cMo)
double get_y() const
Get the point y coordinate in the image plane.
std::list< vpPoint > listP
array of point (use here class vpPoint)
static vpMatrix computeCovarianceMatrix(const vpMatrix &A, const vpColVector &x, const vpColVector &b)
void poseVirtualVS(vpHomogeneousMatrix &cMo)
compute the pose using virtual visual servoing approach
Class that defines what is a point.
double lambda
parameters use for the virtual visual servoing approach
static double sqr(double x)
double get_x() const
Get the point x coordinate in the image plane.
unsigned int getRows() const
Return the number of rows of the 2D array.
double get_Z() const
Get the point Z coordinate in the camera frame.
Implementation of column vector and the associated operations.
vpHomogeneousMatrix inverse() const
static vpHomogeneousMatrix direct(const vpColVector &v)
Contains an M-Estimator and various influence function.
vpMatrix pseudoInverse(double svThreshold=1e-6) const
Compute the pseudo inverse of the matrix using the SVD.
void setThreshold(const double noise_threshold)
void setIteration(const unsigned int iter)
Set iteration.
void resize(const unsigned int i, const bool flagNullify=true)