iCub-main
parametricCalibrator.h
Go to the documentation of this file.
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2 
3 /*
4  *
5  * Copyright (C) 20014 iCub Facility, Istituto Italiano di Tecnologia
6  *
7  * Authors: Alberto Cardellino, Marco Randazzo, Valentina Gaggero
8  *
9  * CopyPolicy: Released under the terms of the LGPLv2.1 or later, see LGPL.TXT
10  *
11  */
12 
13 #ifndef __ICUB_PARAMETRIC_CALIBRATOR__
14 #define __ICUB_PARAMETRIC_CALIBRATOR__
15 
16 #include <mutex>
17 #include <string>
18 #include <list>
19 #include <yarp/dev/DeviceDriver.h>
20 #include <yarp/dev/CalibratorInterfaces.h>
21 #include <yarp/dev/ControlBoardInterfaces.h>
22 
23 namespace yarp {
24  namespace dev
25  {
26  class parametricCalibrator;
27  }
28 }
29 
41 class yarp::dev::parametricCalibrator : public ICalibrator, public DeviceDriver, public IRemoteCalibrator
42 {
43 public:
48 
53 
60  bool calibrate(DeviceDriver *dd) override;
61 
68  virtual bool open (yarp::os::Searchable& config) override;
69 
74  virtual bool close () override;
75 
76  virtual bool park(DeviceDriver *dd, bool wait=true) override;
77 
78  virtual bool quitPark() override;
79 
80  virtual bool quitCalibrate() override;
81 
82  // IRemoteCalibrator
83 
84  virtual yarp::dev::IRemoteCalibrator *getCalibratorDevice();
85 
86  virtual bool calibrateSingleJoint(int j) override;
87 
88  virtual bool calibrateWholePart() override;
89 
90  virtual bool homingSingleJoint(int j) override;
91 
92  virtual bool homingWholePart() override;
93 
94  virtual bool parkSingleJoint(int j, bool _wait=true) override;
95 
96  virtual bool parkWholePart() override;
97 
98 private:
99  std::mutex calibMutex;
100 
101  bool calibrate();
102  bool calibrateJoint(int j);
103  bool goToZero(int j);
104  bool checkCalibrateJointEnded(std::list<int> set);
105  bool checkGoneToZeroThreshold(int j);
106  bool checkHwFault(int j);
107 
108  yarp::dev::PolyDriver *dev2calibrate;
109  IControlCalibration *iCalibrate;
110  IPidControl *iPids;
111  IEncoders *iEncoders;
112  IPositionControl *iPosition;
113  IControlMode *iControlMode;
114  IAmplifierControl *iAmp;
115 
116  std::list<std::list<int> > joints;
117 
118  int n_joints;
119  unsigned char *type;
120  double *param1;
121  double *param2;
122  double *param3;
123  int *maxPWM;
124  double *currPos;
125  double *currVel;
126  double *original_max_pwm;
127  double *limited_max_pwm;
128  double *zeroVel;
129  double *zeroPos;
130  double *homeVel;
131  double *homePos;
132  double *zeroPosThreshold;
133  bool abortCalib;
134  bool abortParking;
135  bool isCalibrated;
136  bool skipCalibration;
137  bool clearHwFault;
138 
139  int totJointsToCalibrate;
140  std::string deviceName;
141  yarp::os::Bottle calibJointsString; // joints handled by this caibrator as a string for error messages
142  std::list<int> calibJoints; // joints handled by this caibrator as a list
143 
144 };
145 #endif
parametricCalibrator: implement calibration routines for the iCub arm(s) (version 1....
parametricCalibrator()
Default constructor.
virtual bool homingSingleJoint(int j) override
virtual bool calibrateSingleJoint(int j) override
virtual bool parkSingleJoint(int j, bool _wait=true) override
virtual bool close() override
Close the device driver.
virtual bool park(DeviceDriver *dd, bool wait=true) override
virtual bool calibrateWholePart() override
virtual yarp::dev::IRemoteCalibrator * getCalibratorDevice()
bool calibrate(DeviceDriver *dd) override
Calibrate method.
virtual bool homingWholePart() override
virtual bool open(yarp::os::Searchable &config) override
Open the device driver.
Copyright (C) 2008 RobotCub Consortium.