58 #include <visp/vpFeatureBuilder.h>
59 #include <visp/vpFeaturePoint.h>
60 #include <visp/vpFeatureThetaU.h>
61 #include <visp/vpGenericFeature.h>
62 #include <visp/vpHomogeneousMatrix.h>
63 #include <visp/vpMath.h>
64 #include <visp/vpParseArgv.h>
65 #include <visp/vpPoint.h>
66 #include <visp/vpServo.h>
67 #include <visp/vpSimulatorCamera.h>
70 #define GETOPTARGS "h"
80 void usage(
const char *name,
const char *badparam)
83 Simulation of a 2 1/2 D visual servoing (x,y,log Z, theta U):\n\
84 - eye-in-hand control law,\n\
85 - velocity computed in the camera frame,\n\
98 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
110 bool getOptions(
int argc,
const char **argv)
117 case 'h': usage(argv[0], NULL);
return false;
break;
120 usage(argv[0], optarg);
125 if ((c == 1) || (c == -1)) {
127 usage(argv[0], NULL);
128 std::cerr <<
"ERROR: " << std::endl;
129 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
137 main(
int argc,
const char ** argv)
140 if (getOptions(argc, argv) ==
false) {
144 std::cout << std::endl ;
145 std::cout <<
"-------------------------------------------------------" << std::endl ;
146 std::cout <<
" simulation of a 2 1/2 D visual servoing " << std::endl ;
147 std::cout <<
"-------------------------------------------------------" << std::endl ;
148 std::cout << std::endl ;
258 logZ.set_s(log(point.
get_Z()/pointd.
get_Z())) ;
311 unsigned int iter=0 ;
315 std::cout <<
"---------------------------------------------" << iter <<std::endl ;
332 logZ.set_s(log(point.
get_Z()/pointd.
get_Z())) ;
334 LlogZ[0][0] = LlogZ[0][1] = LlogZ[0][5] = 0 ;
335 LlogZ[0][2] = -1/p.
get_Z() ;
336 LlogZ[0][3] = -p.
get_y() ;
337 LlogZ[0][4] = p.
get_x() ;
339 logZ.setInteractionMatrix(LlogZ) ;
347 std::cout <<
"|| s - s* || = " << ( task.
getError() ).sumSquare() <<std::endl ;
354 std::cout << cMo << std::endl ;
Definition of the vpMatrix class.
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel)
The class provides a data structure for the homogeneous matrices as well as a set of operations on th...
Class that defines the simplest robot: a free flying camera.
void addFeature(vpBasicFeature &s, vpBasicFeature &s_star, const unsigned int select=vpBasicFeature::FEATURE_ALL)
create a new ste of two visual features
void setLambda(double _lambda)
set the gain lambda
void track(const vpHomogeneousMatrix &cMo)
Class that defines a 2D point visual feature which is composed by two parameters that are the cartes...
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
Class that defines what is a point.
void kill()
destruction (memory deallocation if required)
vpColVector getError() const
vpColVector computeControlLaw()
compute the desired control law
void getPosition(vpHomogeneousMatrix &wMc) const
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
Construction from translation vector and rotation matrix.
void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType, const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE)
Set the type of the interaction matrix (current, mean, desired, user).
static double rad(double deg)
double get_Z() const
Get the point Z coordinate in the camera frame.
Class that provides a data structure for the column vectors as well as a set of operations on these v...
The pose is a complete representation of every rigid motion in the euclidian space.
vpHomogeneousMatrix inverse() const
Class that defines a 3D visual feature from a axis/angle parametrization that represent the rotatio...
void print(const vpServo::vpServoPrintType display_level=ALL, std::ostream &os=std::cout)
Class that enables to define a feature or a set of features which are not implemented in ViSP as a sp...
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class required to compute the visual servoing control law descbribed in and .
void setServo(vpServoType _servo_type)
Choice of the visual servoing control law.
void setWorldCoordinates(const double ox, const double oy, const double oz)
Set the point world coordinates. We mean here the coordinates of the point in the object frame...