36 #include <visp3/core/vpConfig.h>
37 #if defined(VISP_HAVE_MODULE_GUI) && defined(VISP_HAVE_THREADS)
41 #include <visp3/core/vpImagePoint.h>
42 #include <visp3/core/vpIoTools.h>
43 #include <visp3/core/vpMeterPixelConversion.h>
44 #include <visp3/core/vpPoint.h>
45 #include <visp3/core/vpTime.h>
46 #include <visp3/robot/vpRobotException.h>
47 #include <visp3/robot/vpSimulatorAfma6.h>
49 #include "../wireframe-simulator/vpBound.h"
50 #include "../wireframe-simulator/vpRfstack.h"
51 #include "../wireframe-simulator/vpScene.h"
52 #include "../wireframe-simulator/vpVwstack.h"
61 positioningVelocity(defaultPositioningVelocity), zeroPos(), reposPos(), toolCustom(false), arm_dir()
81 positioningVelocity(defaultPositioningVelocity), zeroPos(), reposPos(), toolCustom(false), arm_dir()
105 for (
int i = 0; i < 6; i++)
126 std::vector<std::string> arm_dirs =
vpIoTools::splitChain(std::string(VISP_ROBOT_ARMS_DIR), std::string(
";"));
127 bool armDirExists =
false;
128 for (
size_t i = 0; i < arm_dirs.size(); i++)
130 arm_dir = arm_dirs[i];
137 std::cout <<
"The simulator uses data from VISP_ROBOT_ARMS_DIR=" << arm_dir << std::endl;
140 std::cout <<
"Cannot get VISP_ROBOT_ARMS_DIR environment variable" << std::endl;
156 reposPos[1] = -M_PI / 2;
158 reposPos[4] = M_PI / 2;
165 first_time_getdis =
true;
226 unsigned int name_length = 30;
227 if (arm_dir.size() > FILENAME_MAX)
229 unsigned int full_length = (
unsigned int)arm_dir.size() + name_length;
230 if (full_length > FILENAME_MAX)
249 char *name_arm =
new char[full_length];
250 strcpy(name_arm, arm_dir.c_str());
251 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
272 char *name_arm =
new char[full_length];
273 strcpy(name_arm, arm_dir.c_str());
274 strcat(name_arm,
"/afma6_tool_gripper.bnd");
296 char *name_arm =
new char[full_length];
298 strcpy(name_arm, arm_dir.c_str());
299 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
307 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
311 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
315 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
341 const unsigned int &image_height)
350 if (image_width == 640 && image_height == 480) {
356 vpTRACE(
"Cannot get default intrinsic camera parameters for this image "
363 if (image_width == 640 && image_height == 480) {
369 vpTRACE(
"Cannot get default intrinsic camera parameters for this image "
375 std::cout <<
"The generic tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
379 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
383 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
387 std::cout <<
"The vacuum tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
441 double tcur_1 =
tcur;
444 bool setVelocityCalled_ =
false;
461 double ellapsedTime = (
tcur -
tprev) * 1e-3;
480 articularVelocities = 0.0;
486 articularCoordinates[0] = articularCoordinates[0] + ellapsedTime * articularVelocities[0];
487 articularCoordinates[1] = articularCoordinates[1] + ellapsedTime * articularVelocities[1];
488 articularCoordinates[2] = articularCoordinates[2] + ellapsedTime * articularVelocities[2];
489 articularCoordinates[3] = articularCoordinates[3] + ellapsedTime * articularVelocities[3];
490 articularCoordinates[4] = articularCoordinates[4] + ellapsedTime * articularVelocities[4];
491 articularCoordinates[5] = articularCoordinates[5] + ellapsedTime * articularVelocities[5];
497 ellapsedTime = (
_joint_min[(
unsigned int)(-jl - 1)] - articularCoordinates[(
unsigned int)(-jl - 1)]) /
498 (articularVelocities[(
unsigned int)(-jl - 1)]);
500 ellapsedTime = (
_joint_max[(
unsigned int)(jl - 1)] - articularCoordinates[(
unsigned int)(jl - 1)]) /
501 (articularVelocities[(
unsigned int)(jl - 1)]);
503 for (
unsigned int i = 0; i < 6; i++)
504 articularCoordinates[i] = articularCoordinates[i] + ellapsedTime * articularVelocities[i];
544 for (
unsigned int k = 1; k < 7; k++) {
659 fMit[4][0][0] = s4 * s5;
660 fMit[4][1][0] = -c4 * s5;
662 fMit[4][0][1] = s4 * c5;
663 fMit[4][1][1] = -c4 * c5;
668 fMit[4][0][3] = c4 * this->
_long_56 + q1;
669 fMit[4][1][3] = s4 * this->
_long_56 + q2;
672 fMit[5][0][0] = s4 * s5 * c6 + c4 * s6;
673 fMit[5][1][0] = -c4 * s5 * c6 + s4 * s6;
674 fMit[5][2][0] = c5 * c6;
675 fMit[5][0][1] = -s4 * s5 * s6 + c4 * c6;
676 fMit[5][1][1] = c4 * s5 * s6 + s4 * c6;
677 fMit[5][2][1] = -c5 * s6;
678 fMit[5][0][2] = -s4 * c5;
679 fMit[5][1][2] = c4 * c5;
681 fMit[5][0][3] = c4 * this->
_long_56 + q1;
682 fMit[5][1][3] = s4 * this->
_long_56 + q2;
685 fMit[6][0][0] = fMit[5][0][0];
686 fMit[6][1][0] = fMit[5][1][0];
687 fMit[6][2][0] = fMit[5][2][0];
688 fMit[6][0][1] = fMit[5][0][1];
689 fMit[6][1][1] = fMit[5][1][1];
690 fMit[6][2][1] = fMit[5][2][1];
691 fMit[6][0][2] = fMit[5][0][2];
692 fMit[6][1][2] = fMit[5][1][2];
693 fMit[6][2][2] = fMit[5][2][2];
694 fMit[6][0][3] = fMit[5][0][3];
695 fMit[6][1][3] = fMit[5][1][3];
696 fMit[6][2][3] = fMit[5][2][3];
707 for (
int i = 0; i < 8; i++) {
730 std::cout <<
"Change the control mode from velocity to position control.\n";
741 std::cout <<
"Change the control mode from stop to velocity control.\n";
830 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
832 "Cannot send a velocity to the robot "
833 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
838 double scale_sat = 1;
850 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
854 for (
unsigned int i = 0; i < 3; ++i) {
855 vel_abs = fabs(vel[i]);
857 vel_trans_max = vel_abs;
863 vel_abs = fabs(vel[i + 3]);
865 vel_rot_max = vel_abs;
872 double scale_trans_sat = 1;
873 double scale_rot_sat = 1;
880 if ((scale_trans_sat < 1) || (scale_rot_sat < 1)) {
881 if (scale_trans_sat < scale_rot_sat)
882 scale_sat = scale_trans_sat;
884 scale_sat = scale_rot_sat;
892 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
895 for (
unsigned int i = 0; i < 6; ++i) {
896 vel_abs = fabs(vel[i]);
898 vel_rot_max = vel_abs;
904 double scale_rot_sat = 1;
907 if (scale_rot_sat < 1)
908 scale_sat = scale_rot_sat;
913 "functionality not implemented");
917 "functionality not implemented");
957 articularVelocity = eJe_ * eVc * velocityframe;
967 articularVelocity = fJe_ * velocityframe;
972 articularVelocity = velocityframe;
985 for (
unsigned int i = 0; i < 6; ++i) {
986 double vel_abs = fabs(articularVelocity[i]);
988 vel_rot_max = vel_abs;
991 articularVelocity[i], i + 1);
994 double scale_rot_sat = 1;
995 double scale_sat = 1;
998 if (scale_rot_sat < 1)
999 scale_sat = scale_rot_sat;
1069 vel = cVe * eJe_ * articularVelocity;
1073 vel = articularVelocity;
1079 vel = fJe_ * articularVelocity;
1088 "Case not taken in account.");
1189 double velmax = fabs(q[0]);
1190 for (
unsigned int i = 1; i < 6; i++) {
1191 if (velmax < fabs(q[i]))
1192 velmax = fabs(q[i]);
1277 "Modification of the robot state");
1292 for (
unsigned int i = 0; i < 3; i++) {
1307 qdes = articularCoordinates;
1315 error = qdes - articularCoordinates;
1319 if (errsqr < 1e-4) {
1331 }
while (errsqr > 1e-8 && nbSol > 0);
1339 error = q - articularCoordinates;
1346 if (errsqr < 1e-4) {
1353 }
while (errsqr > 1e-8);
1363 for (
unsigned int i = 0; i < 3; i++) {
1373 qdes = articularCoordinates;
1379 error = qdes - articularCoordinates;
1383 if (errsqr < 1e-4) {
1393 }
while (errsqr > 1e-8 && nbSol > 0);
1397 vpERROR_TRACE(
"Positioning error. Mixt frame not implemented");
1399 "MIXT_FRAME not implemented.");
1402 vpERROR_TRACE(
"Positioning error. Mixt frame not implemented");
1404 "END_EFFECTOR_FRAME not implemented.");
1472 double pos4,
double pos5,
double pos6)
1625 for (
unsigned int i = 0; i < 3; i++) {
1634 "Mixt frame not implemented.");
1638 "End-effector frame not implemented.");
1696 for (
unsigned int j = 0; j < 3; j++) {
1697 position[j] = posRxyz[j];
1698 position[j + 3] = RtuVect[j];
1732 vpTRACE(
"Joint limit vector has not a size of 6 !");
1760 bool cond = fabs(q5 - M_PI / 2) < 1e-1;
1788 for (
unsigned int i = 0; i < 6; i++) {
1789 if (articularCoordinates[i] <=
_joint_min[i]) {
1790 difft =
_joint_min[i] - articularCoordinates[i];
1793 artNumb = -(int)i - 1;
1798 for (
unsigned int i = 0; i < 6; i++) {
1799 if (articularCoordinates[i] >=
_joint_max[i]) {
1800 difft = articularCoordinates[i] -
_joint_max[i];
1803 artNumb = (int)(i + 1);
1809 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs((
float)artNumb) <<
" on joint limit!"
1840 if (!first_time_getdis) {
1843 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1847 displacement = q_cur - q_prev_getdis;
1851 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
1855 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
1859 std::cout <<
"getDisplacement() END_EFFECTOR_FRAME not implemented\n";
1865 first_time_getdis =
false;
1869 q_prev_getdis = q_cur;
1921 std::ifstream fd(filename.c_str(), std::ios::in);
1923 if (!fd.is_open()) {
1928 std::string key(
"R:");
1929 std::string id(
"#AFMA6 - Position");
1930 bool pos_found =
false;
1935 while (std::getline(fd, line)) {
1938 if (!(line.compare(0,
id.size(),
id) == 0)) {
1939 std::cout <<
"Error: this position file " << filename <<
" is not for Afma6 robot" << std::endl;
1943 if ((line.compare(0, 1,
"#") == 0)) {
1946 if ((line.compare(0, key.size(), key) == 0)) {
1949 if (chain.size() <
njoint + 1)
1951 if (chain.size() <
njoint + 1)
1954 std::istringstream ss(line);
1957 for (
unsigned int i = 0; i <
njoint; i++)
1972 std::cout <<
"Error: unable to find a position for Afma6 robot in " << filename << std::endl;
2004 fd = fopen(filename.c_str(),
"w");
2009 #AFMA6 - Position - Version 2.01\n\
2012 # Joint position: X, Y, Z: translations in meters\n\
2013 # A, B, C: rotations in degrees\n\
2146 std::string scene_dir_;
2147 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2148 bool sceneDirExists =
false;
2149 for (
size_t i = 0; i < scene_dirs.size(); i++)
2151 scene_dir_ = scene_dirs[i];
2152 sceneDirExists =
true;
2155 if (!sceneDirExists) {
2158 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2161 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2165 unsigned int name_length = 30;
2166 if (scene_dir_.size() > FILENAME_MAX)
2168 unsigned int full_length = (
unsigned int)scene_dir_.size() + name_length;
2169 if (full_length > FILENAME_MAX)
2172 char *name_cam =
new char[full_length];
2174 strcpy(name_cam, scene_dir_.c_str());
2175 strcat(name_cam,
"/camera.bnd");
2178 if (arm_dir.size() > FILENAME_MAX)
2180 full_length = (
unsigned int)arm_dir.size() + name_length;
2181 if (full_length > FILENAME_MAX)
2184 char *name_arm =
new char[full_length];
2185 strcpy(name_arm, arm_dir.c_str());
2186 strcat(name_arm,
"/afma6_gate.bnd");
2187 std::cout <<
"name arm: " << name_arm << std::endl;
2189 strcpy(name_arm, arm_dir.c_str());
2190 strcat(name_arm,
"/afma6_arm1.bnd");
2191 set_scene(name_arm,
robotArms + 1, 1.0);
2192 strcpy(name_arm, arm_dir.c_str());
2193 strcat(name_arm,
"/afma6_arm2.bnd");
2194 set_scene(name_arm,
robotArms + 2, 1.0);
2195 strcpy(name_arm, arm_dir.c_str());
2196 strcat(name_arm,
"/afma6_arm3.bnd");
2197 set_scene(name_arm,
robotArms + 3, 1.0);
2198 strcpy(name_arm, arm_dir.c_str());
2199 strcat(name_arm,
"/afma6_arm4.bnd");
2200 set_scene(name_arm,
robotArms + 4, 1.0);
2204 strcpy(name_arm, arm_dir.c_str());
2207 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2211 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2215 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2219 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
2223 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2227 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2231 set_scene(name_arm,
robotArms + 5, 1.0);
2233 add_rfstack(IS_BACK);
2235 add_vwstack(
"start",
"depth", 0.0, 100.0);
2236 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
2237 add_vwstack(
"start",
"type", PERSPECTIVE);
2250 bool changed =
false;
2254 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2275 float w44o[4][4], w44cext[4][4], x, y, z;
2279 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
2280 x = w44cext[2][0] + w44cext[3][0];
2281 y = w44cext[2][1] + w44cext[3][1];
2282 z = w44cext[2][2] + w44cext[3][2];
2283 add_vwstack(
"start",
"vrp", x, y, z);
2284 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
2285 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
2286 add_vwstack(
"start",
"window", -u, u, -v, v);
2294 vp2jlc_matrix(fMit[0], w44o);
2297 vp2jlc_matrix(fMit[2], w44o);
2300 vp2jlc_matrix(fMit[3], w44o);
2303 vp2jlc_matrix(fMit[4], w44o);
2306 vp2jlc_matrix(fMit[5], w44o);
2313 cMe = fMit[6] * cMe;
2314 vp2jlc_matrix(cMe, w44o);
2319 vp2jlc_matrix(
fMo, w44o);
2362 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2394 fMo = fMit[7] * cMo_;
2424 const double lambda = 5.;
2428 unsigned int i, iter = 0;
2433 if (Iint !=
nullptr) {
2446 v = -lambda * cdRc.
t() * cdTc;
2447 w = -lambda * cdTUc;
2448 for (i = 0; i < 3; ++i) {
2452 err[i + 3] = cdTUc[i];
2471 #elif !defined(VISP_BUILD_SHARED_LIBS)
2474 void dummy_vpSimulatorAfma6() { };
Modelization of Irisa's gantry robot named Afma6.
static const char *const CONST_CCMOP_CAMERA_NAME
static const unsigned int njoint
Number of joint.
int getInverseKinematics(const vpHomogeneousMatrix &fMc, vpColVector &q, const bool &nearest=true, const bool &verbose=false) const
void get_cMe(vpHomogeneousMatrix &cMe) const
void setToolType(vpAfma6::vpAfma6ToolType tool)
Set the current tool type.
vpAfma6ToolType getToolType() const
Get the current tool type.
static const char *const CONST_GRIPPER_CAMERA_NAME
vpHomogeneousMatrix get_fMc(const vpColVector &q) const
vpCameraParameters::vpCameraParametersProjType projModel
void get_eJe(const vpColVector &q, vpMatrix &eJe) const
void get_fJe(const vpColVector &q, vpMatrix &fJe) const
vpAfma6ToolType
List of possible tools that can be attached to the robot end-effector.
unsigned int getRows() const
Generic class defining intrinsic camera parameters.
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
vpCameraParametersProjType
Implementation of column vector and the associated operations.
double frobeniusNorm() const
void resize(unsigned int i, bool flagNullify=true)
static const vpColor none
static const vpColor green
static void display(const vpImage< unsigned char > &I)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
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), const std::string &frameName="", const vpColor &textColor=vpColor::black, const vpImagePoint &textOffset=vpImagePoint(15, 15))
static void flush(const vpImage< unsigned char > &I)
static void displayCamera(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color, unsigned int thickness)
error that can be emitted by ViSP classes.
@ dimensionError
Bad dimension.
void track(const vpHomogeneousMatrix &cMo)
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix inverse() const
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
void extract(vpRotationMatrix &R) const
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
unsigned int getWidth() const
unsigned int getHeight() const
static double rad(double deg)
static Type maximum(const Type &a, const Type &b)
static Type minimum(const Type &a, const Type &b)
static double deg(double rad)
Implementation of a matrix and operations on matrices.
vpMatrix pseudoInverse(double svThreshold=1e-6) const
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
double get_y() const
Get the point y coordinate in the image plane.
double get_x() const
Get the point x coordinate in the image plane.
Implementation of a pose vector and operations on poses.
Error that can be emitted by the vpRobot class and its derivatives.
@ wrongStateError
Wrong robot state.
@ positionOutOfRangeError
Position is out of range.
@ lowLevelError
Error thrown by the low level sdk.
double getSamplingTime() const
This class aims to be a basis used to create all the simulators of robots.
vpHomogeneousMatrix get_cMo()
vpColVector get_velocity()
vpColVector get_artCoord()
void set_velocity(const vpColVector &vel)
static void launcher(vpRobotWireFrameSimulator &simulator)
void set_displayBusy(const bool &status)
vpHomogeneousMatrix * fMi
void getInternalView(vpImage< vpRGBa > &I)
vpCameraParameters cameraParam
vpHomogeneousMatrix getExternalCameraPosition() const
std::mutex m_mutex_robotStop
vpDisplayRobotType displayType
void set_artCoord(const vpColVector &coord)
unsigned int jointLimitArt
bool constantSamplingTimeMode
void setExternalCameraPosition(const vpHomogeneousMatrix &camMf_)
std::mutex m_mutex_setVelocityCalled
void set_artVel(const vpColVector &vel)
bool singularityManagement
virtual vpRobotStateType getRobotState(void) const
vpControlFrameType getRobotFrame(void) const
@ STATE_POSITION_CONTROL
Initialize the position controller.
@ STATE_VELOCITY_CONTROL
Initialize the velocity controller.
@ STATE_ACCELERATION_CONTROL
Initialize the acceleration controller.
@ STATE_STOP
Stops robot motion especially in velocity and acceleration control.
double getMaxRotationVelocity(void) const
virtual vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState)
double getMaxTranslationVelocity(void) const
void setMaxRotationVelocity(double maxVr)
vpControlFrameType setRobotFrame(vpRobot::vpControlFrameType newFrame)
void setMaxTranslationVelocity(double maxVt)
Implementation of a rotation matrix and operations on such kind of matrices.
vpRotationMatrix t() const
Implementation of a rotation vector as Euler angle minimal representation.
static bool savePosFile(const std::string &filename, const vpColVector &q)
void setCameraParameters(const vpCameraParameters &cam)
void get_eJe(vpMatrix &eJe) vp_override
void get_cVe(vpVelocityTwistMatrix &cVe)
void initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo)
static bool readPosFile(const std::string &filename, vpColVector &q)
void getCameraParameters(vpCameraParameters &cam, const unsigned int &image_width, const unsigned int &image_height)
void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q) vp_override
void get_fMi(vpHomogeneousMatrix *fMit) vp_override
void getDisplacement(const vpRobot::vpControlFrameType frame, vpColVector &displacement) vp_override
bool initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo)
vpRobot::vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState) vp_override
void computeArticularVelocity() vp_override
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &velocity) vp_override
void findHighestPositioningSpeed(vpColVector &q)
void move(const char *filename)
static const double defaultPositioningVelocity
bool singularityTest(const vpColVector &q, vpMatrix &J)
void updateArticularPosition() vp_override
void setJointLimit(const vpColVector &limitMin, const vpColVector &limitMax)
void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q) vp_override
virtual ~vpSimulatorAfma6() vp_override
void get_fJe(vpMatrix &fJe) vp_override
void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q)
void getExternalImage(vpImage< vpRGBa > &I)
double getPositioningVelocity(void)
int isInJointLimit() vp_override
void get_cMe(vpHomogeneousMatrix &cMe)
void initArms() vp_override
Implementation of a rotation vector as axis-angle minimal representation.
vpThetaUVector buildFrom(const vpHomogeneousMatrix &M)
Class that consider the case of a translation vector.
vpVelocityTwistMatrix buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
vpHomogeneousMatrix camMf2
void display_scene(Matrix mat, Bound_scene &sc, const vpImage< vpRGBa > &I, const vpColor &color)
vpHomogeneousMatrix camMf
void setExternalCameraParameters(const vpCameraParameters &cam)
vpHomogeneousMatrix navigation(const vpImage< vpRGBa > &I, bool &changed)
VISP_EXPORT int wait(double t0, double t)
VISP_EXPORT double getMinTimeForUsleepCall()
VISP_EXPORT double measureTimeSecond()
VISP_EXPORT double measureTimeMs()