Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpFeatureMomentCommon Class Reference

#include <vpFeatureMomentCommon.h>

Inheritance diagram for vpFeatureMomentCommon:

Public Member Functions

 vpFeatureMomentCommon (vpMomentDatabase &moments, double A=0.0, double B=0.0, double C=1.0)
void updateAll (double A, double B, double C)
vpFeatureMomentAlphagetFeatureAlpha ()
vpFeatureMomentAreaNormalizedgetFeatureAn ()
vpFeatureMomentBasicgetFeatureMomentBasic ()
vpFeatureMomentCenteredgetFeatureCentered ()
vpFeatureMomentCInvariantgetFeatureCInvariant ()
vpFeatureMomentGravityCenterNormalizedgetFeatureGravityNormalized ()
vpFeatureMomentAreagetFeatureArea ()
vpFeatureMomentGravityCentergetFeatureGravityCenter ()
vpFeatureMomentget (const std::string &feature_name, bool &found)

Detailed Description

This class allows to access common vpFeatureMoments in a pre-filled database.

It is a vpMomentDatabase filled with the following moments:

There is no need to do the linkTo operations manually nor is it necessary to care about the order of feature computation.

This class has an vpMomentCommon::updateAll method capable of updating the plane parameters AND computing interaction matrices inside the features.

The moment features computed by this class are classical moments features used in moment-based visual servoing. For more information see [54].

To initialize this feature set, the user needs to supply a vpMomentDatabase containing at least the contents of vpMomentCommon.

The features can be retrieved like from a normal vpFeatureMomentDatabase. However, some shortcuts to retrieve the features are provided.

Attention
Make sure your object is at least of order 6 when using this pre-filled database.

The following code demonstrates the construction of a 6x6 interaction matrix as described in [1].

#include <iostream>
#include <vector>
#include <visp3/core/vpMomentCommon.h>
#include <visp3/core/vpMomentObject.h>
#include <visp3/core/vpPoint.h>
#include <visp3/visual_features/vpFeatureMoment.h>
#include <visp3/visual_features/vpFeatureMomentCommon.h>
#include <visp3/vs/vpServo.h>
#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif
int main()
{
// Define source polygon
std::vector<vpPoint> vec_p; // vector that contains the vertices of the contour polygon
p.set_x(-0.2); p.set_y(0.1); // coordinates in meters in the image plane (vertex 1)
vec_p.push_back(p);
p.set_x(+0.3); p.set_y(0.1); // coordinates in meters in the image plane (vertex 2)
vec_p.push_back(p);
p.set_x(+0.2); p.set_y(-0.1); // coordinates in meters in the image plane (vertex 3)
vec_p.push_back(p);
p.set_x(-0.2); p.set_y(-0.15); // coordinates in meters in the image plane (vertex 4)
vec_p.push_back(p);
p.set_x(-0.2); p.set_y(0.1); // close the contour (vertex 5 = vertex 1)
vec_p.push_back(p);
vpMomentObject src(6); // Create a source moment object with 6 as maximum order
src.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a contour polygon
src.fromVector(vec_p); // Init the dense object with the source polygon
vec_p.clear();
//Define destination polygon. This is the source polygon translated
//of 0.1 on x-axis
p.set_x(-0.1); p.set_y(0.1); // coordinates in meters in the image plane (vertex 1)
vec_p.push_back(p);
p.set_x(+0.4); p.set_y(0.1); // coordinates in meters in the image plane (vertex 2)
vec_p.push_back(p);
p.set_x(+0.3); p.set_y(-0.1); // coordinates in meters in the image plane (vertex 3)
vec_p.push_back(p);
p.set_x(-0.1); p.set_y(-0.15); // coordinates in meters in the image plane (vertex 4)
vec_p.push_back(p);
p.set_x(-0.1); p.set_y(0.1); // close the contour (vertex 5 = vertex 1)
vec_p.push_back(p);
vpMomentObject dst(6); // Create a destination moment object with 6 as maximum order
dst.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a contour polygon
dst.fromVector(vec_p); // Init the dense object with the destination
// polygon
//init classic moment primitives (for source)
//Init classic features
vpFeatureMomentCommon fmdb_src(mdb_src);
//Init classic features
vpFeatureMomentCommon fmdb_dst(mdb_dst);
//update+compute moment primitives from object (for source)
mdb_src.updateAll(src);
//update+compute features (+interaction matrices) from plane
fmdb_src.updateAll(0.,0.,1.);
//update+compute moment primitives from object (for destination)
mdb_dst.updateAll(dst);
//update+compute features (+interaction matrices) from plane
fmdb_dst.updateAll(0.,0.,1.);
//define visual servoing task
vpServo task;
task.setServo(vpServo::EYEINHAND_CAMERA);
task.setInteractionMatrixType(vpServo::CURRENT);
//Add all classic features to the task
//In this example, source and destination features are translated by 0.1
//will produce a movement of 0.1 on x-axis.
task.addFeature(fmdb_src.getFeatureGravityNormalized(),fmdb_dst.getFeatureGravityNormalized());
task.addFeature(fmdb_src.getFeatureAn(),fmdb_dst.getFeatureAn());
//the object is NOT symmetric
//select C4 and C6
task.addFeature(fmdb_src.getFeatureCInvariant(),fmdb_dst.getFeatureCInvariant(),(1 << 3) | (1 << 5));
task.addFeature(fmdb_src.getFeatureAlpha(),fmdb_dst.getFeatureAlpha());
task.setLambda(1) ;
vpColVector v = task.computeControlLaw() ;
task.print();
return 0;
}
Implementation of column vector and the associated operations.
vpFeatureMomentCommon(vpMomentDatabase &moments, double A=0.0, double B=0.0, double C=1.0)
This class initializes and allows access to commonly used moments.
static std::vector< double > getMu3(vpMomentObject &object)
static double getAlpha(vpMomentObject &object)
static double getSurface(vpMomentObject &object)
Class for generic objects.
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Definition vpPoint.h:79
@ EYEINHAND_CAMERA
Definition vpServo.h:176
@ CURRENT
Definition vpServo.h:217

