Visual Servoing Platform  version 3.5.0 under development (2022-02-15)
testQbSoftHand.cpp
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Test for qbdevice.
33  *
34  * Authors:
35  * Fabien Spindler
36  *
37  *****************************************************************************/
38 
45 #include <iostream>
46 
47 #include <visp3/robot/vpQbSoftHand.h>
48 #include <visp3/core/vpTime.h>
49 
50 int main()
51 {
52 #ifdef VISP_HAVE_QBDEVICE
53  std::cout << "Test qbSoftHand device" << std::endl;
54  try {
55  vpQbSoftHand qbsofthand;
56 
57  {
58  // Call blocking functions to close and open the hand
59  vpColVector q(1), q_mes, current;
60 
61  double speed_factor = 0.5; // half speed
62  double stiffness = 0.7;
63  std::cout << "** Close the hand with blocking positioning function" << std::endl;
64  q[0] = 1;
65  qbsofthand.setPosition(q, speed_factor, stiffness);
66 
67  std::cout << "** Open the hand with blocking positioning function" << std::endl;
68  q[0] = 0;
69  qbsofthand.setPosition(q, speed_factor, stiffness);
70  }
71 
72  {
73  // Call non-blocking positionning functions
74  vpColVector q(1), q_mes, current;
75  double max_current = qbsofthand.getCurrentMax();
76  int i_max = 0;
77  std::cout << "** Close the hand with non-blocking positioning function" << std::endl;
78  for(int i=1; i <= 10; i++) {
79  qbsofthand.getPosition(q_mes);
80  qbsofthand.getCurrent(current);
81  if (std::fabs(current[0]) > max_current/2) {
82  std::cout << "Stop closure, current > " << max_current/2 << std::endl;
83  i_max = i;
84  break;
85  }
86  q[0] = i/10.0;
87  qbsofthand.setPosition(q);
88  vpTime::sleepMs(500);
89  }
90  std::cout << "** Open the hand with non-blocking positioning function" << std::endl;
91  for(int i=i_max; i >= 0; i--) {
92  qbsofthand.getPosition(q_mes);
93  qbsofthand.getCurrent(current);
94  q[0] = i/10.0;
95  qbsofthand.setPosition(q);
96  vpTime::sleepMs(500);
97  }
98  }
99  std::cout << "The end" << std::endl;
100  }
101  catch(const vpException &e) {
102  std::cout << "Catch exception: " << e.getStringMessage() << std::endl;
103  }
104 #else
105  std::cout << "ViSP is not build with qbdevice 3rd party" << std::endl;
106 #endif
107  return EXIT_SUCCESS;
108 }
109 
void setPosition(const vpColVector &position, const int &id=1)
error that can be emited by ViSP classes.
Definition: vpException.h:71
void getCurrent(vpColVector &current, const int &id=1)
VISP_EXPORT void sleepMs(double t)
Definition: vpTime.cpp:271
void getPosition(vpColVector &position, const int &id=1)
double getCurrentMax() const
Definition: vpQbDevice.cpp:540
Implementation of column vector and the associated operations.
Definition: vpColVector.h:130
const std::string & getStringMessage() const
Send a reference (constant) related the error message (can be empty).
Definition: vpException.cpp:92