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");
392 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
396 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
400 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
423 const unsigned int &image_height)
432 if (image_width == 640 && image_height == 480) {
437 vpTRACE(
"Cannot get default intrinsic camera parameters for this image " 444 if (image_width == 640 && image_height == 480) {
449 vpTRACE(
"Cannot get default intrinsic camera parameters for this image " 455 std::cout <<
"The generic tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
459 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
463 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
467 std::cout <<
"The vacuum tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
521 double tcur_1 =
tcur;
534 double ellapsedTime = (
tcur -
tprev) * 1e-3;
553 articularVelocities = 0.0;
558 articularCoordinates[0] = articularCoordinates[0] + ellapsedTime * articularVelocities[0];
559 articularCoordinates[1] = articularCoordinates[1] + ellapsedTime * articularVelocities[1];
560 articularCoordinates[2] = articularCoordinates[2] + ellapsedTime * articularVelocities[2];
561 articularCoordinates[3] = articularCoordinates[3] + ellapsedTime * articularVelocities[3];
562 articularCoordinates[4] = articularCoordinates[4] + ellapsedTime * articularVelocities[4];
563 articularCoordinates[5] = articularCoordinates[5] + ellapsedTime * articularVelocities[5];
569 ellapsedTime = (
_joint_min[(
unsigned int)(-jl - 1)] - articularCoordinates[(
unsigned int)(-jl - 1)]) /
570 (articularVelocities[(
unsigned int)(-jl - 1)]);
572 ellapsedTime = (
_joint_max[(
unsigned int)(jl - 1)] - articularCoordinates[(
unsigned int)(jl - 1)]) /
573 (articularVelocities[(
unsigned int)(jl - 1)]);
575 for (
unsigned int i = 0; i < 6; i++)
576 articularCoordinates[i] = articularCoordinates[i] + ellapsedTime * articularVelocities[i];
615 for (
unsigned int k = 1; k < 7; k++) {
725 fMit[4][0][0] = s4 * s5;
726 fMit[4][1][0] = -c4 * s5;
728 fMit[4][0][1] = s4 * c5;
729 fMit[4][1][1] = -c4 * c5;
734 fMit[4][0][3] = c4 * this->
_long_56 + q1;
735 fMit[4][1][3] = s4 * this->
_long_56 + q2;
738 fMit[5][0][0] = s4 * s5 * c6 + c4 * s6;
739 fMit[5][1][0] = -c4 * s5 * c6 + s4 * s6;
740 fMit[5][2][0] = c5 * c6;
741 fMit[5][0][1] = -s4 * s5 * s6 + c4 * c6;
742 fMit[5][1][1] = c4 * s5 * s6 + s4 * c6;
743 fMit[5][2][1] = -c5 * s6;
744 fMit[5][0][2] = -s4 * c5;
745 fMit[5][1][2] = c4 * c5;
747 fMit[5][0][3] = c4 * this->
_long_56 + q1;
748 fMit[5][1][3] = s4 * this->
_long_56 + q2;
751 fMit[6][0][0] = fMit[5][0][0];
752 fMit[6][1][0] = fMit[5][1][0];
753 fMit[6][2][0] = fMit[5][2][0];
754 fMit[6][0][1] = fMit[5][0][1];
755 fMit[6][1][1] = fMit[5][1][1];
756 fMit[6][2][1] = fMit[5][2][1];
757 fMit[6][0][2] = fMit[5][0][2];
758 fMit[6][1][2] = fMit[5][1][2];
759 fMit[6][2][2] = fMit[5][2][2];
760 fMit[6][0][3] = fMit[5][0][3];
761 fMit[6][1][3] = fMit[5][1][3];
762 fMit[6][2][3] = fMit[5][2][3];
771 #if defined(WINRT_8_1) 772 WaitForSingleObjectEx(
mutex_fMi, INFINITE, FALSE);
774 WaitForSingleObject(
mutex_fMi, INFINITE);
776 for (
int i = 0; i < 8; i++)
779 #elif defined(VISP_HAVE_PTHREAD) 781 for (
int i = 0; i < 8; i++)
804 std::cout <<
"Change the control mode from velocity to position control.\n";
814 std::cout <<
"Change the control mode from stop to velocity control.\n";
903 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
905 "Cannot send a velocity to the robot " 906 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
911 double scale_sat = 1;
923 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
927 for (
unsigned int i = 0; i < 3; ++i) {
928 vel_abs = fabs(vel[i]);
930 vel_trans_max = vel_abs;
936 vel_abs = fabs(vel[i + 3]);
938 vel_rot_max = vel_abs;
945 double scale_trans_sat = 1;
946 double scale_rot_sat = 1;
953 if ((scale_trans_sat < 1) || (scale_rot_sat < 1)) {
954 if (scale_trans_sat < scale_rot_sat)
955 scale_sat = scale_trans_sat;
957 scale_sat = scale_rot_sat;
965 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
968 for (
unsigned int i = 0; i < 6; ++i) {
969 vel_abs = fabs(vel[i]);
971 vel_rot_max = vel_abs;
977 double scale_rot_sat = 1;
980 if (scale_rot_sat < 1)
981 scale_sat = scale_rot_sat;
986 "functionality not implemented");
990 "functionality not implemented");
1020 articularVelocity = eJe_ * eVc * velocityframe;
1030 articularVelocity = fJe_ * velocityframe;
1035 articularVelocity = velocityframe;
1048 for (
unsigned int i = 0; i < 6; ++i) {
1049 double vel_abs = fabs(articularVelocity[i]);
1051 vel_rot_max = vel_abs;
1054 articularVelocity[i], i + 1);
1057 double scale_rot_sat = 1;
1058 double scale_sat = 1;
1061 if (scale_rot_sat < 1)
1062 scale_sat = scale_rot_sat;
1132 vel = cVe * eJe_ * articularVelocity;
1136 vel = articularVelocity;
1142 vel = fJe_ * articularVelocity;
1151 "Case not taken in account.");
1252 double velmax = fabs(q[0]);
1253 for (
unsigned int i = 1; i < 6; i++) {
1254 if (velmax < fabs(q[i]))
1255 velmax = fabs(q[i]);
1340 "Modification of the robot state");
1355 for (
unsigned int i = 0; i < 3; i++) {
1370 qdes = articularCoordinates;
1374 error = qdes - articularCoordinates;
1378 if (errsqr < 1e-4) {
1389 }
while (errsqr > 1e-8 && nbSol > 0);
1397 error = q - articularCoordinates;
1402 if (errsqr < 1e-4) {
1409 }
while (errsqr > 1e-8);
1419 for (
unsigned int i = 0; i < 3; i++) {
1429 qdes = articularCoordinates;
1433 error = qdes - articularCoordinates;
1437 if (errsqr < 1e-4) {
1446 }
while (errsqr > 1e-8 && nbSol > 0);
1450 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1452 "MIXT_FRAME not implemented.");
1455 vpERROR_TRACE(
"Positionning error. Mixt frame not implemented");
1457 "END_EFFECTOR_FRAME not implemented.");
1525 double pos3,
double pos4,
double pos5,
double pos6)
1677 for (
unsigned int i = 0; i < 3; i++) {
1686 "Mixt frame not implemented.");
1690 "End-effector frame not implemented.");
1748 for (
unsigned int j = 0; j < 3; j++) {
1749 position[j] = posRxyz[j];
1750 position[j + 3] = RtuVect[j];
1784 vpTRACE(
"Joint limit vector has not a size of 6 !");
1812 bool cond = fabs(q5 - M_PI / 2) < 1e-1;
1840 for (
unsigned int i = 0; i < 6; i++) {
1841 if (articularCoordinates[i] <=
_joint_min[i]) {
1842 difft =
_joint_min[i] - articularCoordinates[i];
1845 artNumb = -(int)i - 1;
1850 for (
unsigned int i = 0; i < 6; i++) {
1851 if (articularCoordinates[i] >=
_joint_max[i]) {
1852 difft = articularCoordinates[i] -
_joint_max[i];
1855 artNumb = (int)(i + 1);
1861 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs((
float)artNumb) <<
" on joint limit!" 1892 if (!first_time_getdis) {
1895 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1899 displacement = q_cur - q_prev_getdis;
1903 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
1907 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
1911 std::cout <<
"getDisplacement() END_EFFECTOR_FRAME not implemented\n";
1916 first_time_getdis =
false;
1920 q_prev_getdis = q_cur;
1972 std::ifstream fd(filename.c_str(), std::ios::in);
1974 if (!fd.is_open()) {
1979 std::string key(
"R:");
1980 std::string id(
"#AFMA6 - Position");
1981 bool pos_found =
false;
1986 while (std::getline(fd, line)) {
1989 if (!(line.compare(0,
id.size(), id) == 0)) {
1990 std::cout <<
"Error: this position file " << filename <<
" is not for Afma6 robot" << std::endl;
1994 if ((line.compare(0, 1,
"#") == 0)) {
1997 if ((line.compare(0, key.size(), key) == 0)) {
2000 if (chain.size() <
njoint + 1)
2002 if (chain.size() <
njoint + 1)
2005 std::istringstream ss(line);
2008 for (
unsigned int i = 0; i <
njoint; i++)
2023 std::cout <<
"Error: unable to find a position for Afma6 robot in " << filename << std::endl;
2055 fd = fopen(filename.c_str(),
"w");
2060 #AFMA6 - Position - Version 2.01\n\ 2063 # Joint position: X, Y, Z: translations in meters\n\ 2064 # A, B, C: rotations in degrees\n\ 2194 std::string scene_dir_;
2195 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2196 bool sceneDirExists =
false;
2197 for (
size_t i = 0; i < scene_dirs.size(); i++)
2199 scene_dir_ = scene_dirs[i];
2200 sceneDirExists =
true;
2203 if (!sceneDirExists) {
2206 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2208 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2212 unsigned int name_length = 30;
2213 if (scene_dir_.size() > FILENAME_MAX)
2215 unsigned int full_length = (
unsigned int)scene_dir_.size() + name_length;
2216 if (full_length > FILENAME_MAX)
2219 char *name_cam =
new char[full_length];
2221 strcpy(name_cam, scene_dir_.c_str());
2222 strcat(name_cam,
"/camera.bnd");
2225 if (arm_dir.size() > FILENAME_MAX)
2227 full_length = (
unsigned int)arm_dir.size() + name_length;
2228 if (full_length > FILENAME_MAX)
2231 char *name_arm =
new char[full_length];
2232 strcpy(name_arm, arm_dir.c_str());
2233 strcat(name_arm,
"/afma6_gate.bnd");
2234 std::cout <<
"name arm: " << name_arm << std::endl;
2236 strcpy(name_arm, arm_dir.c_str());
2237 strcat(name_arm,
"/afma6_arm1.bnd");
2238 set_scene(name_arm,
robotArms + 1, 1.0);
2239 strcpy(name_arm, arm_dir.c_str());
2240 strcat(name_arm,
"/afma6_arm2.bnd");
2241 set_scene(name_arm,
robotArms + 2, 1.0);
2242 strcpy(name_arm, arm_dir.c_str());
2243 strcat(name_arm,
"/afma6_arm3.bnd");
2244 set_scene(name_arm,
robotArms + 3, 1.0);
2245 strcpy(name_arm, arm_dir.c_str());
2246 strcat(name_arm,
"/afma6_arm4.bnd");
2247 set_scene(name_arm,
robotArms + 4, 1.0);
2251 strcpy(name_arm, arm_dir.c_str());
2254 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2258 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2262 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2266 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
2270 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2274 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2278 set_scene(name_arm,
robotArms + 5, 1.0);
2280 add_rfstack(IS_BACK);
2282 add_vwstack(
"start",
"depth", 0.0, 100.0);
2283 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
2284 add_vwstack(
"start",
"type", PERSPECTIVE);
2296 bool changed =
false;
2300 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2320 float w44o[4][4], w44cext[4][4], x, y, z;
2324 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
2325 x = w44cext[2][0] + w44cext[3][0];
2326 y = w44cext[2][1] + w44cext[3][1];
2327 z = w44cext[2][2] + w44cext[3][2];
2328 add_vwstack(
"start",
"vrp", x, y, z);
2329 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
2330 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
2331 add_vwstack(
"start",
"window", -u, u, -v, v);
2339 vp2jlc_matrix(fMit[0], w44o);
2342 vp2jlc_matrix(fMit[2], w44o);
2345 vp2jlc_matrix(fMit[3], w44o);
2348 vp2jlc_matrix(fMit[4], w44o);
2351 vp2jlc_matrix(fMit[5], w44o);
2358 cMe = fMit[6] * cMe;
2359 vp2jlc_matrix(cMe, w44o);
2364 vp2jlc_matrix(
fMo, w44o);
2405 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2435 fMo = fMit[7] * cMo_;
2464 const double lambda = 5.;
2468 unsigned int i, iter = 0;
2486 v = -lambda * cdRc.
t() * cdTc;
2487 w = -lambda * cdTUc;
2488 for (i = 0; i < 3; ++i) {
2492 err[i + 3] = cdTUc[i];
2511 #elif !defined(VISP_BUILD_SHARED_LIBS) 2514 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.
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()
double frobeniusNorm() const
vpHomogeneousMatrix getExternalCameraPosition() const
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)
void setMaxRotationVelocity(double maxVr)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
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 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)
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
Stops robot motion especially in velocity and acceleration control.
This class aims to be a basis used to create all the simulators of robots.
vpHomogeneousMatrix * fMi
pthread_mutex_t mutex_fMi
void resize(unsigned int i, bool flagNullify=true)
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)
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
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
void setMaxTranslationVelocity(double maxVt)
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)