 |
Visual Servoing Platform
version 3.3.0
|
50 #include <visp3/core/vpConfig.h>
51 #include <visp3/core/vpDebug.h>
53 #if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GTK) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
58 #include <visp3/core/vpCameraParameters.h>
59 #include <visp3/core/vpCircle.h>
60 #include <visp3/core/vpHomogeneousMatrix.h>
61 #include <visp3/core/vpImage.h>
62 #include <visp3/core/vpMath.h>
63 #include <visp3/gui/vpDisplayGDI.h>
64 #include <visp3/gui/vpDisplayGTK.h>
65 #include <visp3/gui/vpDisplayOpenCV.h>
66 #include <visp3/gui/vpDisplayX.h>
67 #include <visp3/io/vpParseArgv.h>
68 #include <visp3/robot/vpSimulatorCamera.h>
69 #include <visp3/visual_features/vpFeatureBuilder.h>
70 #include <visp3/visual_features/vpFeatureLine.h>
71 #include <visp3/vs/vpServo.h>
72 #include <visp3/vs/vpServoDisplay.h>
75 #define GETOPTARGS "cdh"
77 void usage(
const char *name,
const char *badparam);
78 bool getOptions(
int argc,
const char **argv,
bool &click_allowed,
bool &display);
88 void usage(
const char *name,
const char *badparam)
91 Simulation of a 2D visual servoing on a circle:\n\
92 - eye-in-hand control law,\n\
93 - velocity computed in the camera frame,\n\
94 - display the camera view.\n\
97 %s [-c] [-d] [-h]\n", name);
103 Disable the mouse click. Useful to automaze the \n\
104 execution of this program without humain intervention.\n\
107 Turn off the display.\n\
113 fprintf(stderr,
"ERROR: \n");
114 fprintf(stderr,
"\nBad parameter [%s]\n", badparam);
130 bool getOptions(
int argc,
const char **argv,
bool &click_allowed,
bool &display)
138 click_allowed =
false;
144 usage(argv[0], NULL);
149 usage(argv[0], optarg_);
155 if ((c == 1) || (c == -1)) {
157 usage(argv[0], NULL);
158 std::cerr <<
"ERROR: " << std::endl;
159 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
166 int main(
int argc,
const char **argv)
169 bool opt_display =
true;
170 bool opt_click_allowed =
true;
173 if (getOptions(argc, argv, opt_click_allowed, opt_display) ==
false) {
174 return(EXIT_FAILURE);
180 #if defined VISP_HAVE_X11
182 #elif defined VISP_HAVE_GTK
184 #elif defined VISP_HAVE_GDI
186 #elif defined VISP_HAVE_OPENCV
192 display.init(I, 100, 100,
"Camera view...");
202 double px = 600, py = 600;
246 unsigned int iter = 0;
248 while (iter++ < 200) {
249 std::cout <<
"---------------------------------------------" << iter << std::endl;
272 std::cout <<
"task rank: " << task.
getTaskRank() << std::endl;
276 std::cout <<
"|| s - s* || = " << (task.
getError()).sumSquare() << std::endl;
283 if (opt_display && opt_click_allowed) {
284 std::cout <<
"Click in the camera view window to end..." << std::endl;
289 std::cout <<
"Catch a ViSP exception: " << e << std::endl;
296 std::cout <<
"You do not have X11, or GTK, or GDI (Graphical Device Interface) functionalities to display images..." << std::endl;
297 std::cout <<
"Tip if you are on a unix-like system:" << std::endl;
298 std::cout <<
"- Install X11, configure again ViSP using cmake and build again this example" << std::endl;
299 std::cout <<
"Tip if you are on a windows-like system:" << std::endl;
300 std::cout <<
"- Install GDI, configure again ViSP using cmake and build again this example" << std::endl;
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
Class that defines 2D ellipse visual feature.
static double rad(double deg)
Generic class defining intrinsic camera parameters.
Display for windows using GDI (available on any windows 32 platform).
virtual void print() const
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
unsigned int getHeight() const
Class that defines what is a circle.
Class that defines the simplest robot: a free flying camera.
Implementation of column vector and the associated operations.
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
void setServo(const vpServoType &servo_type)
unsigned int getWidth() const
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
vpHomogeneousMatrix getPosition() const
void print(const vpServo::vpServoPrintType display_level=ALL, std::ostream &os=std::cout)
static void display(const vpImage< unsigned char > &I)
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
vpColVector getError() const
void setWorldCoordinates(const vpColVector &oP)
unsigned int getTaskRank() const
void addFeature(vpBasicFeature &s, vpBasicFeature &s_star, unsigned int select=vpBasicFeature::FEATURE_ALL)
void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType, const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE)
vpColVector computeControlLaw()
static void flush(const vpImage< unsigned char > &I)
vpHomogeneousMatrix inverse() const
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
Implementation of an homogeneous matrix and operations on such kind of matrices.
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel)
static void display(const vpServo &s, const vpCameraParameters &cam, const vpImage< unsigned char > &I, vpColor currentColor=vpColor::green, vpColor desiredColor=vpColor::red, unsigned int thickness=1)
error that can be emited by ViSP classes.
void track(const vpHomogeneousMatrix &cMo)
void print(unsigned int select=FEATURE_ALL) const
print the name of the feature