34#include <visp3/core/vpConfig.h>
35#if defined(VISP_HAVE_MODULE_GUI) && defined(VISP_HAVE_THREADS)
39#include <visp3/core/vpDebug.h>
40#include <visp3/core/vpImagePoint.h>
41#include <visp3/core/vpIoTools.h>
42#include <visp3/core/vpMeterPixelConversion.h>
43#include <visp3/core/vpPoint.h>
44#include <visp3/core/vpTime.h>
45#include <visp3/robot/vpRobotException.h>
46#include <visp3/robot/vpSimulatorAfma6.h>
48#include "../wireframe-simulator/vpBound.h"
49#include "../wireframe-simulator/vpRfstack.h"
50#include "../wireframe-simulator/vpScene.h"
51#include "../wireframe-simulator/vpVwstack.h"
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;
163 q_prev_getdis.resize(
njoint);
165 first_time_getdis =
true;
199 cameraParam.initPersProjWithoutDistortion(558.5309599, 556.055053, 320, 240);
226 unsigned int name_length = 30;
227 if (arm_dir.size() > FILENAME_MAX)
229 unsigned int full_length =
static_cast<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)
344 cam.initPersProjWithoutDistortion(
px_int,
py_int, image_width / 2, image_height / 2);
350 if (image_width == 640 && image_height == 480) {
353 cam.initPersProjWithoutDistortion(1109.5735473989, 1112.1520168160, 320, 240);
356 vpTRACE(
"Cannot get default intrinsic camera parameters for this image "
363 if (image_width == 640 && image_height == 480) {
366 cam.initPersProjWithoutDistortion(852.6583228197, 854.8084224761, 320, 240);
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[
static_cast<unsigned int>(-jl - 1)] - articularCoordinates[
static_cast<unsigned int>(-jl - 1)]) /
498 (articularVelocities[
static_cast<unsigned int>(-jl - 1)]);
500 ellapsedTime = (
_joint_max[
static_cast<unsigned int>(jl - 1)] - articularCoordinates[
static_cast<unsigned int>(jl - 1)]) /
501 (articularVelocities[
static_cast<unsigned int>(jl - 1)]);
503 for (
unsigned int i = 0; i < 6; i++)
504 articularCoordinates[i] = articularCoordinates[i] + ellapsedTime * articularVelocities[i];
507 jointLimitArt =
static_cast<unsigned int>(fabs(
static_cast<double>(jl)));
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";
833 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
835 "Cannot send a velocity to the robot "
836 "use setRobotState(vpRobot::STATE_VELOCITY_CONTROL) first) ");
841 double scale_sat = 1;
853 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
857 for (
unsigned int i = 0; i < 3; ++i) {
858 vel_abs = fabs(vel[i]);
860 vel_trans_max = vel_abs;
866 vel_abs = fabs(vel[i + 3]);
868 vel_rot_max = vel_abs;
875 double scale_trans_sat = 1;
876 double scale_rot_sat = 1;
883 if ((scale_trans_sat < 1) || (scale_rot_sat < 1)) {
884 if (scale_trans_sat < scale_rot_sat)
885 scale_sat = scale_trans_sat;
887 scale_sat = scale_rot_sat;
895 vpERROR_TRACE(
"The velocity vector must have a size of 6 !!!!");
898 for (
unsigned int i = 0; i < 6; ++i) {
899 vel_abs = fabs(vel[i]);
901 vel_rot_max = vel_abs;
907 double scale_rot_sat = 1;
910 if (scale_rot_sat < 1)
911 scale_sat = scale_rot_sat;
916 "functionality not implemented");
920 "functionality not implemented");
960 articularVelocity = eJe_ * eVc * velocityframe;
970 articularVelocity = fJe_ * velocityframe;
975 articularVelocity = velocityframe;
988 for (
unsigned int i = 0; i < 6; ++i) {
989 double vel_abs = fabs(articularVelocity[i]);
991 vel_rot_max = vel_abs;
994 articularVelocity[i], i + 1);
997 double scale_rot_sat = 1;
998 double scale_sat = 1;
1001 if (scale_rot_sat < 1)
1002 scale_sat = scale_rot_sat;
1076 vel = cVe * eJe_ * articularVelocity;
1080 vel = articularVelocity;
1086 vel = fJe_ * articularVelocity;
1095 "Case not taken in account.");
1200 double velmax = fabs(q[0]);
1201 for (
unsigned int i = 1; i < 6; i++) {
1202 if (velmax < fabs(q[i]))
1203 velmax = fabs(q[i]);
1292 "Modification of the robot state");
1307 for (
unsigned int i = 0; i < 3; i++) {
1322 qdes = articularCoordinates;
1330 error = qdes - articularCoordinates;
1331 errsqr = error.sumSquare();
1334 if (errsqr < 1e-4) {
1346 }
while (errsqr > 1e-8 && nbSol > 0);
1354 error = q - articularCoordinates;
1355 errsqr = error.sumSquare();
1361 if (errsqr < 1e-4) {
1368 }
while (errsqr > 1e-8);
1378 for (
unsigned int i = 0; i < 3; i++) {
1388 qdes = articularCoordinates;
1394 error = qdes - articularCoordinates;
1395 errsqr = error.sumSquare();
1398 if (errsqr < 1e-4) {
1408 }
while (errsqr > 1e-8 && nbSol > 0);
1412 vpERROR_TRACE(
"Positioning error. Mixt frame not implemented");
1414 "MIXT_FRAME not implemented.");
1417 vpERROR_TRACE(
"Positioning error. Mixt frame not implemented");
1419 "END_EFFECTOR_FRAME not implemented.");
1490 double pos4,
double pos5,
double pos6)
1650 for (
unsigned int i = 0; i < 3; i++) {
1659 "Mixt frame not implemented.");
1663 "End-effector frame not implemented.");
1721 for (
unsigned int j = 0; j < 3; j++) {
1722 position[j] = posRxyz[j];
1723 position[j + 3] = RtuVect[j];
1757 vpTRACE(
"Joint limit vector has not a size of 6 !");
1785 bool cond = fabs(q5 - M_PI / 2) < 1e-1;
1813 for (
unsigned int i = 0; i < 6; i++) {
1814 if (articularCoordinates[i] <=
_joint_min[i]) {
1815 difft =
_joint_min[i] - articularCoordinates[i];
1818 artNumb = -
static_cast<int>(i) - 1;
1823 for (
unsigned int i = 0; i < 6; i++) {
1824 if (articularCoordinates[i] >=
_joint_max[i]) {
1825 difft = articularCoordinates[i] -
_joint_max[i];
1828 artNumb =
static_cast<int>(i + 1);
1834 std::cout <<
"\nWarning: Velocity control stopped: axis " << fabs(
static_cast<float>(artNumb)) <<
" on joint limit!"
1865 if (!first_time_getdis) {
1868 std::cout <<
"getDisplacement() CAMERA_FRAME not implemented\n";
1872 displacement = q_cur - q_prev_getdis;
1876 std::cout <<
"getDisplacement() REFERENCE_FRAME not implemented\n";
1880 std::cout <<
"getDisplacement() MIXT_FRAME not implemented\n";
1884 std::cout <<
"getDisplacement() END_EFFECTOR_FRAME not implemented\n";
1890 first_time_getdis =
false;
1894 q_prev_getdis = q_cur;
1946 std::ifstream fd(filename.c_str(), std::ios::in);
1948 if (!fd.is_open()) {
1953 std::string key(
"R:");
1954 std::string id(
"#AFMA6 - Position");
1955 bool pos_found =
false;
1960 while (std::getline(fd, line)) {
1963 if (!(line.compare(0,
id.size(),
id) == 0)) {
1964 std::cout <<
"Error: this position file " << filename <<
" is not for Afma6 robot" << std::endl;
1968 if ((line.compare(0, 1,
"#") == 0)) {
1971 if ((line.compare(0, key.size(), key) == 0)) {
1974 if (chain.size() <
njoint + 1)
1976 if (chain.size() <
njoint + 1)
1979 std::istringstream ss(line);
1982 for (
unsigned int i = 0; i <
njoint; i++)
1997 std::cout <<
"Error: unable to find a position for Afma6 robot in " << filename << std::endl;
2029 fd = fopen(filename.c_str(),
"w");
2034#AFMA6 - Position - Version 2.01\n\
2037# Joint position: X, Y, Z: translations in meters\n\
2038# A, B, C: rotations in degrees\n\
2166 std::string scene_dir_;
2167 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
2168 bool sceneDirExists =
false;
2169 for (
size_t i = 0; i < scene_dirs.size(); i++)
2171 scene_dir_ = scene_dirs[i];
2172 sceneDirExists =
true;
2175 if (!sceneDirExists) {
2178 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
2181 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
2185 unsigned int name_length = 30;
2186 if (scene_dir_.size() > FILENAME_MAX)
2188 unsigned int full_length =
static_cast<unsigned int>(scene_dir_.size()) + name_length;
2189 if (full_length > FILENAME_MAX)
2192 char *name_cam =
new char[full_length];
2194 strcpy(name_cam, scene_dir_.c_str());
2195 strcat(name_cam,
"/camera.bnd");
2198 if (arm_dir.size() > FILENAME_MAX)
2200 full_length =
static_cast<unsigned int>(arm_dir.size()) + name_length;
2201 if (full_length > FILENAME_MAX)
2204 char *name_arm =
new char[full_length];
2205 strcpy(name_arm, arm_dir.c_str());
2206 strcat(name_arm,
"/afma6_gate.bnd");
2207 std::cout <<
"name arm: " << name_arm << std::endl;
2209 strcpy(name_arm, arm_dir.c_str());
2210 strcat(name_arm,
"/afma6_arm1.bnd");
2211 set_scene(name_arm,
robotArms + 1, 1.0);
2212 strcpy(name_arm, arm_dir.c_str());
2213 strcat(name_arm,
"/afma6_arm2.bnd");
2214 set_scene(name_arm,
robotArms + 2, 1.0);
2215 strcpy(name_arm, arm_dir.c_str());
2216 strcat(name_arm,
"/afma6_arm3.bnd");
2217 set_scene(name_arm,
robotArms + 3, 1.0);
2218 strcpy(name_arm, arm_dir.c_str());
2219 strcat(name_arm,
"/afma6_arm4.bnd");
2220 set_scene(name_arm,
robotArms + 4, 1.0);
2224 strcpy(name_arm, arm_dir.c_str());
2227 strcat(name_arm,
"/afma6_tool_ccmop.bnd");
2231 strcat(name_arm,
"/afma6_tool_gripper.bnd");
2235 strcat(name_arm,
"/afma6_tool_vacuum.bnd");
2239 std::cout <<
"The custom tool is not handled in vpSimulatorAfma6.cpp" << std::endl;
2243 std::cout <<
"The Intel D435 camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2247 std::cout <<
"The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
2251 set_scene(name_arm,
robotArms + 5, 1.0);
2253 add_rfstack(IS_BACK);
2255 add_vwstack(
"start",
"depth", 0.0, 100.0);
2256 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
2257 add_vwstack(
"start",
"type", PERSPECTIVE);
2270 bool changed =
false;
2274 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
2295 float w44o[4][4], w44cext[4][4], x, y, z;
2297 vp2jlc_matrix(
camMf.inverse(), w44cext);
2299 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
2300 x = w44cext[2][0] + w44cext[3][0];
2301 y = w44cext[2][1] + w44cext[3][1];
2302 z = w44cext[2][2] + w44cext[3][2];
2303 add_vwstack(
"start",
"vrp", x, y, z);
2304 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
2305 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
2306 add_vwstack(
"start",
"window", -u, u, -v, v);
2314 vp2jlc_matrix(fMit[0], w44o);
2317 vp2jlc_matrix(fMit[2], w44o);
2320 vp2jlc_matrix(fMit[3], w44o);
2323 vp2jlc_matrix(fMit[4], w44o);
2326 vp2jlc_matrix(fMit[5], w44o);
2333 cMe = fMit[6] * cMe;
2334 vp2jlc_matrix(cMe, w44o);
2339 vp2jlc_matrix(
fMo, w44o);
2382 std::cout <<
"Used joint coordinates (rad): " << articularCoordinates.
t() << std::endl;
2414 fMo = fMit[7] * cMo_;
2444 const double lambda = 5.;
2448 unsigned int i, iter = 0;
2453 if (Iint !=
nullptr) {
2466 v = -lambda * cdRc.
t() * cdTc;
2467 w = -lambda * cdTUc;
2468 for (i = 0; i < 3; ++i) {
2472 err[i + 3] = cdTUc[i];
2491#elif !defined(VISP_BUILD_SHARED_LIBS)
2494void dummy_vpSimulatorAfma6() { }
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.
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 extract(vpRotationMatrix &R) const
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
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
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
vpRobotWireFrameSimulator()
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.
void getDisplacement(const vpRobot::vpControlFrameType frame, vpColVector &displacement) VP_OVERRIDE
void get_fJe(vpMatrix &fJe) VP_OVERRIDE
static bool savePosFile(const std::string &filename, const vpColVector &q)
void setCameraParameters(const vpCameraParameters &cam)
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 get_fMi(vpHomogeneousMatrix *fMit) VP_OVERRIDE
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &velocity) VP_OVERRIDE
void computeArticularVelocity() VP_OVERRIDE
void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q) VP_OVERRIDE
int isInJointLimit() VP_OVERRIDE
bool initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo)
void initArms() VP_OVERRIDE
void findHighestPositioningSpeed(vpColVector &q)
void move(const char *filename)
bool singularityTest(const vpColVector &q, vpMatrix &J)
vpRobot::vpRobotStateType setRobotState(const vpRobot::vpRobotStateType newState) VP_OVERRIDE
virtual ~vpSimulatorAfma6() VP_OVERRIDE
void setJointLimit(const vpColVector &limitMin, const vpColVector &limitMax)
void updateArticularPosition() VP_OVERRIDE
void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q)
void get_eJe(vpMatrix &eJe) VP_OVERRIDE
void getExternalImage(vpImage< vpRGBa > &I)
double getPositioningVelocity(void)
void get_cMe(vpHomogeneousMatrix &cMe)
void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q) VP_OVERRIDE
static const double defaultPositioningVelocity
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 double measureTimeMs()
VISP_EXPORT int wait(double t0, double t)
VISP_EXPORT double getMinTimeForUsleepCall()
VISP_EXPORT double measureTimeSecond()