48#include <visp3/core/vpConfig.h>
49#include <visp3/core/vpDebug.h>
50#if (defined(VISP_HAVE_AFMA6) && defined(VISP_HAVE_REALSENSE2))
52#include <visp3/core/vpDisplay.h>
53#include <visp3/core/vpImage.h>
54#include <visp3/gui/vpDisplayFactory.h>
55#include <visp3/sensor/vpRealSense2.h>
57#include <visp3/core/vpHomogeneousMatrix.h>
58#include <visp3/core/vpMath.h>
59#include <visp3/visual_features/vpFeatureBuilder.h>
60#include <visp3/visual_features/vpFeatureEllipse.h>
61#include <visp3/vs/vpServo.h>
63#include <visp3/robot/vpRobotAfma6.h>
66#include <visp3/core/vpException.h>
67#include <visp3/vs/vpServoDisplay.h>
69#include <visp3/blob/vpDot.h>
73#ifdef ENABLE_VISP_NAMESPACE
77#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
78 std::shared_ptr<vpDisplay> display;
89 config.enable_stream(RS2_STREAM_COLOR, width, height, RS2_FORMAT_RGBA8, fps);
90 config.enable_stream(RS2_STREAM_DEPTH, width, height, RS2_FORMAT_Z16, fps);
91 config.enable_stream(RS2_STREAM_INFRARED, width, height, RS2_FORMAT_Y8, fps);
95 for (
size_t i = 0;
i < 10; ++
i) {
99#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
108 std::cout <<
"-------------------------------------------------------" << std::endl;
109 std::cout <<
" Test program for vpServo " << std::endl;
110 std::cout <<
" Eye-in-hand task control, velocity computed in the camera frame" << std::endl;
111 std::cout <<
" Simulation " << std::endl;
112 std::cout <<
" task : servo a point " << std::endl;
113 std::cout <<
"-------------------------------------------------------" << std::endl;
120 std::cout <<
"Click on an ellipse..." << std::endl;
133 robot.getCameraParameters(cam, I);
135 vpTRACE(
"sets the current position of the visual feature ");
139 std::cout <<
" Learning 0/1 " << std::endl;
141 std::cin >> learning;
142 std::string name =
"dat/ellipse.dat";
145 vpTRACE(
"Save the location of the object in a file dat/ellipse.dat");
146 std::ofstream f(name.c_str());
152 vpTRACE(
"sets the desired position of the visual feature ");
154 std::ifstream f(
"dat/ellipse.dat");
155 double x,
y, n20, n11, n02;
168 task.addFeature(c, cd);
170 task.setLambda(0.01);
173 unsigned int iter = 0;
174 double lambda_av = 0.01;
178 std::cout <<
"alpha 0.7" << std::endl;
180 std::cout <<
"beta 5" << std::endl;
184 std::cout <<
"---------------------------------------------" <<
iter++ << std::endl;
200 if (std::fabs(alpha) <= std::numeric_limits<double>::epsilon())
203 gain = alpha * exp(-beta * (
task.getError()).sumSquare()) + lambda_av;
209 vpTRACE(
"%f %f", (
task.getError()).sumSquare(), gain);
210 task.setLambda(gain);
212 v =
task.computeControlLaw();
213 std::cout <<
"rank " <<
task.getTaskRank() << std::endl;
223 vpTRACE(
"\t\t || s - s* || = %f ", (
task.getError()).sumSquare());
226 vpTRACE(
"Display task information ");
228#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
229 if (display !=
nullptr) {
236 std::cout <<
"Test failed with exception: " <<
e << std::endl;
237#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
238 if (display !=
nullptr) {
249 std::cout <<
"You do not have an afma6 robot connected to your computer..." << std::endl;
vpColVector get_s(unsigned int select=FEATURE_ALL) const
Get the feature vector .
Generic class defining intrinsic camera parameters.
@ perspectiveProjWithoutDistortion
Perspective projection without distortion model.
Implementation of column vector and the associated operations.
static const vpColor blue
static const vpColor green
Class that defines generic functionalities for display.
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(const vpImage< unsigned char > &I)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void flush(const vpImage< unsigned char > &I)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
This tracker is meant to track a dot (connected pixels with same gray level) on a vpImage.
void setMaxDotSize(double percentage)
void initTracking(const vpImage< unsigned char > &I)
void setComputeMoments(bool activate)
vpImagePoint getCog() const
void track(const vpImage< unsigned char > &I)
error that can be emitted by ViSP classes.
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class that defines 2D ellipse visual feature.
vpFeatureEllipse & buildFrom(const double &x, const double &y, const double &n20, const double &n11, const double &n02)
void setABC(double A, double B, double C)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
void acquire(vpImage< unsigned char > &grey, double *ts=nullptr)
bool open(const rs2::config &cfg=rs2::config())
Control of Irisa's gantry robot named Afma6.
@ STATE_VELOCITY_CONTROL
Initialize the velocity controller.
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)
std::shared_ptr< vpDisplay > createDisplay()
Return a smart pointer vpDisplay specialization if a GUI library is available or nullptr otherwise.
vpDisplay * allocateDisplay()
Return a newly allocated vpDisplay specialization if a GUI library is available or nullptr otherwise.