60 #include <visp/vpConfig.h>
61 #include <visp/vpFeatureBuilder.h>
62 #include <visp/vpFeaturePoint.h>
63 #include <visp/vpHomogeneousMatrix.h>
64 #include <visp/vpMath.h>
65 #include <visp/vpParseArgv.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 2D visual servoing:\n\
84 - servo on 4 points,\n\
85 - eye-in-hand control law,\n\
86 - articular velocity are computed,\n\
99 fprintf(stderr,
"ERROR: \n" );
100 fprintf(stderr,
"\nBad parameter [%s]\n", badparam);
114 bool getOptions(
int argc,
const char **argv)
121 case 'h': usage(argv[0], NULL);
return false;
break;
124 usage(argv[0], optarg);
129 if ((c == 1) || (c == -1)) {
131 usage(argv[0], NULL);
132 std::cerr <<
"ERROR: " << std::endl;
133 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
141 main(
int argc,
const char ** argv)
144 if (getOptions(argc, argv) ==
false) {
153 std::cout << std::endl ;
154 std::cout <<
"-------------------------------------------------------" << std::endl ;
155 std::cout <<
" Test program for vpServo " <<std::endl ;
156 std::cout <<
" Eye-in-hand task control, articular velocity are computed" << std::endl ;
157 std::cout <<
" Simulation " << std::endl ;
158 std::cout <<
" task : servo 4 points " << std::endl ;
159 std::cout <<
"-------------------------------------------------------" << std::endl ;
160 std::cout << std::endl ;
181 for (i = 0 ; i < 4 ; i++)
182 point[i].track(cMo) ;
186 for (i = 0 ; i < 4 ; i++)
214 for (i = 0 ; i < 4 ; i++)
223 unsigned int iter=0 ;
227 std::cout <<
"---------------------------------------------" << iter <<std::endl ;
241 for (i = 0 ; i < 4 ; i++)
243 point[i].
track(cMo) ;
259 std::cout <<
"|| s - s* || = " << ( task.
getError() ).sumSquare() << 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...
void set_cVe(vpVelocityTwistMatrix &_cVe)
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 set_eJe(vpMatrix &_eJe)
void getPosition(vpHomogeneousMatrix &wMc) const
Class that consider the particular case of twist transformation matrix that allows to transform a vel...
void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType, const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE)
Set the type of the interaction matrix (current, mean, desired, user).
void buildFrom(const double x, const double y, const double Z)
Class that provides a data structure for the column vectors as well as a set of operations on these v...
vpHomogeneousMatrix inverse() const
void print(const vpServo::vpServoPrintType display_level=ALL, std::ostream &os=std::cout)
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class required to compute the visual servoing control law descbribed in and .
void get_eJe(vpMatrix &eJe)
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...