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;
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel)
unsigned int getWidth() const
Implementation of an homogeneous matrix and operations on such kind of matrices.
Class that defines the simplest robot: a free flying camera.
Display for windows using GDI (available on any windows 32 platform).
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
void addFeature(vpBasicFeature &s, vpBasicFeature &s_star, const unsigned int select=vpBasicFeature::FEATURE_ALL)
error that can be emited by ViSP classes.
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const std::string &title="")
void track(const vpHomogeneousMatrix &cMo)
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
vpColVector getError() const
virtual void print() const
vpColVector computeControlLaw()
void print(const unsigned int select=FEATURE_ALL) const
print the name of the feature
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
Generic class defining intrinsic camera parameters.
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
vpHomogeneousMatrix getPosition() const
void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType, const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE)
static double rad(double deg)
Implementation of column vector and the associated operations.
vpHomogeneousMatrix inverse() const
void print(const vpServo::vpServoPrintType display_level=ALL, std::ostream &os=std::cout)
unsigned int getHeight() const
Class that defines 2D ellipse visual feature.
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class that defines what is a circle.
void setServo(const vpServoType &servo_type)
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)
unsigned int getTaskRank() const
void setWorldCoordinates(const vpColVector &oP)