53 #include <visp3/core/vpHomogeneousMatrix.h>
54 #include <visp3/core/vpMath.h>
55 #include <visp3/io/vpParseArgv.h>
56 #include <visp3/robot/vpSimulatorCamera.h>
57 #include <visp3/visual_features/vpFeatureBuilder.h>
58 #include <visp3/visual_features/vpFeaturePoint.h>
59 #include <visp3/vs/vpServo.h>
62 #define GETOPTARGS "h"
64 void usage(
const char *name,
const char *badparam);
65 bool getOptions(
int argc,
const char **argv);
75 void usage(
const char *name,
const char *badparam)
78 Simulation of a 2D visual servoing on a point:\n\
79 - eye-in-hand control law,\n\
80 - articular velocity are computed,\n\
82 - only the X coordinate of the point is selected.\n\
95 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
108 bool getOptions(
int argc,
const char **argv)
116 usage(argv[0],
nullptr);
120 usage(argv[0], optarg_);
125 if ((c == 1) || (c == -1)) {
127 usage(argv[0],
nullptr);
128 std::cerr <<
"ERROR: " << std::endl;
129 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
136 int main(
int argc,
const char **argv)
138 #if (defined(VISP_HAVE_LAPACK) || defined(VISP_HAVE_EIGEN3) || defined(VISP_HAVE_OPENCV))
141 if (getOptions(argc, argv) ==
false) {
148 std::cout << std::endl;
149 std::cout <<
"-------------------------------------------------------" << std::endl;
150 std::cout <<
" Test program for vpServo " << std::endl;
151 std::cout <<
" Eye-in-hand task control, articular velocity are computed" << std::endl;
152 std::cout <<
" Simulation " << std::endl;
153 std::cout <<
" task : servo a point " << std::endl;
154 std::cout <<
"-------------------------------------------------------" << std::endl;
155 std::cout << std::endl;
164 robot.getPosition(wMc);
206 unsigned int iter = 0;
208 while (iter++ < 100) {
209 std::cout <<
"---------------------------------------------" << iter << std::endl;
218 robot.getPosition(wMc);
232 std::cout <<
"|| s - s* || = " << (task.
getError()).sumSquare() << std::endl;
239 std::cout <<
"Catch a ViSP exception: " << e << std::endl;
245 std::cout <<
"Cannot run this example: install Lapack, Eigen3 or OpenCV" << std::endl;
Implementation of column vector and the associated operations.
error that can be emitted by ViSP classes.
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class that defines a 2D point visual feature which is composed by two parameters that are the cartes...
void buildFrom(double x, double y, double Z)
static unsigned int selectX()
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix inverse() const
Implementation of a matrix and operations on matrices.
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
void get_eJe(vpMatrix &eJe) vp_override
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel) vp_override
void addFeature(vpBasicFeature &s_cur, vpBasicFeature &s_star, unsigned int select=vpBasicFeature::FEATURE_ALL)
void set_cVe(const vpVelocityTwistMatrix &cVe_)
void print(const vpServo::vpServoPrintType display_level=ALL, std::ostream &os=std::cout)
void set_eJe(const vpMatrix &eJe_)
void setServo(const vpServoType &servo_type)
vpColVector getError() const
vpColVector computeControlLaw()
Class that defines the simplest robot: a free flying camera.