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;
969 "functionality not implemented");
973 "functionality not implemented");
1003 articularVelocity = eJe_ * eVc * velocityframe;
1013 articularVelocity = fJe_ * velocityframe;
1018 articularVelocity = velocityframe;
1031 for (
unsigned int i = 0; i < 6; ++i) {
1032 double vel_abs = fabs(articularVelocity[i]);
1034 vel_rot_max = vel_abs;
1037 articularVelocity[i], i + 1);
1040 double scale_rot_sat = 1;
1041 double scale_sat = 1;
1044 if (scale_rot_sat < 1)
1045 scale_sat = scale_rot_sat;
1116 vel = cVe * eJe_ * articularVelocity;
1120 vel = articularVelocity;
1126 vel = fJe_ * articularVelocity;
1135 "Case not taken in account.");
1237 double velmax = fabs(q[0]);
1238 for (
unsigned int i = 1; i < 6; i++) {
1239 if (velmax < fabs(q[i]))
1240 velmax = fabs(q[i]);
1326 "Modification of the robot state");
1341 for (
unsigned int i = 0; i < 3; i++) {
1356 qdes = articularCoordinates;
1360 error = qdes - articularCoordinates;
1364 if (errsqr < 1e-4) {
1375 }
while (errsqr > 1e-8 && nbSol > 0);
1383 error = q - articularCoordinates;
1388 if (errsqr < 1e-4) {
1395 }
while (errsqr > 1e-8);
1405 for (
unsigned int i = 0; i < 3; i++) {
1415 qdes = articularCoordinates;
1419 error = qdes - articularCoordinates;
1423 if (errsqr < 1e-4) {
1432 }
while (errsqr > 1e-8 && nbSol > 0);
1436 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1438 "MIXT_FRAME not implemented.");
1441 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1443 "END_EFFECTOR_FRAME not implemented.");
1512 const double pos3,
const double pos4,
const double pos5,
const double pos6)
1666 for (
unsigned int i = 0; i < 3; i++) {
1675 "Mixt frame not implemented.");
1679 "End-effector frame not implemented.");
1737 for (
unsigned int j = 0; j < 3; j++) {
1738 position[j] = posRxyz[j];
1739 position[j + 3] = RtuVect[j];
1773 vpTRACE(
"Joint limit vector has not a size of 6 !");
1801 bool cond = fabs(q5 - M_PI / 2) < 1e-1;
1829 for (
unsigned int i = 0; i < 6; i++) {
1830 if (articularCoordinates[i] <=
_joint_min[i]) {
1831 difft =
_joint_min[i] - articularCoordinates[i];
1834 artNumb = -(int)i - 1;
1839 for (
unsigned int i = 0; i < 6; i++) {
1840 if (articularCoordinates[i] >=
_joint_max[i]) {
1841 difft = articularCoordinates[i] -
_joint_max[i];
1844 artNumb = (int)(i + 1);
1850 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs((
float)artNumb) <<
" on joint limit!" 1881 if (!first_time_getdis) {
1884 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1888 displacement = q_cur - q_prev_getdis;
1892 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
1896 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
1900 std::cout <<
"getDisplacement() END_EFFECTOR_FRAME not implemented\n";
1905 first_time_getdis =
false;
1909 q_prev_getdis = q_cur;
1961 std::ifstream fd(filename.c_str(), std::ios::in);
1963 if (!fd.is_open()) {
1968 std::string key(
"R:");
1969 std::string id(
"#AFMA6 - Position");
1970 bool pos_found =
false;
1975 while (std::getline(fd, line)) {
1978 if (!(line.compare(0,
id.size(), id) == 0)) {
1979 std::cout <<
"Error: this position file " << filename <<
" is not for Afma6 robot" << std::endl;
1983 if ((line.compare(0, 1,
"#") == 0)) {
1986 if ((line.compare(0, key.size(), key) == 0)) {
1989 if (chain.size() <
njoint + 1)
1991 if (chain.size() <
njoint + 1)
1994 std::istringstream ss(line);
1997 for (
unsigned int i = 0; i <
njoint; i++)
2012 std::cout <<
"Error: unable to find a position for Afma6 robot in " << filename << std::endl;
2044 fd = fopen(filename.c_str(),
"w");
2049 #AFMA6 - Position - Version 2.01\n\ 2052 # Joint position: X, Y, Z: translations in meters\n\ 2053 # A, B, C: rotations in degrees\n\ 2183 std::string scene_dir_;
2184 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2185 bool sceneDirExists =
false;
2186 for (
size_t i = 0; i < scene_dirs.size(); i++)
2188 scene_dir_ = scene_dirs[i];
2189 sceneDirExists =
true;
2192 if (!sceneDirExists) {
2195 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2197 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2201 unsigned int name_length = 30;
2202 if (scene_dir_.size() > FILENAME_MAX)
2204 unsigned int full_length = (
unsigned int)scene_dir_.size() + name_length;
2205 if (full_length > FILENAME_MAX)
2208 char *name_cam =
new char[full_length];
2210 strcpy(name_cam, scene_dir_.c_str());
2211 strcat(name_cam,
"/camera.bnd");
2214 if (arm_dir.size() > FILENAME_MAX)
2216 full_length = (
unsigned int)arm_dir.size() + name_length;
2217 if (full_length > FILENAME_MAX)
2220 char *name_arm =
new char[full_length];
2221 strcpy(name_arm, arm_dir.c_str());
2222 strcat(name_arm,
"/afma6_gate.bnd");
2223 std::cout <<
"name arm: " << name_arm << std::endl;
2225 strcpy(name_arm, arm_dir.c_str());
2226 strcat(name_arm,
"/afma6_arm1.bnd");
2227 set_scene(name_arm,
robotArms + 1, 1.0);
2228 strcpy(name_arm, arm_dir.c_str());
2229 strcat(name_arm,
"/afma6_arm2.bnd");
2230 set_scene(name_arm,
robotArms + 2, 1.0);
2231 strcpy(name_arm, arm_dir.c_str());
2232 strcat(name_arm,
"/afma6_arm3.bnd");
2233 set_scene(name_arm,
robotArms + 3, 1.0);
2234 strcpy(name_arm, arm_dir.c_str());
2235 strcat(name_arm,
"/afma6_arm4.bnd");
2236 set_scene(name_arm,
robotArms + 4, 1.0);
2240 strcpy(name_arm, arm_dir.c_str());
2243 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2247 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2251 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2255 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
2259 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2263 set_scene(name_arm,
robotArms + 5, 1.0);
2265 add_rfstack(IS_BACK);
2267 add_vwstack(
"start",
"depth", 0.0, 100.0);
2268 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
2269 add_vwstack(
"start",
"type", PERSPECTIVE);
2281 bool changed =
false;
2285 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2305 float w44o[4][4], w44cext[4][4], x, y, z;
2309 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
2310 x = w44cext[2][0] + w44cext[3][0];
2311 y = w44cext[2][1] + w44cext[3][1];
2312 z = w44cext[2][2] + w44cext[3][2];
2313 add_vwstack(
"start",
"vrp", x, y, z);
2314 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
2315 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
2316 add_vwstack(
"start",
"window", -u, u, -v, v);
2324 vp2jlc_matrix(fMit[0], w44o);
2327 vp2jlc_matrix(fMit[2], w44o);
2330 vp2jlc_matrix(fMit[3], w44o);
2333 vp2jlc_matrix(fMit[4], w44o);
2336 vp2jlc_matrix(fMit[5], w44o);
2343 cMe = fMit[6] * cMe;
2344 vp2jlc_matrix(cMe, w44o);
2349 vp2jlc_matrix(
fMo, w44o);
2390 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2420 fMo = fMit[7] * cMo_;
2449 const double lambda = 5.;
2453 unsigned int i, iter = 0;
2471 v = -lambda * cdRc.
t() * cdTc;
2472 w = -lambda * cdTUc;
2473 for (i = 0; i < 3; ++i) {
2477 err[i + 3] = cdTUc[i];
2496 #elif !defined(VISP_BUILD_SHARED_LIBS) 2499 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)
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)