This code produces the following output:

Visual servoing task:
Type of control law
Eye-in-hand configuration
Control in the camera frame
List of visual features : s
0.0166667,-0.00833333,
1,
-0.312148,0.0249916,
-1.43449,
List of desired visual features : s*
0.116667,-0.00833333,
1,
-0.312148,0.0249916,
-1.43449,
Interaction Matrix Ls
-1 0 -6.938893904e-18 0.007291666667 -1.06875 -0.008333333333
0 -1 3.469446952e-18 1.0171875 -0.007291666667 -0.01666666667
0 0 -1 0.0125 0.025 0
0 0 -4.585529113e-15 -0.2983860943 0.5832596643 -4.376751552e-16
0 0 -3.58244462e-15 0.08633028234 -0.2484618767 3.63421192e-16
4.353086256e-17 -1.339411156e-16 -0 -0.03019436997 -0.0168230563 -1
Error vector (s-s*)
-0.1 0 0 1.831867991e-15 -1.072059108e-15 0
Gain : Zero= 1 Inf= 1 Deriv= 0
Examples
manServoMomentsSimple.cpp, and testFeatureMoment.cpp.

Definition at line 222 of file vpFeatureMomentCommon.h.

Constructor & Destructor Documentation

◆ vpFeatureMomentCommon()

BEGIN_VISP_NAMESPACE vpFeatureMomentCommon::vpFeatureMomentCommon ( vpMomentDatabase & moments,
double A = 0.0,
double B = 0.0,
double C = 1.0 )

Constructor which initializes and links all common features in the database

Parameters
moments: database for moment primitives
A: first plane coefficient for a plane equation of the following type Ax+By+C=1/Z
B: second plane coefficient for a plane equation of the following type Ax+By+C=1/Z
C: third plane coefficient for a plane equation of the following type Ax+By+C=1/Z

Definition at line 46 of file vpFeatureMomentCommon.cpp.

Member Function Documentation

◆ get()

vpFeatureMoment & vpFeatureMomentDatabase::get ( const std::string & feature_name,
bool & found )
inherited

Retrieves a moment feature from the database

Parameters
feature_name: The name of the feature, the one specified when using add
found: true if the type string is found inside the database, false otherwise
Returns
the moment feature corresponding to the type string

Definition at line 60 of file vpFeatureMomentDatabase.cpp.

References vpFeatureMoment.

◆ getFeatureAlpha()

vpFeatureMomentAlpha & vpFeatureMomentCommon::getFeatureAlpha ( )
inline

Returns alpha.

Definition at line 240 of file vpFeatureMomentCommon.h.

◆ getFeatureAn()

vpFeatureMomentAreaNormalized & vpFeatureMomentCommon::getFeatureAn ( )
inline

Returns normalized surface.

Definition at line 245 of file vpFeatureMomentCommon.h.

◆ getFeatureArea()

vpFeatureMomentArea & vpFeatureMomentCommon::getFeatureArea ( )
inline

Returns the area.

Definition at line 268 of file vpFeatureMomentCommon.h.

◆ getFeatureCentered()

vpFeatureMomentCentered & vpFeatureMomentCommon::getFeatureCentered ( )
inline

Returns centered moments.

Definition at line 253 of file vpFeatureMomentCommon.h.

◆ getFeatureCInvariant()

vpFeatureMomentCInvariant & vpFeatureMomentCommon::getFeatureCInvariant ( )
inline

Returns non-symmetric invariants.

Definition at line 258 of file vpFeatureMomentCommon.h.

◆ getFeatureGravityCenter()

vpFeatureMomentGravityCenter & vpFeatureMomentCommon::getFeatureGravityCenter ( )
inline

Returns gravity center.

Definition at line 273 of file vpFeatureMomentCommon.h.

◆ getFeatureGravityNormalized()

vpFeatureMomentGravityCenterNormalized & vpFeatureMomentCommon::getFeatureGravityNormalized ( )
inline

Returns normalized gravity center.

Definition at line 263 of file vpFeatureMomentCommon.h.

◆ getFeatureMomentBasic()

vpFeatureMomentBasic & vpFeatureMomentCommon::getFeatureMomentBasic ( )
inline

Returns basic moment.

Definition at line 249 of file vpFeatureMomentCommon.h.

◆ updateAll()

void vpFeatureMomentCommon::updateAll ( double A,
double B,
double C )
virtual

Update all moment features in the database with plane coefficients

Parameters
A: first plane coefficient for a plane equation of the following type Ax+By+C=1/Z
B: second plane coefficient for a plane equation of the following type Ax+By+C=1/Z
C: third plane coefficient for a plane equation of the following type Ax+By+C=1/Z

Reimplemented from vpFeatureMomentDatabase.

Definition at line 68 of file vpFeatureMomentCommon.cpp.