Visual Servoing Platform  version 3.0.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
vpVirtuose.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2017 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See http://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description: Class which enables to project an image in the 3D space
31  * and get the view of a virtual camera.
32  *
33  * Authors:
34  * Fabien Spindler
35  *
36  *****************************************************************************/
37 
43 #include <visp3/core/vpException.h>
44 #include <visp3/robot/vpVirtuose.h>
45 
46 #ifdef VISP_HAVE_VIRTUOSE
47 
54  : m_virtContext(NULL), m_ip("localhost#5000"), m_verbose(false),
55  m_apiMajorVersion(0), m_apiMinorVersion(0),
56  m_ctrlMajorVersion(0), m_ctrlMinorVersion(0),
57  m_typeCommand(COMMAND_TYPE_IMPEDANCE), m_indexType(INDEXING_ALL),
58  m_is_init(false), m_period(0.001f)
59 {
60  virtAPIVersion(&m_apiMajorVersion, &m_apiMinorVersion);
61  std::cout << "API version: " << m_apiMajorVersion << "." << m_apiMinorVersion << std::endl;
62 }
63 
68 {
69  if (m_virtContext != NULL) {
70  virtClose(m_virtContext);
71  m_virtContext = NULL;
72  }
73 }
74 
82 {
83  if (force.size() != 6) {
85  "Cannot apply a force feedback (dim %d) to the haptic device that is not 6-dimension",
86  force.size()));
87  }
88 
89  init();
90 
91  float virtforce[6];
92  for(unsigned int i=0; i<6; i++)
93  virtforce[i] = (float)force[i];
94 
95  if (virtAddForce(m_virtContext, virtforce)) {
96  int err = virtGetErrorCode(m_virtContext);
98  "Error calling virtAddForce: error code %d", err));
99  }
100 }
101 
107 {
108  init();
109 
110  if (virtEnableForceFeedback(m_virtContext, enable)) {
111  int err = virtGetErrorCode(m_virtContext);
113  "Error calling virtEnableForceFeedback(): error code %d", err));
114  }
115 }
116 
121 {
122  if (!m_is_init) {
123  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
124  }
125 
126  vpColVector articularPosition(6,0);
127 
128  float articular_position_[6];
129  if (virtGetArticularPosition(m_virtContext, articular_position_)) {
130  int err = virtGetErrorCode(m_virtContext);
132  "Error calling virtGetArticularPosition(): error code %d", err));
133  }
134 
135  for(unsigned int i=0; i<6; i++)
136  articularPosition[i] = articular_position_[i];
137 
138  return articularPosition;
139 }
140 
141 
146 {
147  if (!m_is_init) {
148  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
149  }
150 
151  vpColVector articularVelocity(6,0);
152  float articular_velocity_[6];
153  if (virtGetArticularSpeed(m_virtContext, articular_velocity_)) {
154  int err = virtGetErrorCode(m_virtContext);
156  "Error calling virtGetArticularSpeed: error code %d", err));
157  }
158 
159  for(unsigned int i=0; i<6; i++)
160  articularVelocity[i] = articular_velocity_[i];
161 
162  return articularVelocity;
163 
164 }
165 
173 {
174  if (!m_is_init) {
175  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
176  }
177 
178  float position_[7];
179  vpPoseVector position;
180  vpTranslationVector translation;
181  vpQuaternionVector quaternion;
182 
183  if (virtGetAvatarPosition(m_virtContext, position_)) {
184  int err = virtGetErrorCode(m_virtContext);
186  "Error calling virtGetAvatarPosition: error code %d", err));
187  }
188  else
189  {
190  for (int i=0; i<3; i++)
191  translation[i] = position_[i];
192  for (int i=0; i<4; i++)
193  quaternion[i] = position_[3+i];
194 
195  vpThetaUVector thetau(quaternion);
196 
197  position.buildFrom(translation, thetau);
198 
199  return position;
200  }
201 }
202 
210 {
211  if (!m_is_init) {
212  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
213  }
214 
215  vpPoseVector position;
216  float position_[7];
217  vpTranslationVector translation;
218  vpQuaternionVector quaternion;
219 
220  if (virtGetBaseFrame(m_virtContext, position_)) {
221  int err = virtGetErrorCode(m_virtContext);
223  "Error calling virtGetBaseFrame: error code %d", err));
224  }
225  else
226  {
227  for (int i=0; i<3; i++)
228  translation[i] = position_[i];
229  for (int i=0; i<4; i++)
230  quaternion[i] = position_[3+i];
231 
232  vpThetaUVector thetau(quaternion);
233 
234  position.buildFrom(translation, thetau);
235 
236  return position;
237  }
238 }
239 
243 VirtCommandType vpVirtuose::getCommandType() const
244 {
245  if (!m_is_init) {
246  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
247  }
248 
249  VirtCommandType type;
250 
251  if (virtGetCommandType(m_virtContext, &type)) {
252  int err = virtGetErrorCode(m_virtContext);
254  "Error calling virtGetCommandType: error code %d", err));
255  }
256  return type;
257 }
258 
264 {
265  if (!m_is_init) {
266  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
267  }
268 
269  int deadman;
270  if (virtGetDeadMan(m_virtContext, &deadman)) {
271  int err = virtGetErrorCode(m_virtContext);
273  "Error calling virtGetDeadMan: error code %d", err));
274  }
275  return (deadman ? true : false);
276 }
277 
283 {
284  if (!m_is_init) {
285  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
286  }
287 
288  int emergencyStop;
289  if (virtGetEmergencyStop(m_virtContext, &emergencyStop)) {
290  int err = virtGetErrorCode(m_virtContext);
292  "Error calling virtGetEmergencyStop: error code %d", err));
293  }
294  return (emergencyStop ? true : false);
295 }
296 
302 {
303  if (!m_is_init) {
304  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
305  }
306 
307  vpColVector force(6,0);
308  float force_[6];
309  if (virtGetForce(m_virtContext, force_)) {
310  int err = virtGetErrorCode(m_virtContext);
312  "Error calling virtGetForce: error code %d", err));
313  }
314 
315  for(unsigned int i=0; i<6; i++)
316  force[i] = force_[i];
317  return force;
318 }
319 
352 VirtContext vpVirtuose::getHandler() {
353  return m_virtContext;
354 }
355 
363 {
364  if (!m_is_init) {
365  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
366  }
367 
368  vpPoseVector position;
369  float position_[7];
370  vpTranslationVector translation;
371  vpQuaternionVector quaternion;
372 
373  if (virtGetObservationFrame(m_virtContext, position_)) {
374  int err = virtGetErrorCode(m_virtContext);
376  "Error calling virtGetObservationFrame: error code %d", err));
377  }
378  else
379  {
380  for (int i=0; i<3; i++)
381  translation[i] = position_[i];
382  for (int i=0; i<4; i++)
383  quaternion[i] = position_[3+i];
384 
385  vpThetaUVector thetau(quaternion);
386 
387  position.buildFrom(translation, thetau);
388  }
389  return position;
390 }
391 
397 {
398  if (!m_is_init) {
399  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
400  }
401 
402  vpPoseVector position;
403  float position_[7];
404  vpTranslationVector translation;
405  vpQuaternionVector quaternion;
406 
407  if (virtGetPhysicalPosition(m_virtContext, position_)) {
408  int err = virtGetErrorCode(m_virtContext);
410  "Error calling virtGetPhysicalPosition: error code %d", err));
411  }
412  else
413  {
414  for (int i=0; i<3; i++)
415  translation[i] = position_[i];
416  for (int i=0; i<4; i++)
417  quaternion[i] = position_[3+i];
418 
419  vpThetaUVector thetau(quaternion);
420 
421  position.buildFrom(translation, thetau);
422  }
423  return position;
424 }
425 
433 {
434  if (!m_is_init) {
435  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
436  }
437 
438  vpColVector vel(6,0);
439  float speed[6];
440  if (virtGetPhysicalSpeed(m_virtContext, speed)) {
441  int err = virtGetErrorCode(m_virtContext);
442  throw(vpException(vpException::fatalError, "Error calling virtGetPhysicalSpeed: error code %s",
443  virtGetErrorMessage(err)));
444  }
445  for(unsigned int i=0; i<6; i++)
446  vel[i] = speed[i];
447  return vel;
448 }
449 
456 {
457  if (!m_is_init) {
458  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
459  }
460 
461  vpPoseVector position;
462  float position_[7];
463  vpTranslationVector translation;
464  vpQuaternionVector quaternion;
465 
466  if (virtGetPosition(m_virtContext, position_)) {
467  int err = virtGetErrorCode(m_virtContext);
469  "Error calling virtGetPosition: error code %d", err));
470  }
471  else
472  {
473  for (int i=0; i<3; i++)
474  translation[i] = position_[i];
475  for (int i=0; i<4; i++)
476  quaternion[i] = position_[3+i];
477 
478  vpThetaUVector thetau(quaternion);
479 
480  position.buildFrom(translation, thetau);
481  }
482  return position;
483 }
484 
488 bool vpVirtuose::getPower () const
489 {
490  if (!m_is_init) {
491  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
492  }
493 
494  int power;
495  virtGetPowerOn(m_virtContext, &power);
496  return (power ? true : false);
497 }
498 
506 {
507  if (!m_is_init) {
508  throw(vpException(vpException::fatalError, "Device not initialized. Call init()."));
509  }
510 
511  vpColVector vel(6,0);
512  float speed[6];
513  if (virtGetSpeed(m_virtContext, speed)) {
514  int err = virtGetErrorCode(m_virtContext);
515  throw(vpException(vpException::fatalError, "Cannot get haptic device velocity: %s",
516  virtGetErrorMessage(err)));
517  }
518  for(unsigned int i=0; i<6; i++)
519  vel[i] = speed[i];
520  return vel;
521 }
522 
528 {
529  if (! m_is_init) {
530  m_virtContext = virtOpen(m_ip.c_str());
531 
532  if (m_virtContext == NULL) {
533  int err = virtGetErrorCode(m_virtContext);
534  throw(vpException(vpException::fatalError, "Cannot open haptic device: %s",
535  virtGetErrorMessage(err)));
536  }
537 
538  if (virtGetControlerVersion(m_virtContext, &m_ctrlMajorVersion, &m_ctrlMinorVersion)) {
539  int err = virtGetErrorCode(m_virtContext);
540  throw(vpException(vpException::fatalError, "Cannot get haptic device controller version: %s",
541  virtGetErrorMessage(err)));
542  }
543 
544  if (m_verbose) {
545  std::cout << "Controller version: " << m_ctrlMajorVersion << "." << m_ctrlMinorVersion << std::endl;
546  }
547 
548  if (virtSetCommandType(m_virtContext, m_typeCommand)) {
549  int err = virtGetErrorCode(m_virtContext);
550  throw(vpException(vpException::fatalError, "Cannot set haptic device command type: %s",
551  virtGetErrorMessage(err)));
552  }
553 
554  if (virtSetTimeStep(m_virtContext, m_period)) {
555  int err = virtGetErrorCode(m_virtContext);
557  "Error calling virtSetTimeStep: error code %d", err));
558  }
559 
560  m_is_init = true;
561  }
562 }
563 
569 void vpVirtuose::setArticularForce (const vpColVector &articularForce)
570 {
571  init();
572 
573  if (articularForce.size() != 6) {
575  "Cannot apply an articular force feedback (dim %d) to the haptic device that is not 6-dimension",
576  articularForce.size()));
577  }
578 
579  float articular_force[6];
580  for(unsigned int i=0; i<6; i++)
581  articular_force[i] = (float)articularForce[i];
582 
583  if (virtSetArticularForce(m_virtContext, articular_force)) {
584  int err = virtGetErrorCode(m_virtContext);
586  "Error calling virtSetArticularForce: error code %d", err));
587  }
588 }
589 
595 void vpVirtuose::setArticularPosition (const vpColVector &articularPosition)
596 {
597  init();
598 
599  if (articularPosition.size() != 6) {
601  "Cannot send an articular position command (dim %d) to the haptic device that is not 6-dimension",
602  articularPosition.size()));
603  }
604 
605  float articular_position[6];
606  for(unsigned int i=0; i<6; i++)
607  articular_position[i] = (float)articularPosition[i];
608 
609  if (virtSetArticularPosition(m_virtContext, articular_position)) {
610  int err = virtGetErrorCode(m_virtContext);
612  "Error calling virtSetArticularPosition: error code %d", err));
613  }
614 }
615 
621 void vpVirtuose::setArticularVelocity (const vpColVector &articularVelocity)
622 {
623  init();
624 
625  if (articularVelocity.size() != 6) {
627  "Cannot send an articular velocity command (dim %d) to the haptic device that is not 6-dimension",
628  articularVelocity.size()));
629  }
630 
631  float articular_velocity[6];
632  for(unsigned int i=0; i<6; i++)
633  articular_velocity[i] = (float)articularVelocity[i];
634 
635  if (virtSetArticularSpeed(m_virtContext, articular_velocity)) {
636  int err = virtGetErrorCode(m_virtContext);
638  "Error calling virtSetArticularVelocity: error code %d", err));
639  }
640 }
641 
650 {
651  init();
652 
653  float position_[7];
654  vpTranslationVector translation;
655  vpQuaternionVector quaternion;
656 
657  position.extract(translation);
658  position.extract(quaternion);
659 
660  for (int i=0; i<3; i++)
661  position_[i] = (float)translation[i];
662  for (int i=0; i<4; i++)
663  position_[3 + i] = (float)quaternion[i];
664 
665  if (virtSetBaseFrame(m_virtContext, position_)) {
666  int err = virtGetErrorCode(m_virtContext);
668  "Error calling virtSetBaseFrame: error code %d", err));
669  }
670 }
671 
681 void vpVirtuose::setCommandType(const VirtCommandType &type)
682 {
683  init();
684 
685  if (m_typeCommand != type) {
686  m_typeCommand = type;
687 
688  if (virtSetCommandType(m_virtContext, m_typeCommand)) {
689  int err = virtGetErrorCode(m_virtContext);
691  "Error calling virtSetCommandType: error code %d", err));
692  }
693  }
694 }
695 
702 {
703  init();
704 
705  if (force.size() != 6) {
707  "Cannot apply a force feedback (dim %d) to the haptic device that is not 6-dimension",
708  force.size()));
709  }
710 
711  float virtforce[6];
712  for(unsigned int i=0; i<6; i++)
713  virtforce[i] = (float)force[i];
714 
715  if (virtSetForce(m_virtContext, virtforce)) {
716  int err = virtGetErrorCode(m_virtContext);
718  "Error calling virtSetForce: error code %d", err));
719  }
720 }
721 
726 void vpVirtuose::setForceFactor (const float &forceFactor)
727 {
728  init();
729 
730  if (virtSetForceFactor(m_virtContext, forceFactor)) {
731  int err = virtGetErrorCode(m_virtContext);
733  "Error calling virtSetForceFactor: error code %d", err));
734  }
735 }
736 
746 void vpVirtuose::setIndexingMode (const VirtIndexingType &type)
747 {
748  init();
749 
750  if (m_indexType != type){
751  m_indexType = type;
752 
753  if (virtSetIndexingMode(m_virtContext, m_indexType)) {
754  int err = virtGetErrorCode(m_virtContext);
756  "Error calling setIndexingMode: error code %d", err));
757  }
758  }
759 }
760 
769 {
770  init();
771 
772  float position_[7];
773  vpTranslationVector translation;
774  vpQuaternionVector quaternion;
775 
776  position.extract(translation);
777  position.extract(quaternion);
778 
779  for (int i=0; i<3; i++)
780  position_[i] = (float)translation[i];
781  for (int i=0; i<4; i++)
782  position_[3 + i] = (float)quaternion[i];
783 
784  if (virtSetObservationFrame(m_virtContext, position_)) {
785  int err = virtGetErrorCode(m_virtContext);
787  "Error calling virtSetObservationFrame: error code %d", err));
788  }
789 }
790 
825 void vpVirtuose::setPeriodicFunction(VirtPeriodicFunction CallBackVirt)
826 {
827  init();
828 
829  if (virtSetPeriodicFunction(m_virtContext, CallBackVirt, &m_period, this)) {
830  int err = virtGetErrorCode(m_virtContext);
832  "Error calling virtSetPeriodicFunction: error code %d", err));
833  }
834 }
835 
841 {
842  init();
843 
844  float position_[7];
845  vpTranslationVector translation;
846  vpQuaternionVector quaternion;
847 
848  position.extract(translation);
849  position.extract(quaternion);
850 
851  for (int i=0; i<3; i++)
852  position_[i] = (float)translation[i];
853  for (int i=0; i<4; i++)
854  position_[3+i] = (float)quaternion[i];
855 
856  if (virtSetPosition(m_virtContext, position_)) {
857  int err = virtGetErrorCode(m_virtContext);
859  "Error calling virtSetPosition: error code %d", err));
860  }
861 }
862 
863 
868 {
869  init();
870 
871  if (virtSetPowerOn(m_virtContext, 0)) {
872  int err = virtGetErrorCode(m_virtContext);
874  "Error calling virtSetPowerOff: error code %d", err));
875  }
876 }
877 
882 {
883  init();
884 
885  if (virtSetPowerOn(m_virtContext, 1)) {
886  int err = virtGetErrorCode(m_virtContext);
888  "Error calling virtSetPowerOn: error code %d", err));
889  }
890 }
891 
897 void vpVirtuose::setSaturation(const float &forceLimit, const float &torqueLimit)
898 {
899  init();
900 
901  if (virtSaturateTorque(m_virtContext, forceLimit, torqueLimit)) {
902  int err = virtGetErrorCode(m_virtContext);
904  "Error calling virtSaturateTorque: error code %d", err));
905  }
906 }
907 
913 void vpVirtuose::setTimeStep (const float &timeStep)
914 {
915  init();
916 
917  if (m_period != timeStep){
918  m_period = timeStep;
919 
920  if (virtSetTimeStep(m_virtContext, m_period)) {
921  int err = virtGetErrorCode(m_virtContext);
923  "Error calling virtSetTimeStep: error code %d", err));
924  }
925  }
926 }
927 
934 {
935  init();
936 
937  if (velocity.size() != 6) {
939  "Cannot set a velocity vector (dim %d) that is not 6-dimension",
940  velocity.size()));
941  }
942 
943  float speed[6];
944  for(unsigned int i=0; i<6; i++)
945  speed[i] = (float)velocity[i];
946 
947  if (virtSetSpeed(m_virtContext, speed)) {
948  int err = virtGetErrorCode(m_virtContext);
950  "Error calling virtSetSpeed: error code %d", err));
951  }
952 }
953 
958 void vpVirtuose::setVelocityFactor (const float &velocityFactor)
959 {
960  init();
961 
962  if (virtSetSpeedFactor(m_virtContext, velocityFactor)) {
963  int err = virtGetErrorCode(m_virtContext);
964  throw(vpException(vpException::fatalError, "Error calling setVelocityFactor: error code %d",
965  err));
966  }
967 }
968 
975 {
976  init();
977 
978  if (virtStartLoop(m_virtContext)) {
979  int err = virtGetErrorCode(m_virtContext);
980  throw(vpException(vpException::fatalError, "Error calling startLoop: error code %d",
981  err));
982  }
983  else
984  std::cout << "Haptic loop open." << std::endl;
985 }
986 
993 {
994  init();
995 
996  if (virtStopLoop(m_virtContext)) {
997  int err = virtGetErrorCode(m_virtContext);
998  throw(vpException(vpException::fatalError, "Error calling stopLoop: error code %d",
999  err));
1000  }
1001  else
1002  std::cout << "Haptic loop closed." << std::endl;
1003 }
1004 
1005 #else
1006 // Work around to avoid warning
1007 void dummy_vpVirtuose() {};
1008 #endif
1009 
1010 
void setSaturation(const float &forceLimit, const float &torqueLimit)
Definition: vpVirtuose.cpp:897
void startPeriodicFunction()
Definition: vpVirtuose.cpp:974
int m_apiMinorVersion
Definition: vpVirtuose.h:193
vpPoseVector getObservationFrame() const
Definition: vpVirtuose.cpp:362
VirtCommandType m_typeCommand
Definition: vpVirtuose.h:196
void setVelocityFactor(const float &velocityFactor)
Definition: vpVirtuose.cpp:958
error that can be emited by ViSP classes.
Definition: vpException.h:73
void setPeriodicFunction(VirtPeriodicFunction CallBackVirt)
Definition: vpVirtuose.cpp:825
unsigned int size() const
Return the number of elements of the 2D array.
Definition: vpArray2D.h:156
void setForce(const vpColVector &force)
Definition: vpVirtuose.cpp:701
void setForceFactor(const float &forceFactor)
Definition: vpVirtuose.cpp:726
VirtContext m_virtContext
Definition: vpVirtuose.h:189
VirtIndexingType m_indexType
Definition: vpVirtuose.h:197
vpColVector getArticularVelocity() const
Definition: vpVirtuose.cpp:145
bool getEmergencyStop() const
Definition: vpVirtuose.cpp:282
bool m_verbose
Definition: vpVirtuose.h:191
void setArticularVelocity(const vpColVector &articularVelocity)
Definition: vpVirtuose.cpp:621
vpColVector getForce() const
Definition: vpVirtuose.cpp:301
void extract(vpRotationMatrix &R) const
void setVelocity(vpColVector &velocity)
Definition: vpVirtuose.cpp:933
vpColVector getPhysicalVelocity() const
Definition: vpVirtuose.cpp:432
vpPoseVector getPosition() const
Definition: vpVirtuose.cpp:455
bool m_is_init
Definition: vpVirtuose.h:198
vpColVector getArticularPosition() const
Definition: vpVirtuose.cpp:120
void enableForceFeedback(int enable)
Definition: vpVirtuose.cpp:106
vpPoseVector getAvatarPosition() const
Definition: vpVirtuose.cpp:172
VirtContext getHandler()
Definition: vpVirtuose.cpp:352
int m_ctrlMinorVersion
Definition: vpVirtuose.h:195
void setPowerOn()
Definition: vpVirtuose.cpp:881
void setPowerOff()
Definition: vpVirtuose.cpp:867
void setCommandType(const VirtCommandType &type)
Definition: vpVirtuose.cpp:681
void setBaseFrame(const vpPoseVector &position)
Definition: vpVirtuose.cpp:649
std::string m_ip
Definition: vpVirtuose.h:190
vpColVector getVelocity() const
Definition: vpVirtuose.cpp:505
Implementation of a rotation vector as quaternion angle minimal representation.
void setPosition(vpPoseVector &position)
Definition: vpVirtuose.cpp:840
void setArticularForce(const vpColVector &articularForce)
Definition: vpVirtuose.cpp:569
VirtCommandType getCommandType() const
Definition: vpVirtuose.cpp:243
void setArticularPosition(const vpColVector &articularPosition)
Definition: vpVirtuose.cpp:595
void stopPeriodicFunction()
Definition: vpVirtuose.cpp:992
void setIndexingMode(const VirtIndexingType &type)
Definition: vpVirtuose.cpp:746
bool getDeadMan() const
Definition: vpVirtuose.cpp:263
Implementation of column vector and the associated operations.
Definition: vpColVector.h:72
float m_period
Definition: vpVirtuose.h:199
Implementation of a pose vector and operations on poses.
Definition: vpPoseVector.h:93
vpPoseVector getPhysicalPosition() const
Definition: vpVirtuose.cpp:396
bool getPower() const
Definition: vpVirtuose.cpp:488
int m_apiMajorVersion
Definition: vpVirtuose.h:192
int m_ctrlMajorVersion
Definition: vpVirtuose.h:194
void init()
Definition: vpVirtuose.cpp:527
void setObservationFrame(const vpPoseVector &position)
Definition: vpVirtuose.cpp:768
vpPoseVector buildFrom(const double tx, const double ty, const double tz, const double tux, const double tuy, const double tuz)
vpPoseVector getBaseFrame() const
Definition: vpVirtuose.cpp:209
void addForce(vpColVector &force)
Definition: vpVirtuose.cpp:81
void setTimeStep(const float &timeStep)
Definition: vpVirtuose.cpp:913
Class that consider the case of a translation vector.
Implementation of a rotation vector as axis-angle minimal representation.