44 #include <visp/vpConfig.h>
45 #if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
46 #include <visp/vpSimulatorAfma6.h>
47 #include <visp/vpTime.h>
48 #include <visp/vpImagePoint.h>
49 #include <visp/vpPoint.h>
50 #include <visp/vpMeterPixelConversion.h>
51 #include <visp/vpRobotException.h>
52 #include <visp/vpIoTools.h>
64 q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
65 zeroPos(), reposPos(), toolCustom(false), arm_dir()
80 DWORD dwThreadIdArray;
81 hThread = CreateThread(
88 #elif defined (VISP_HAVE_PTHREAD)
95 pthread_attr_init(&
attr);
96 pthread_attr_setdetachstate(&
attr, PTHREAD_CREATE_JOINABLE);
112 q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
113 zeroPos(), reposPos(), toolCustom(false), arm_dir()
121 mutex_fMi = CreateMutex(NULL,FALSE,NULL);
128 DWORD dwThreadIdArray;
129 hThread = CreateThread(
136 #elif defined(VISP_HAVE_PTHREAD)
143 pthread_attr_init(&
attr);
144 pthread_attr_setdetachstate(&
attr, PTHREAD_CREATE_JOINABLE);
160 WaitForSingleObject(hThread,INFINITE);
161 CloseHandle(hThread);
167 #elif defined(VISP_HAVE_PTHREAD)
168 pthread_attr_destroy(&
attr);
169 pthread_join(
thread, NULL);
179 for(
int i = 0; i < 6; i++)
200 std::vector<std::string> arm_dirs =
vpIoTools::splitChain(std::string(VISP_ROBOT_ARMS_DIR), std::string(
";"));
201 bool armDirExists =
false;
202 for(
size_t i=0; i < arm_dirs.size(); i++)
204 arm_dir = arm_dirs[i];
208 if (! armDirExists) {
211 std::cout <<
"The simulator uses data from VISP_ROBOT_ARMS_DIR=" << arm_dir << std::endl;
214 std::cout <<
"Cannot get VISP_ROBOT_ARMS_DIR environment variable" << std::endl;
230 reposPos[1] = -M_PI/2; reposPos[2] = M_PI; reposPos[4] = M_PI/2;
237 first_time_getdis =
true;
270 setExternalCameraPosition(
vpHomogeneousMatrix(0,0,0,0,0,
vpMath::rad(180))*
vpHomogeneousMatrix(-0.1,0,4,
vpMath::rad(90),0,0));
301 unsigned int name_length = 30;
302 if (arm_dir.size() > FILENAME_MAX)
304 unsigned int full_length = (
unsigned int)arm_dir.size() + name_length;
305 if (full_length > FILENAME_MAX)
324 char *name_arm =
new char [full_length];
325 strcpy(name_arm, arm_dir.c_str());
326 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
347 char *name_arm =
new char [full_length];
348 strcpy(name_arm, arm_dir.c_str());
349 strcat(name_arm,
"/afma6_tool_gripper.bnd");
371 char *name_arm =
new char [full_length];
373 strcpy(name_arm, arm_dir.c_str());
374 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
382 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
405 const unsigned int &image_width,
406 const unsigned int &image_height)
416 if (image_width == 640 && image_height == 480)
418 std::cout <<
"Get default camera parameters for camera \""
423 vpTRACE(
"Cannot get default intrinsic camera parameters for this image resolution");
429 if (image_width == 640 && image_height == 480) {
430 std::cout <<
"Get default camera parameters for camera \""
435 vpTRACE(
"Cannot get default intrinsic camera parameters for this image resolution");
441 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
502 double tcur_1 =
tcur;
515 double ellapsedTime = (
tcur -
tprev) * 1e-3;
534 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];
552 ellapsedTime = (
_joint_min[(
unsigned int)(-jl-1)] - articularCoordinates[(
unsigned int)(-jl-1)])/(articularVelocities[(
unsigned int)(-jl-1)]);
554 ellapsedTime = (
_joint_max[(
unsigned int)(jl-1)] - articularCoordinates[(
unsigned int)(jl-1)])/(articularVelocities[(
unsigned int)(jl-1)]);
556 for (
unsigned int i = 0; i < 6; i++)
557 articularCoordinates[i] = articularCoordinates[i] + ellapsedTime*articularVelocities[i];
599 for (
unsigned int k = 1; k < 7; k++)
705 fMit[4][0][0] = s4*s5;
706 fMit[4][1][0] = -c4*s5;
708 fMit[4][0][1] = s4*c5;
709 fMit[4][1][1] = -c4*c5;
714 fMit[4][0][3] = c4*this->
_long_56+q1;
715 fMit[4][1][3] = s4*this->
_long_56+q2;
718 fMit[5][0][0] = s4*s5*c6+c4*s6;
719 fMit[5][1][0] = -c4*s5*c6+s4*s6;
720 fMit[5][2][0] = c5*c6;
721 fMit[5][0][1] = -s4*s5*s6+c4*c6;
722 fMit[5][1][1] = c4*s5*s6+s4*c6;
723 fMit[5][2][1] = -c5*s6;
724 fMit[5][0][2] = -s4*c5;
725 fMit[5][1][2] = c4*c5;
727 fMit[5][0][3] = c4*this->
_long_56+q1;
728 fMit[5][1][3] = s4*this->
_long_56+q2;
731 fMit[6][0][0] = fMit[5][0][0];
732 fMit[6][1][0] = fMit[5][1][0];
733 fMit[6][2][0] = fMit[5][2][0];
734 fMit[6][0][1] = fMit[5][0][1];
735 fMit[6][1][1] = fMit[5][1][1];
736 fMit[6][2][1] = fMit[5][2][1];
737 fMit[6][0][2] = fMit[5][0][2];
738 fMit[6][1][2] = fMit[5][1][2];
739 fMit[6][2][2] = fMit[5][2][2];
740 fMit[6][0][3] = fMit[5][0][3];
741 fMit[6][1][3] = fMit[5][1][3];
742 fMit[6][2][3] = fMit[5][2][3];
752 for (
int i = 0; i < 8; i++)
755 #elif defined(VISP_HAVE_PTHREAD)
757 for (
int i = 0; i < 8; i++)
782 std::cout <<
"Change the control mode from velocity to position control.\n";
792 std::cout <<
"Change the control mode from stop to velocity control.\n";
878 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
880 "Cannot send a velocity to the robot "
881 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
886 double scale_trans_sat = 1;
887 double scale_rot_sat = 1;
888 double scale_sat = 1;
903 vpERROR_TRACE (
"The velocity vector must have a size of 6 !!!!");
907 for (
unsigned int i = 0 ; i < 3; ++ i)
909 vel_abs = fabs (vel[i]);
912 vel_trans_max = vel_abs;
914 "(axis nr. %d).", vel[i], i+1);
917 vel_abs = fabs (vel[i+3]);
919 vel_rot_max = vel_abs;
921 "(axis nr. %d).", vel[i+3], i+4);
931 if ( (scale_trans_sat < 1) || (scale_rot_sat < 1) )
933 if (scale_trans_sat < scale_rot_sat)
934 scale_sat = scale_trans_sat;
936 scale_sat = scale_rot_sat;
946 vpERROR_TRACE (
"The velocity vector must have a size of 6 !!!!");
949 for (
unsigned int i = 0 ; i < 6; ++ i)
951 vel_abs = fabs (vel[i]);
954 vel_rot_max = vel_abs;
956 "(axis nr. %d).", vel[i], i+1);
961 if ( scale_rot_sat < 1 )
962 scale_sat = scale_rot_sat;
985 double scale_rot_sat = 1;
986 double scale_sat = 1;
1004 articularVelocity = eJe_*eVc*velocityframe;
1015 articularVelocity = fJe_*velocityframe;
1021 articularVelocity = velocityframe;
1038 for (
unsigned int i = 0 ; i < 6; ++ i)
1040 vel_abs = fabs (articularVelocity[i]);
1043 vel_rot_max = vel_abs;
1045 "(axis nr. %d).", articularVelocity[i], i+1);
1050 if ( scale_rot_sat < 1 )
1051 scale_sat = scale_rot_sat;
1126 vel = cVe*eJe_*articularVelocity;
1131 vel = articularVelocity;
1138 vel = fJe_*articularVelocity;
1148 "Case not taken in account.");
1254 double velmax = fabs(q[0]);
1255 for (
unsigned int i = 1; i < 6; i++)
1257 if (velmax < fabs(q[i]))
1258 velmax = fabs(q[i]);
1345 "Modification of the robot state");
1362 for (
unsigned int i=0; i < 3; i++)
1379 qdes = articularCoordinates;
1384 error = qdes - articularCoordinates;
1401 "Position out of range.");
1403 }
while (errsqr > 1e-8 && nbSol > 0);
1413 error = q - articularCoordinates;
1426 }
while (errsqr > 1e-8);
1437 for (
unsigned int i=0; i < 3; i++)
1449 qdes = articularCoordinates;
1454 error = qdes - articularCoordinates;
1469 }
while (errsqr > 1e-8 && nbSol > 0);
1474 vpERROR_TRACE (
"Positionning error. Mixt frame not implemented");
1476 "Positionning error: "
1477 "Mixt frame not implemented.");
1556 position[0] = pos1 ;
1557 position[1] = pos2 ;
1558 position[2] = pos3 ;
1559 position[3] = pos4 ;
1560 position[4] = pos5 ;
1561 position[5] = pos6 ;
1617 "Bad position in filename.");
1713 for (
unsigned int i=0; i <3; i++)
1723 vpERROR_TRACE (
"Positionning error. Mixt frame not implemented");
1725 "Positionning error: "
1726 "Mixt frame not implemented.");
1787 for(
unsigned int j=0;j<3;j++)
1789 position[j]=posRxyz[j];
1790 position[j+3]=RtuVect[j];
1823 vpTRACE(
"Joint limit vector has not a size of 6 !");
1853 bool cond = fabs(q5-M_PI/2) < 1e-1;
1883 for (
unsigned int i = 0; i < 6; i++)
1885 if (articularCoordinates[i] <=
_joint_min[i])
1887 difft =
_joint_min[i] - articularCoordinates[i];
1891 artNumb = -(int)i-1;
1896 for (
unsigned int i = 0; i < 6; i++)
1898 if (articularCoordinates[i] >=
_joint_max[i])
1900 difft = articularCoordinates[i] -
_joint_max[i];
1904 artNumb = (int)(i+1);
1910 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs((
float)artNumb) <<
" on joint limit!" <<std::endl;
1927 vpSimulatorAfma6::getCameraDisplacement(
vpColVector &displacement)
1942 vpSimulatorAfma6::getArticularDisplacement(
vpColVector &displacement)
1975 if ( ! first_time_getdis )
1981 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1988 displacement = q_cur - q_prev_getdis;
1994 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
2001 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
2009 first_time_getdis =
false;
2013 q_prev_getdis = q_cur;
2066 fd = fopen(filename,
"r") ;
2070 char line[FILENAME_MAX];
2071 char dummy[FILENAME_MAX];
2073 bool sortie =
false;
2077 if (fgets (line, FILENAME_MAX, fd) != NULL) {
2078 if ( strncmp (line,
"#", 1) != 0) {
2080 if ( strncmp (line, head,
sizeof(head)-1) == 0) {
2093 while ( sortie !=
true );
2097 int ret = sscanf(line,
"%s %lf %lf %lf %lf %lf %lf",
2099 &q[0], &q[1], &q[2], &q[3], &q[4], &q[5]);
2144 fd = fopen(filename,
"w") ;
2149 #AFMA6 - Position - Version 2.01\n\
2152 # Joint position: X, Y, Z: translations in meters\n\
2153 # A, B, C: rotations in degrees\n\
2158 fprintf(fd,
"R: %lf %lf %lf %lf %lf %lf\n",
2309 std::string scene_dir_;
2310 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2311 bool sceneDirExists =
false;
2312 for(
size_t i=0; i < scene_dirs.size(); i++)
2314 scene_dir_ = scene_dirs[i];
2315 sceneDirExists =
true;
2318 if (! sceneDirExists) {
2321 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2324 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2329 unsigned int name_length = 30;
2330 if (scene_dir_.size() > FILENAME_MAX)
2332 unsigned int full_length = (
unsigned int)scene_dir_.size() + name_length;
2333 if (full_length > FILENAME_MAX)
2336 char *name_cam =
new char [full_length];
2338 strcpy(name_cam, scene_dir_.c_str());
2339 strcat(name_cam,
"/camera.bnd");
2342 if (arm_dir.size() > FILENAME_MAX)
2344 full_length = (
unsigned int)arm_dir.size() + name_length;
2345 if (full_length > FILENAME_MAX)
2348 char *name_arm =
new char [full_length];
2349 strcpy(name_arm, arm_dir.c_str());
2350 strcat(name_arm,
"/afma6_gate.bnd");
2351 std::cout <<
"name arm: " << name_arm << std::endl;
2353 strcpy(name_arm, arm_dir.c_str());
2354 strcat(name_arm,
"/afma6_arm1.bnd");
2356 strcpy(name_arm, arm_dir.c_str());
2357 strcat(name_arm,
"/afma6_arm2.bnd");
2359 strcpy(name_arm, arm_dir.c_str());
2360 strcat(name_arm,
"/afma6_arm3.bnd");
2362 strcpy(name_arm, arm_dir.c_str());
2363 strcat(name_arm,
"/afma6_arm4.bnd");
2368 strcpy(name_arm, arm_dir.c_str());
2371 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2375 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2379 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2383 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2389 add_rfstack(IS_BACK);
2391 add_vwstack (
"start",
"depth", 0.0, 100.0);
2392 add_vwstack (
"start",
"window", -0.1,0.1,-0.1,0.1);
2393 add_vwstack (
"start",
"type", PERSPECTIVE);
2407 bool changed =
false;
2411 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2434 float w44o[4][4],w44cext[4][4],x,y,z;
2438 add_vwstack (
"start",
"cop", w44cext[3][0],w44cext[3][1],w44cext[3][2]);
2439 x = w44cext[2][0] + w44cext[3][0];
2440 y = w44cext[2][1] + w44cext[3][1];
2441 z = w44cext[2][2] + w44cext[3][2];
2442 add_vwstack (
"start",
"vrp", x,y,z);
2443 add_vwstack (
"start",
"vpn", w44cext[2][0],w44cext[2][1],w44cext[2][2]);
2444 add_vwstack (
"start",
"vup", w44cext[1][0],w44cext[1][1],w44cext[1][2]);
2445 add_vwstack (
"start",
"window", -u, u, -v, v);
2453 vp2jlc_matrix(fMit[0],w44o);
2456 vp2jlc_matrix(fMit[2],w44o);
2459 vp2jlc_matrix(fMit[3],w44o);
2462 vp2jlc_matrix(fMit[4],w44o);
2465 vp2jlc_matrix(fMit[5],w44o);
2473 cMe = fMit[6] * cMe;
2474 vp2jlc_matrix(cMe,w44o);
2480 vp2jlc_matrix(
fMo,w44o);
2521 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2551 fMo = fMit[7] * cMo_;
2577 const double lambda = 5.;
2582 unsigned int i,iter=0;
2602 v = -lambda*cdRc.
t()*cdTc;
2609 err[i+3] = cdTUc[i];
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.
Definition of the vpMatrix class.
static const unsigned int njoint
Number of joint.
Error that can be emited by the vpRobot class and its derivates.
vpColVector get_artCoord()
unsigned int getWidth() const
void setMaxTranslationVelocity(const double maxVt)
void get_eJe(vpMatrix &eJe)
int getInverseKinematics(const vpHomogeneousMatrix &fMc, vpColVector &q, const bool &nearest=true, const bool &verbose=false) const
double getSamplingTime() const
vpAfma6ToolType getToolType() const
Get the current tool type.
The class provides a data structure for the homogeneous matrices as well as a set of operations on th...
virtual ~vpSimulatorAfma6()
unsigned int jointLimitArt
void get_cVe(vpVelocityTwistMatrix &cVe)
vpHomogeneousMatrix get_fMc(const vpColVector &q) const
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 ...
bool constantSamplingTimeMode
Flag used to force the sampling time in the thread computing the robot's displacement to a constant v...
bool singularityManagement
double getMaxTranslationVelocity(void) const
static const vpColor none
Initialize the position controller.
void get_eJe(const vpColVector &q, vpMatrix &eJe) const
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()
void track(const vpHomogeneousMatrix &cMo)
static const double defaultPositioningVelocity
vpRotationMatrix t() const
transpose
vpColVector get_velocity()
void getExternalImage(vpImage< vpRGBa > &I)
vpCameraParameters::vpCameraParametersProjType projModel
static double measureTimeMs()
double get_y() const
Get the point y coordinate in the image plane.
static int wait(double t0, double t)
static const vpColor green
static void flush(const vpImage< unsigned char > &I)
double getMaxRotationVelocity(void) const
vpThetaUVector buildFrom(const vpHomogeneousMatrix &M)
void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q)
vpRobot::vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState)
static bool readPosFile(const char *filename, vpColVector &q)
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)
The vpRotationMatrix considers the particular case of a rotation matrix.
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
bool singularityTest(const vpColVector q, vpMatrix &J)
vpDisplayRobotType displayType
Initialize the velocity controller.
vpCameraParameters cameraParam
void initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo)
void setExternalCameraPosition(const vpHomogeneousMatrix camMf_)
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 get_cMe(vpHomogeneousMatrix &cMe) const
vpRowVector t() const
Transpose of a vector.
void getInternalView(vpImage< vpRGBa > &I)
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &velocity)
Generic class defining intrinsic camera parameters.
vpHomogeneousMatrix get_cMo()
vpHomogeneousMatrix getExternalCameraPosition() const
void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q)
void extract(vpRotationMatrix &R) const
double get_x() const
Get the point x coordinate in the image plane.
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)
static Type minimum(const Type &a, const Type &b)
void setCameraParameters(const vpCameraParameters &cam)
Class that consider the particular case of twist transformation matrix that allows to transform a vel...
void set_velocity(const vpColVector &vel)
void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q)
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
Construction from translation vector and rotation matrix.
static double rad(double deg)
void setExternalCameraParameters(const vpCameraParameters &cam)
vpControlFrameType getRobotFrame(void) const
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
bool setVelocityCalled
Flag used to specify to the thread managing the robot displacements that the setVelocity() method has...
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)
Class that provides a data structure for the column vectors as well as a set of operations on these v...
double euclideanNorm() const
void get_fJe(vpMatrix &fJe)
The pose is a complete representation of every rigid motion in the euclidian space.
void computeArticularVelocity()
vpHomogeneousMatrix inverse() const
virtual vpRobotStateType getRobotState(void) const
unsigned int getHeight() const
Class that consider the case of the Euler angle using the x-y-z convention, where are respectively ...
void getCameraParameters(vpCameraParameters &cam, const unsigned int &image_width, const unsigned int &image_height)
vpControlFrameType setRobotFrame(vpRobot::vpControlFrameType newFrame)
void get_cMe(vpHomogeneousMatrix &cMe)
vpMatrix pseudoInverse(double svThreshold=1e-6) const
Compute the pseudo inverse of the matrix using the SVD.
static double measureTimeSecond()
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)
virtual void displayLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)=0
void set_artVel(const vpColVector &vel)
void get_fMi(vpHomogeneousMatrix *fMit)
unsigned int getRows() const
Return the number of rows of the matrix.
static const char *const CONST_CCMOP_CAMERA_NAME
pthread_mutex_t mutex_velocity
void get_fJe(const vpColVector &q, vpMatrix &fJe) const
Class that consider the case of a translation vector.
Class that consider the case of the parameterization for the rotation.
pthread_mutex_t mutex_artVel
static double minTimeForUsleepCall
vpHomogeneousMatrix camMf2
static bool savePosFile(const char *filename, const vpColVector &q)
void findHighestPositioningSpeed(vpColVector &q)
void setWorldCoordinates(const double ox, const double oy, const double oz)
Set the point world coordinates. We mean here the coordinates of the point in the object frame...
void resize(const unsigned int i, const bool flagNullify=true)