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.
Implementation of a matrix and operations on matrices.
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()
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.
Implementation of an homogeneous matrix and operations on such kind of matrices.
virtual ~vpSimulatorAfma6()
unsigned int jointLimitArt
void get_cVe(vpVelocityTwistMatrix &cVe)
double euclideanNorm() const
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)
VISP_EXPORT double measureTimeSecond()
bool constantSamplingTimeMode
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
vpColVector get_velocity()
static bool savePosFile(const std::string &filename, const vpColVector &q)
void getExternalImage(vpImage< vpRGBa > &I)
vpCameraParameters::vpCameraParametersProjType projModel
double get_y() const
Get the point y coordinate in the image plane.
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)
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)
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 get_cMe(vpHomogeneousMatrix &cMe) const
void setExternalCameraPosition(const vpHomogeneousMatrix &camMf_)
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)
bool singularityTest(const vpColVector &q, vpMatrix &J)
void extract(vpRotationMatrix &R) const
double get_x() const
Get the point x coordinate in the image plane.
static Type minimum(const Type &a, const Type &b)
void setCameraParameters(const vpCameraParameters &cam)
unsigned int getRows() const
void set_velocity(const vpColVector &vel)
void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q)
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
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
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)
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))
void get_fJe(vpMatrix &fJe)
Implementation of a pose vector and operations on poses.
void computeArticularVelocity()
vpHomogeneousMatrix inverse() const
virtual vpRobotStateType getRobotState(void) const
unsigned int getHeight() const
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)
void get_cMe(vpHomogeneousMatrix &cMe)
vpMatrix pseudoInverse(double svThreshold=1e-6) const
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
pthread_mutex_t mutex_velocity
void get_fJe(const vpColVector &q, vpMatrix &fJe) const
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)