FeatureMomentCommon¶
- class FeatureMomentCommon(self, moments: visp._visp.core.MomentDatabase, A: float = 0.0, B: float = 0.0, C: float = 1.0)¶
Bases:
FeatureMomentDatabase
This class allows to access common vpFeatureMoments in a pre-filled database.
It is a vpMomentDatabase filled with the following moments:
vpFeatureMomentGravityCenter
vpFeatureMomentGravityCenterNormalized
vpFeatureMomentAreaNormalized
vpFeatureMomentCInvariant
vpFeatureMomentAlpha
vpFeatureMomentCentered
vpFeatureMomentBasic
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 [42] .
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.
Warning
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 vpPoint p; 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) vpMomentCommon mdb_src(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst),1.); //Init classic features vpFeatureMomentCommon fmdb_src(mdb_src); ////init classic moment primitives (for destination) vpMomentCommon mdb_dst(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst),1.); //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; }
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
Constructor which initializes and links all common features in the database
- Parameters:
- moments: visp._visp.core.MomentDatabase¶
database for moment primitives
- A: float = 0.0¶
first plane coefficient for a plane equation of the following type Ax+By+C=1/Z
- B: float = 0.0¶
second plane coefficient for a plane equation of the following type Ax+By+C=1/Z
- C: float = 1.0¶
third plane coefficient for a plane equation of the following type Ax+By+C=1/Z
Methods
Constructor which initializes and links all common features in the database
Returns alpha.
Returns normalized surface.
Returns the area.
Returns non-symmetric invariants.
Returns centered moments.
Returns gravity center.
Returns normalized gravity center.
Returns basic moment.
Overloaded function.
Inherited Methods
- param feature_name:
The name of the feature, the one specified when using add
Operators
__doc__
Constructor which initializes and links all common features in the database
__module__
Attributes
__annotations__
- __init__(self, moments: visp._visp.core.MomentDatabase, A: float = 0.0, B: float = 0.0, C: float = 1.0)¶
Constructor which initializes and links all common features in the database
- Parameters:
- moments: visp._visp.core.MomentDatabase¶
database for moment primitives
- A: float = 0.0¶
first plane coefficient for a plane equation of the following type Ax+By+C=1/Z
- B: float = 0.0¶
second plane coefficient for a plane equation of the following type Ax+By+C=1/Z
- C: float = 1.0¶
third plane coefficient for a plane equation of the following type Ax+By+C=1/Z
- get(self, feature_name: str, found: bool) tuple[visp._visp.visual_features.FeatureMoment, bool] ¶
- Parameters:
- Returns:
A tuple containing:
the moment feature corresponding to the type string
found: true if the type string is found inside the database, false otherwise
- getFeatureAlpha(self) visp._visp.visual_features.FeatureMomentAlpha ¶
Returns alpha.
- getFeatureAn(self) visp._visp.visual_features.FeatureMomentAreaNormalized ¶
Returns normalized surface.
- getFeatureArea(self) visp._visp.visual_features.FeatureMomentArea ¶
Returns the area.
- getFeatureCInvariant(self) visp._visp.visual_features.FeatureMomentCInvariant ¶
Returns non-symmetric invariants.
- getFeatureCentered(self) visp._visp.visual_features.FeatureMomentCentered ¶
Returns centered moments.
- getFeatureGravityCenter(self) visp._visp.visual_features.FeatureMomentGravityCenter ¶
Returns gravity center.
- getFeatureGravityNormalized(self) visp._visp.visual_features.FeatureMomentGravityCenterNormalized ¶
Returns normalized gravity center.
- getFeatureMomentBasic(self) visp._visp.visual_features.FeatureMomentBasic ¶
Returns basic moment.
- updateAll(*args, **kwargs)¶
Overloaded function.
updateAll(self: visp._visp.visual_features.FeatureMomentCommon, A: float, B: float, C: float) -> None
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
updateAll(self: visp._visp.visual_features.FeatureMomentDatabase, A: float = 0.0, B: float = 0.0, C: float = 1.0) -> None
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