39 #include <visp3/core/vpConfig.h> 40 #if defined(VISP_HAVE_MODULE_GUI) && ((defined(_WIN32) && !defined(WINRT_8_0)) || defined(VISP_HAVE_PTHREAD)) 44 #include <visp3/core/vpImagePoint.h> 45 #include <visp3/core/vpIoTools.h> 46 #include <visp3/core/vpMeterPixelConversion.h> 47 #include <visp3/core/vpPoint.h> 48 #include <visp3/core/vpTime.h> 49 #include <visp3/robot/vpRobotException.h> 50 #include <visp3/robot/vpSimulatorAfma6.h> 52 #include "../wireframe-simulator/vpBound.h" 53 #include "../wireframe-simulator/vpRfstack.h" 54 #include "../wireframe-simulator/vpScene.h" 55 #include "../wireframe-simulator/vpVwstack.h" 64 positioningVelocity(defaultPositioningVelocity), zeroPos(), reposPos(), toolCustom(false), arm_dir()
73 mutex_fMi = CreateMutexEx(NULL, NULL, 0, NULL);
79 mutex_fMi = CreateMutex(NULL, FALSE, NULL);
86 DWORD dwThreadIdArray;
87 hThread = CreateThread(NULL,
93 #elif defined(VISP_HAVE_PTHREAD) 100 pthread_attr_init(&
attr);
101 pthread_attr_setdetachstate(&
attr, PTHREAD_CREATE_JOINABLE);
126 mutex_fMi = CreateMutexEx(NULL, NULL, 0, NULL);
132 mutex_fMi = CreateMutex(NULL, FALSE, NULL);
139 DWORD dwThreadIdArray;
140 hThread = CreateThread(NULL,
146 #elif defined(VISP_HAVE_PTHREAD) 153 pthread_attr_init(&
attr);
154 pthread_attr_setdetachstate(&
attr, PTHREAD_CREATE_JOINABLE);
170 #if defined(WINRT_8_1) 171 WaitForSingleObjectEx(hThread, INFINITE, FALSE);
173 WaitForSingleObject(hThread, INFINITE);
175 CloseHandle(hThread);
181 #elif defined(VISP_HAVE_PTHREAD) 182 pthread_attr_destroy(&
attr);
183 pthread_join(
thread, NULL);
192 for (
int i = 0; i < 6; i++)
212 std::vector<std::string> arm_dirs =
vpIoTools::splitChain(std::string(VISP_ROBOT_ARMS_DIR), std::string(
";"));
213 bool armDirExists =
false;
214 for (
size_t i = 0; i < arm_dirs.size(); i++)
216 arm_dir = arm_dirs[i];
223 std::cout <<
"The simulator uses data from VISP_ROBOT_ARMS_DIR=" << arm_dir << std::endl;
225 std::cout <<
"Cannot get VISP_ROBOT_ARMS_DIR environment variable" << std::endl;
241 reposPos[1] = -M_PI / 2;
243 reposPos[4] = M_PI / 2;
250 first_time_getdis =
true;
311 unsigned int name_length = 30;
312 if (arm_dir.size() > FILENAME_MAX)
314 unsigned int full_length = (
unsigned int)arm_dir.size() + name_length;
315 if (full_length > FILENAME_MAX)
334 char *name_arm =
new char[full_length];
335 strcpy(name_arm, arm_dir.c_str());
336 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
357 char *name_arm =
new char[full_length];
358 strcpy(name_arm, arm_dir.c_str());
359 strcat(name_arm,
"/afma6_tool_gripper.bnd");
381 char *name_arm =
new char[full_length];
383 strcpy(name_arm, arm_dir.c_str());
384 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
393 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
415 const unsigned int &image_height)
424 if (image_width == 640 && image_height == 480) {
429 vpTRACE(
"Cannot get default intrinsic camera parameters for this image " 436 if (image_width == 640 && image_height == 480) {
441 vpTRACE(
"Cannot get default intrinsic camera parameters for this image " 449 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
503 double tcur_1 =
tcur;
516 double ellapsedTime = (
tcur -
tprev) * 1e-3;
535 articularVelocities = 0.0;
540 articularCoordinates[0] = articularCoordinates[0] + ellapsedTime * articularVelocities[0];
541 articularCoordinates[1] = articularCoordinates[1] + ellapsedTime * articularVelocities[1];
542 articularCoordinates[2] = articularCoordinates[2] + ellapsedTime * articularVelocities[2];
543 articularCoordinates[3] = articularCoordinates[3] + ellapsedTime * articularVelocities[3];
544 articularCoordinates[4] = articularCoordinates[4] + ellapsedTime * articularVelocities[4];
545 articularCoordinates[5] = articularCoordinates[5] + ellapsedTime * articularVelocities[5];
551 ellapsedTime = (
_joint_min[(
unsigned int)(-jl - 1)] - articularCoordinates[(
unsigned int)(-jl - 1)]) /
552 (articularVelocities[(
unsigned int)(-jl - 1)]);
554 ellapsedTime = (
_joint_max[(
unsigned int)(jl - 1)] - articularCoordinates[(
unsigned int)(jl - 1)]) /
555 (articularVelocities[(
unsigned int)(jl - 1)]);
557 for (
unsigned int i = 0; i < 6; i++)
558 articularCoordinates[i] = articularCoordinates[i] + ellapsedTime * articularVelocities[i];
597 for (
unsigned int k = 1; k < 7; k++) {
707 fMit[4][0][0] = s4 * s5;
708 fMit[4][1][0] = -c4 * s5;
710 fMit[4][0][1] = s4 * c5;
711 fMit[4][1][1] = -c4 * c5;
716 fMit[4][0][3] = c4 * this->
_long_56 + q1;
717 fMit[4][1][3] = s4 * this->
_long_56 + q2;
720 fMit[5][0][0] = s4 * s5 * c6 + c4 * s6;
721 fMit[5][1][0] = -c4 * s5 * c6 + s4 * s6;
722 fMit[5][2][0] = c5 * c6;
723 fMit[5][0][1] = -s4 * s5 * s6 + c4 * c6;
724 fMit[5][1][1] = c4 * s5 * s6 + s4 * c6;
725 fMit[5][2][1] = -c5 * s6;
726 fMit[5][0][2] = -s4 * c5;
727 fMit[5][1][2] = c4 * c5;
729 fMit[5][0][3] = c4 * this->
_long_56 + q1;
730 fMit[5][1][3] = s4 * this->
_long_56 + q2;
733 fMit[6][0][0] = fMit[5][0][0];
734 fMit[6][1][0] = fMit[5][1][0];
735 fMit[6][2][0] = fMit[5][2][0];
736 fMit[6][0][1] = fMit[5][0][1];
737 fMit[6][1][1] = fMit[5][1][1];
738 fMit[6][2][1] = fMit[5][2][1];
739 fMit[6][0][2] = fMit[5][0][2];
740 fMit[6][1][2] = fMit[5][1][2];
741 fMit[6][2][2] = fMit[5][2][2];
742 fMit[6][0][3] = fMit[5][0][3];
743 fMit[6][1][3] = fMit[5][1][3];
744 fMit[6][2][3] = fMit[5][2][3];
753 #if defined(WINRT_8_1) 754 WaitForSingleObjectEx(
mutex_fMi, INFINITE, FALSE);
756 WaitForSingleObject(
mutex_fMi, INFINITE);
758 for (
int i = 0; i < 8; i++)
761 #elif defined(VISP_HAVE_PTHREAD) 763 for (
int i = 0; i < 8; i++)
786 std::cout <<
"Change the control mode from velocity to position control.\n";
796 std::cout <<
"Change the control mode from stop to velocity control.\n";
886 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
888 "Cannot send a velocity to the robot " 889 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
894 double scale_sat = 1;
906 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
910 for (
unsigned int i = 0; i < 3; ++i) {
911 vel_abs = fabs(vel[i]);
913 vel_trans_max = vel_abs;
919 vel_abs = fabs(vel[i + 3]);
921 vel_rot_max = vel_abs;
928 double scale_trans_sat = 1;
929 double scale_rot_sat = 1;
936 if ((scale_trans_sat < 1) || (scale_rot_sat < 1)) {
937 if (scale_trans_sat < scale_rot_sat)
938 scale_sat = scale_trans_sat;
940 scale_sat = scale_rot_sat;
948 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
951 for (
unsigned int i = 0; i < 6; ++i) {
952 vel_abs = fabs(vel[i]);
954 vel_rot_max = vel_abs;
960 double scale_rot_sat = 1;
963 if (scale_rot_sat < 1)
964 scale_sat = scale_rot_sat;
998 articularVelocity = eJe_ * eVc * velocityframe;
1008 articularVelocity = fJe_ * velocityframe;
1013 articularVelocity = velocityframe;
1025 for (
unsigned int i = 0; i < 6; ++i) {
1026 double vel_abs = fabs(articularVelocity[i]);
1028 vel_rot_max = vel_abs;
1031 articularVelocity[i], i + 1);
1034 double scale_rot_sat = 1;
1035 double scale_sat = 1;
1038 if (scale_rot_sat < 1)
1039 scale_sat = scale_rot_sat;
1109 vel = cVe * eJe_ * articularVelocity;
1113 vel = articularVelocity;
1119 vel = fJe_ * articularVelocity;
1127 "Case not taken in account.");
1229 double velmax = fabs(q[0]);
1230 for (
unsigned int i = 1; i < 6; i++) {
1231 if (velmax < fabs(q[i]))
1232 velmax = fabs(q[i]);
1318 "Modification of the robot state");
1333 for (
unsigned int i = 0; i < 3; i++) {
1348 qdes = articularCoordinates;
1352 error = qdes - articularCoordinates;
1356 if (errsqr < 1e-4) {
1367 }
while (errsqr > 1e-8 && nbSol > 0);
1375 error = q - articularCoordinates;
1380 if (errsqr < 1e-4) {
1387 }
while (errsqr > 1e-8);
1397 for (
unsigned int i = 0; i < 3; i++) {
1407 qdes = articularCoordinates;
1411 error = qdes - articularCoordinates;
1415 if (errsqr < 1e-4) {
1424 }
while (errsqr > 1e-8 && nbSol > 0);
1428 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1430 "Mixt frame not implemented.");
1499 const double pos3,
const double pos4,
const double pos5,
const double pos6)
1653 for (
unsigned int i = 0; i < 3; i++) {
1661 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1663 "Mixt frame not implemented.");
1721 for (
unsigned int j = 0; j < 3; j++) {
1722 position[j] = posRxyz[j];
1723 position[j + 3] = RtuVect[j];
1757 vpTRACE(
"Joint limit vector has not a size of 6 !");
1785 bool cond = fabs(q5 - M_PI / 2) < 1e-1;
1813 for (
unsigned int i = 0; i < 6; i++) {
1814 if (articularCoordinates[i] <=
_joint_min[i]) {
1815 difft =
_joint_min[i] - articularCoordinates[i];
1818 artNumb = -(int)i - 1;
1823 for (
unsigned int i = 0; i < 6; i++) {
1824 if (articularCoordinates[i] >=
_joint_max[i]) {
1825 difft = articularCoordinates[i] -
_joint_max[i];
1828 artNumb = (int)(i + 1);
1834 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs((
float)artNumb) <<
" on joint limit!" 1865 if (!first_time_getdis) {
1868 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1873 displacement = q_cur - q_prev_getdis;
1878 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
1883 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
1888 first_time_getdis =
false;
1892 q_prev_getdis = q_cur;
1944 std::ifstream fd(filename.c_str(), std::ios::in);
1946 if (!fd.is_open()) {
1951 std::string key(
"R:");
1952 std::string id(
"#AFMA6 - Position");
1953 bool pos_found =
false;
1958 while (std::getline(fd, line)) {
1961 if (!(line.compare(0,
id.size(), id) == 0)) {
1962 std::cout <<
"Error: this position file " << filename <<
" is not for Afma6 robot" << std::endl;
1966 if ((line.compare(0, 1,
"#") == 0)) {
1969 if ((line.compare(0, key.size(), key) == 0)) {
1972 if (chain.size() <
njoint + 1)
1974 if (chain.size() <
njoint + 1)
1977 std::istringstream ss(line);
1980 for (
unsigned int i = 0; i <
njoint; i++)
1995 std::cout <<
"Error: unable to find a position for Afma6 robot in " << filename << std::endl;
2027 fd = fopen(filename.c_str(),
"w");
2032 #AFMA6 - Position - Version 2.01\n\ 2035 # Joint position: X, Y, Z: translations in meters\n\ 2036 # A, B, C: rotations in degrees\n\ 2166 std::string scene_dir_;
2167 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2168 bool sceneDirExists =
false;
2169 for (
size_t i = 0; i < scene_dirs.size(); i++)
2171 scene_dir_ = scene_dirs[i];
2172 sceneDirExists =
true;
2175 if (!sceneDirExists) {
2178 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2180 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2184 unsigned int name_length = 30;
2185 if (scene_dir_.size() > FILENAME_MAX)
2187 unsigned int full_length = (
unsigned int)scene_dir_.size() + name_length;
2188 if (full_length > FILENAME_MAX)
2191 char *name_cam =
new char[full_length];
2193 strcpy(name_cam, scene_dir_.c_str());
2194 strcat(name_cam,
"/camera.bnd");
2197 if (arm_dir.size() > FILENAME_MAX)
2199 full_length = (
unsigned int)arm_dir.size() + name_length;
2200 if (full_length > FILENAME_MAX)
2203 char *name_arm =
new char[full_length];
2204 strcpy(name_arm, arm_dir.c_str());
2205 strcat(name_arm,
"/afma6_gate.bnd");
2206 std::cout <<
"name arm: " << name_arm << std::endl;
2208 strcpy(name_arm, arm_dir.c_str());
2209 strcat(name_arm,
"/afma6_arm1.bnd");
2210 set_scene(name_arm,
robotArms + 1, 1.0);
2211 strcpy(name_arm, arm_dir.c_str());
2212 strcat(name_arm,
"/afma6_arm2.bnd");
2213 set_scene(name_arm,
robotArms + 2, 1.0);
2214 strcpy(name_arm, arm_dir.c_str());
2215 strcat(name_arm,
"/afma6_arm3.bnd");
2216 set_scene(name_arm,
robotArms + 3, 1.0);
2217 strcpy(name_arm, arm_dir.c_str());
2218 strcat(name_arm,
"/afma6_arm4.bnd");
2219 set_scene(name_arm,
robotArms + 4, 1.0);
2223 strcpy(name_arm, arm_dir.c_str());
2226 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2230 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2234 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2238 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
2242 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2246 set_scene(name_arm,
robotArms + 5, 1.0);
2248 add_rfstack(IS_BACK);
2250 add_vwstack(
"start",
"depth", 0.0, 100.0);
2251 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
2252 add_vwstack(
"start",
"type", PERSPECTIVE);
2264 bool changed =
false;
2268 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2288 float w44o[4][4], w44cext[4][4], x, y, z;
2292 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
2293 x = w44cext[2][0] + w44cext[3][0];
2294 y = w44cext[2][1] + w44cext[3][1];
2295 z = w44cext[2][2] + w44cext[3][2];
2296 add_vwstack(
"start",
"vrp", x, y, z);
2297 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
2298 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
2299 add_vwstack(
"start",
"window", -u, u, -v, v);
2307 vp2jlc_matrix(fMit[0], w44o);
2310 vp2jlc_matrix(fMit[2], w44o);
2313 vp2jlc_matrix(fMit[3], w44o);
2316 vp2jlc_matrix(fMit[4], w44o);
2319 vp2jlc_matrix(fMit[5], w44o);
2326 cMe = fMit[6] * cMe;
2327 vp2jlc_matrix(cMe, w44o);
2332 vp2jlc_matrix(
fMo, w44o);
2373 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2403 fMo = fMit[7] * cMo_;
2432 const double lambda = 5.;
2436 unsigned int i, iter = 0;
2454 v = -lambda * cdRc.
t() * cdTc;
2455 w = -lambda * cdTUc;
2456 for (i = 0; i < 3; ++i) {
2460 err[i + 3] = cdTUc[i];
2479 #elif !defined(VISP_BUILD_SHARED_LIBS) 2482 void dummy_vpSimulatorAfma6(){};
static void displayCamera(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color, unsigned int thickness)
Modelisation of Irisa's gantry robot named Afma6.
double euclideanNorm() const
Implementation of a matrix and operations on matrices.
vpMatrix pseudoInverse(double svThreshold=1e-6) const
VISP_EXPORT int wait(double t0, double t)
static const unsigned int njoint
Number of joint.
Error that can be emited by the vpRobot class and its derivates.
vpColVector get_artCoord()
vpHomogeneousMatrix getExternalCameraPosition() const
void setMaxTranslationVelocity(const double maxVt)
void get_eJe(vpMatrix &eJe)
Implementation of an homogeneous matrix and operations on such kind of matrices.
virtual ~vpSimulatorAfma6()
unsigned int jointLimitArt
void get_cVe(vpVelocityTwistMatrix &cVe)
void move(const char *filename)
static void * launcher(void *arg)
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Point coordinates conversion from normalized coordinates in meter to pixel coordinates ...
VISP_EXPORT double measureTimeSecond()
double getMaxTranslationVelocity(void) const
int getInverseKinematics(const vpHomogeneousMatrix &fMc, vpColVector &q, const bool &nearest=true, const bool &verbose=false) const
bool constantSamplingTimeMode
bool singularityManagement
static const vpColor none
Initialize the position controller.
error that can be emited by ViSP classes.
vpAfma6ToolType
List of possible tools that can be attached to the robot end-effector.
void setJointLimit(const vpColVector &limitMin, const vpColVector &limitMax)
void updateArticularPosition()
unsigned int getRows() const
void track(const vpHomogeneousMatrix &cMo)
vpHomogeneousMatrix inverse() const
static const double defaultPositioningVelocity
vpColVector get_velocity()
static bool savePosFile(const std::string &filename, const vpColVector &q)
void getExternalImage(vpImage< vpRGBa > &I)
vpCameraParameters::vpCameraParametersProjType projModel
vpAfma6ToolType getToolType() const
Get the current tool type.
double getMaxRotationVelocity(void) const
void extract(vpRotationMatrix &R) const
static const vpColor green
static void flush(const vpImage< unsigned char > &I)
vpHomogeneousMatrix get_fMc(const vpColVector &q) const
vpThetaUVector buildFrom(const vpHomogeneousMatrix &M)
vpRotationMatrix t() const
void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q)
vpRobot::vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState)
VISP_EXPORT double measureTimeMs()
virtual vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState)
Class that defines what is a point.
void setToolType(vpAfma6::vpAfma6ToolType tool)
Set the current tool type.
bool initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo)
static const char *const CONST_GRIPPER_CAMERA_NAME
static Type maximum(const Type &a, const Type &b)
Implementation of a rotation matrix and operations on such kind of matrices.
void initPersProjWithoutDistortion(const double px, const double py, const double u0, const double v0)
void getDisplacement(const vpRobot::vpControlFrameType frame, vpColVector &displacement)
pthread_mutex_t mutex_artCoord
pthread_mutex_t mutex_display
vpDisplayRobotType displayType
Initialize the velocity controller.
static bool readPosFile(const std::string &filename, vpColVector &q)
virtual vpRobotStateType getRobotState(void) const
vpCameraParameters cameraParam
void initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo)
Initialize the acceleration controller.
vpVelocityTwistMatrix buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
void set_displayBusy(const bool &status)
vpCameraParametersProjType
static void display(const vpImage< unsigned char > &I)
void setExternalCameraPosition(const vpHomogeneousMatrix &camMf_)
void getInternalView(vpImage< vpRGBa > &I)
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &velocity)
void get_eJe(const vpColVector &q, vpMatrix &eJe) const
Generic class defining intrinsic camera parameters.
vpHomogeneousMatrix get_cMo()
void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q)
bool singularityTest(const vpColVector &q, vpMatrix &J)
static Type minimum(const Type &a, const Type &b)
void setCameraParameters(const vpCameraParameters &cam)
double getSamplingTime() const
void set_velocity(const vpColVector &vel)
void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q)
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
void get_fJe(const vpColVector &q, vpMatrix &fJe) const
static double rad(double deg)
void setExternalCameraParameters(const vpCameraParameters &cam)
This class aims to be a basis used to create all the simulators of robots.
vpHomogeneousMatrix * fMi
void setMaxRotationVelocity(const double maxVr)
pthread_mutex_t mutex_fMi
void display_scene(Matrix mat, Bound_scene &sc, const vpImage< vpRGBa > &I, const vpColor &color)
double getPositioningVelocity(void)
vpHomogeneousMatrix camMf
vpHomogeneousMatrix navigation(const vpImage< vpRGBa > &I, bool &changed)
static double deg(double rad)
unsigned int getHeight() const
Implementation of column vector and the associated operations.
static void displayFrame(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color=vpColor::none, unsigned int thickness=1, const vpImagePoint &offset=vpImagePoint(0, 0))
double get_x() const
Get the point x coordinate in the image plane.
void get_fJe(vpMatrix &fJe)
Implementation of a pose vector and operations on poses.
void computeArticularVelocity()
void get_cMe(vpHomogeneousMatrix &cMe) const
double get_y() const
Get the point y coordinate in the image plane.
Implementation of a rotation vector as Euler angle minimal representation.
void getCameraParameters(vpCameraParameters &cam, const unsigned int &image_width, const unsigned int &image_height)
vpControlFrameType setRobotFrame(vpRobot::vpControlFrameType newFrame)
vpControlFrameType getRobotFrame(void) const
void get_cMe(vpHomogeneousMatrix &cMe)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
void set_artCoord(const vpColVector &coord)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)
VISP_EXPORT double getMinTimeForUsleepCall()
void set_artVel(const vpColVector &vel)
void get_fMi(vpHomogeneousMatrix *fMit)
static const char *const CONST_CCMOP_CAMERA_NAME
unsigned int getWidth() const
pthread_mutex_t mutex_velocity
Class that consider the case of a translation vector.
Implementation of a rotation vector as axis-angle minimal representation.
pthread_mutex_t mutex_artVel
vpHomogeneousMatrix camMf2
void findHighestPositioningSpeed(vpColVector &q)
void resize(const unsigned int i, const bool flagNullify=true)