iCub-main
Loading...
Searching...
No Matches
embObjMotionControl.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/* Copyright (C) 2012 iCub Facility, Istituto Italiano di Tecnologia
5 * Author: Alberto Cardellino
6 * email: alberto.cardellino@iit.it
7 * Permission is granted to copy, distribute, and/or modify this program
8 * under the terms of the GNU General Public License, version 2 or any
9 * later version published by the Free Software Foundation.
10 *
11 * A copy of the license can be found at
12 * http://www.robotcub.org/icub/license/gpl.txt
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
17 * Public License for more details
18 */
19
20
21
22
23//
24// $Id: embObjMotionControl.h,v 1.5 2008/06/25 22:33:53 nat Exp $
25//
26
27#ifndef __embObjMotionControlh__
28#define __embObjMotionControlh__
29
30
31using namespace std;
32
33// system std include
34#include <string>
35#include <mutex>
36#include <math.h>
37// Yarp stuff
38#include <yarp/os/Bottle.h>
39#include <yarp/os/BufferedPort.h>
40#include <yarp/os/Timer.h>
41#include <yarp/dev/DeviceDriver.h>
42#include <yarp/dev/PolyDriver.h>
43#include <yarp/dev/ControlBoardHelper.h>
44
45#include <yarp/dev/IVirtualAnalogSensor.h>
46
47#include<yarp/dev/ImplementJointFault.h>
48
49#include <abstractEthResource.h>
50
52
53// local include
54#include "IethResource.h"
55#include"EoError.h"
56#include <ethManager.h>
57
58#include "serviceParser.h"
59#include "eomcParser.h"
60#include "measuresConverter.h"
61
62#include "mcEventDownsampler.h"
63
64
65#ifdef NETWORK_PERFORMANCE_BENCHMARK
67#endif
68
69// - public #define --------------------------------------------------------------------------------------------------
70
71#undef VERIFY_ROP_SETIMPEDANCE // this macro let you send setimpedence rop with signature.
72 // if you want use this feature, you should compiled ems firmware with same macro.
73#undef VERIFY_ROP_SETPOSITIONRAW // this macro let you send setposition rop with signature.
74 // if you want use this feature, yuo should compiled ems firmware with same macro.
75
76// marco.accame: we dont manage mais anymore from the embObjMotionControl class.
77// the mais is now initted by the ems board with default params (datarate = 10, mode = eoas_maismode_txdatacontinuously)
78// and never swicthed off.
79// only embObjAnalog can override its behaviour
80
81#define EMBOBJMC_DONT_USE_MAIS
82
83//
84// helper structures
85//
86namespace yarp {
87 namespace dev {
88 namespace eomc {
89
90typedef struct
91{
92 vector<int> joint2set;
93 vector <vector <int> > set2joint;
95 vector<eOmc_jointset_configuration_t> jointset_cfgs;
97
98typedef struct
99{
100 eOmc_encoder_t type;
101 double tolerance;
103} encoder_t;
104
111
112
114{
115
116private:
117
118bool _isStarted;
119uint32_t _count;
120double _time;
121uint32_t _threshold; // use 10000 as limit on the watchdog for the error on the temperature sensor receiving of the values -
122 // since the ETH callback timing is 2ms by default so using 10000 we can set a checking threshould of 5 second
123 // in which we can allow the tdb to not respond. If cannot receive response over 1s we trigger the error
124public:
125
126Watchdog(): _count(0), _isStarted(false), _threshold(60000), _time(0){;}
127Watchdog(uint32_t threshold):_count(0), _isStarted(false), _threshold(threshold), _time(0){;}
128~Watchdog() = default;
129Watchdog(const Watchdog& other) = default;
130Watchdog(Watchdog&& other) noexcept = default;
131Watchdog& operator=(const Watchdog& other) = default;
132Watchdog& operator=(Watchdog&& other) noexcept = default;
133
134
135bool isStarted(){return _isStarted;}
136void start() {_count = 0; _time = yarp::os::Time::now(); _isStarted = true;}
137bool isExpired() {return (_count > _threshold);}
138void increment() {++_count;}
139void clear(){_isStarted=false;}
140double getStartTime() {return _time;}
141uint32_t getCount() {return _count; }
142void setThreshold(uint8_t txrateOfRegularROPs){ if(txrateOfRegularROPs != 0) _threshold = _threshold / txrateOfRegularROPs;}
143uint32_t getThreshold(){return _threshold;}
144
145};
146
148{
149private:
150 uint32_t _threshold; // threshold for the delta between current and previous temperature --> set to 20 Celsius deg by default --> over 20 deg delta spike
151 double _motorTempPrev; // motor temperature at previous instant for checking positive temperature spikes
152 bool _isStarted;
153 int32_t _initCounter;
154 std::vector<double> _initTempBuffer;
155public:
156 TemperatureFilter(): _threshold(20), _isStarted(false), _initCounter(50), _initTempBuffer(0), _motorTempPrev(0){;}
157 TemperatureFilter(uint32_t threshold, int32_t initCounter): _threshold(threshold), _isStarted(false), _initCounter(initCounter), _initTempBuffer(0), _motorTempPrev(0){;}
159 TemperatureFilter(const TemperatureFilter& other) = default;
160 TemperatureFilter(TemperatureFilter&& other) noexcept = default;
162 TemperatureFilter& operator=(TemperatureFilter&& other) noexcept = default;
163
164 bool isStarted(){return _isStarted;}
165 uint32_t getTemperatureThreshold() {return _threshold; }
166 double getPrevTemperature(){return _motorTempPrev;}
167 void updatePrevTemperature(double temperature){_motorTempPrev = temperature;}
168 void start(double temperature)
169 {
170 if(_initCounter < 0)
171 {
172 int median_pos = std::ceil(_initTempBuffer.size() / 2) -1;
173 _motorTempPrev = _initTempBuffer.at(median_pos);
174 _isStarted = true;
175 }
176 else
177 {
178 _initTempBuffer.push_back(temperature);
179 --_initCounter;
180 }
181
182 }
183};
184
185}}}
186
187namespace yarp {
188 namespace dev {
190 }
191}
192
193
195{
196 eOmn_serv_diagn_cfg_t config;
197 std::vector<BufferedPort<Bottle>*> ports;
198};
199
200using namespace yarp::dev;
201using namespace iCub;
202
203
223class yarp::dev::embObjMotionControl: public DeviceDriver,
224 public IPidControlRaw,
225 public IControlCalibrationRaw,
226 public IAmplifierControlRaw,
227 public IEncodersTimedRaw,
228 public IMotorEncodersRaw,
229 public ImplementEncodersTimed,
230 public ImplementMotorEncoders,
231 public IMotorRaw,
232 public ImplementMotor,
233 public IPositionControlRaw,
234 public IVelocityControlRaw,
235 public IControlModeRaw,
236 public ImplementControlMode,
237 public IControlLimitsRaw,
238 public IImpedanceControlRaw,
239 public ImplementImpedanceControl,
240 public ImplementControlLimits,
241 public ImplementAmplifierControl,
242 public ImplementPositionControl,
243 public ImplementControlCalibration,
244 public ImplementPidControl,
245 public ImplementVelocityControl,
246 public ITorqueControlRaw,
247 public ImplementTorqueControl,
248 public IVirtualAnalogSensor,
249 public IPositionDirectRaw,
250 public ImplementPositionDirect,
251 public IInteractionModeRaw,
252 public ImplementInteractionMode,
253 public IRemoteVariablesRaw,
254 public ImplementRemoteVariables,
255 public IAxisInfoRaw,
256 public ImplementAxisInfo,
257 public IPWMControlRaw,
258 public ImplementPWMControl,
259 public ICurrentControlRaw,
260 public ImplementCurrentControl,
261 public eth::IethResource,
262 public IJointFaultRaw,
263 public ImplementJointFault,
265 {
266private:
267 eth::TheEthManager* ethManager;
269 ServiceParser* parser;
270 eomc::Parser * _mcparser;
271 ControlBoardHelper* _measureConverter;
272 std::mutex _mutex;
273
274 bool opened; //internal state
275
276 MCdiagnostics mcdiagnostics;
277
279 int _njoints;
280 eomc::behaviour_flags_t behFlags;
281 servConfigMC_t serviceConfig;
282 double * _gearbox_M2J;
283 double * _gearbox_E2J;
284 double * _deadzone;
285 std::vector<eomc::kalmanFilterParams_t> _kalman_params;
287 std::vector<std::unique_ptr<eomc::ITemperatureSensor>> _temperatureSensorsVector;
288
289 eomc::focBasedSpecificInfo_t * _foc_based_info;
290
291 std::vector<eomc::encoder_t> _jointEncs;
292 std::vector<eomc::encoder_t> _motorEncs;
293
294 std::vector<eomc::rotorLimits_t> _rotorsLimits;
295 std::vector<eomc::jointLimits_t> _jointsLimits;
296 std::vector<eomc::motorCurrentLimits_t> _currentLimits;
297 std::vector<eomc::temperatureLimits_t> _temperatureLimits;
298 eomc::couplingInfo_t _couplingInfo;
299 std::vector<eomc::JointsSet> _jsets;
300 std::vector<int> _joint2set;
301 std::vector<eomc::timeouts_t> _timeouts;
302
303 std::vector<eomc::impedanceParameters_t> _impedance_params; // TODO doubled!!! optimize using just one of the 2!!!
304 eomc::impedanceLimits_t * _impedance_limits;
307 eomc::PidInfo * _trj_pids;
308 //eomc::PidInfo * _dir_pids;
309 eomc::TrqPidInfo * _trq_pids;
310 eomc::PidInfo * _cur_pids;
311 eomc::PidInfo * _spd_pids;
312
313 int * _axisMap;
314 std::vector<eomc::axisInfo_t> _axesInfo;
316
317 // event downsampler
318 mced::mcEventDownsampler* event_downsampler;
319
320#ifdef VERIFY_ROP_SETIMPEDANCE
321 uint32_t *impedanceSignature;
322#endif
323
324#ifdef VERIFY_ROP_SETPOSITIONRAW
325 uint32_t *refRawSignature;
326 bool *sendingDirects;
327#endif
328
329
330
331 double SAFETY_THRESHOLD;
332
333
334 // internal stuff
335 bool *_enabledAmp; // Middle step toward a full enabled motor controller. Amp (pwm) plus Pid enable command must be sent in order to get the joint into an active state.
336 bool *_enabledPid; // Depends on enabledAmp. When both are set, the joint exits the idle mode and goes into position mode. If one of them is disabled, it falls to idle.
337 bool *_calibrated; // Flag to know if the calibrate function has been called for the joint
338 double *_ref_command_positions;// used for position control.
339 double *_ref_speeds; // used for position control.
340 double *_ref_command_speeds; // used for velocity control.
341 double *_ref_positions; // used for direct position control.
342 double *_ref_accs; // for velocity control, in position min jerk eq is used.
343 double *_encodersStamp;
344 bool *checking_motiondone; /* flag telling if I'm already waiting for motion done */
345 #define MAX_POSITION_MOVE_INTERVAL 0.080
346 double *_last_position_move_time;
347 eOmc_impedance_t *_cacheImpedance; /* cache impedance value to split up the 2 sets */
348 std::vector<yarp::dev::eomc::Watchdog> _temperatureSensorErrorWatchdog; /* counter used to filter error coming from tdb reading fromm 2FOC board*/
349 std::vector<yarp::dev::eomc::Watchdog> _temperatureExceededLimitWatchdog; /* counter used to filter the print of the exeded limits*/
350 std::vector<yarp::dev::eomc::TemperatureFilter> _temperatureSpikesFilter;
351
352 std::map<std::string, rawValuesKeyMetadata> _rawValuesMetadataMap;
353 std::vector<std::int32_t> _rawDataAuxVector;
354
355#ifdef NETWORK_PERFORMANCE_BENCHMARK
356 Tools:Emb_RensponseTimingVerifier m_responseTimingVerifier;
357#endif
358
359private:
360
361 std::string getBoardInfo(void);
362 bool askRemoteValue(eOprotID32_t id32, void* value, uint16_t& size);
363 template <class T>
364 bool askRemoteValues(eOprotEndpoint_t ep, eOprotEntity_t entity, eOprotTag_t tag, std::vector<T>& values);
365 bool checkRemoteControlModeStatus(int joint, int target_mode);
366
367 bool dealloc();
368
369
370 bool verifyUserControlLawConsistencyInJointSet(eomc::PidInfo *ipdInfo);
371 bool verifyUserControlLawConsistencyInJointSet(eomc::TrqPidInfo *pidInfo);
372 bool verifyTorquePidshasSameUnitTypes(yarp::dev::PidFeedbackUnitsEnum &fbk_pidunits, yarp::dev::PidOutputUnitsEnum& out_pidunits);
373 bool verifyUseMotorSpeedFbkInJointSet(int useMotorSpeedFbk []);
374 bool updatedJointsetsCfgWithControlInfo(void);
375 bool saveCouplingsData(void);
376 void debugUtil_printJointsetInfo(void);
377
378 bool isTorqueControlEnabled(int joint);
379 bool isVelocityControlEnabled(int joint);
380
381 bool iNeedCouplingsInfo(void); //the device needs coupling info if it manages joints controlled by 2foc and mc4plus.
382
383 bool getJointConfiguration(int joint, eOmc_joint_config_t *jntCfg_ptr);
384 bool getMotorConfiguration(int axis, eOmc_motor_config_t *motCfg_ptr);
385 bool getGerabox_E2J(int joint, double *gearbox_E2J_ptr);
386 bool getJointEncTolerance(int joint, double *jEncTolerance_ptr);
387 bool getMotorEncTolerance(int axis, double *mEncTolerance_ptr);
388 void updateDeadZoneWithDefaultValues(void);
389 bool getJointDeadZoneRaw(int j, double &jntDeadZone);
390
391private:
392
393 //functions used in init this object
394 bool fromConfig(yarp::os::Searchable &config);
395 int fromConfig_NumOfJoints(yarp::os::Searchable &config);
396 bool fromConfig_getGeneralInfo(yarp::os::Searchable &config); //get general info: useRawEncoderData, useLiitedPwm, etc....
397 bool fromConfig_Step2(yarp::os::Searchable &config);
398 bool fromConfig_readServiceCfg(yarp::os::Searchable &config);
399 bool initializeInterfaces(measureConvFactors &f);
400 bool alloc(int njoints);
401 bool init(void);
402
403 //function used in the closing this object
404 void cleanup(void);
405
406 //used in pid interface
407 bool helper_setPosPidRaw( int j, const Pid &pid);
408 bool helper_getPosPidRaw(int j, Pid *pid);
409 bool helper_getPosPidsRaw(Pid *pid);
410
411 //used in torque control interface
412 bool helper_setTrqPidRaw( int j, const Pid &pid);
413 bool helper_getTrqPidRaw(int j, Pid *pid);
414 bool helper_getTrqPidsRaw(Pid *pid);
415
416 //used in velocity control interface
417 bool helper_setVelPidRaw( int j, const Pid &pid);
418 bool helper_getVelPidRaw(int j, Pid *pid);
419 bool helper_getVelPidsRaw(Pid *pid);
420
421 //used in current control interface
422 bool helper_setCurPidRaw(int j, const Pid &pid);
423 bool helper_getCurPidRaw(int j, Pid *pid);
424 bool helper_getCurPidsRaw(Pid *pid);
425
426 //used in low level speed control interface
427 bool helper_setSpdPidRaw(int j, const Pid &pid);
428 bool helper_getSpdPidRaw(int j, Pid *pid);
429 bool helper_getSpdPidsRaw(Pid *pid);
430
431 bool checkCalib14RotationParam(int32_t calib_param4);
432
433 // used in rawvaluespublisher interface
434 bool getRawData_core(std::string key, std::vector<std::int32_t> &data);
435
436public:
437
440
441
442 // Device Driver
443 virtual bool open(yarp::os::Searchable &par);
444 virtual bool close();
445
446 virtual bool initialised();
447 virtual eth::iethresType_t type();
448 virtual bool update(eOprotID32_t id32, double timestamp, void *rxdata);
449 virtual bool getEntityName(uint32_t entityId, std::string &entityName);
450 virtual bool getEncoderTypeName(uint32_t jomoId, eOmc_position_t pos, std::string &encoderTypeName) override;
451
453 virtual bool setPidRaw(const PidControlTypeEnum& pidtype, int j, const Pid &pid) override;
454 virtual bool setPidsRaw(const PidControlTypeEnum& pidtype, const Pid *pids) override;
455 virtual bool setPidReferenceRaw(const PidControlTypeEnum& pidtype, int j, double ref) override;
456 virtual bool setPidReferencesRaw(const PidControlTypeEnum& pidtype, const double *refs) override;
457 virtual bool setPidErrorLimitRaw(const PidControlTypeEnum& pidtype, int j, double limit) override;
458 virtual bool setPidErrorLimitsRaw(const PidControlTypeEnum& pidtype, const double *limits) override;
459 virtual bool getPidErrorRaw(const PidControlTypeEnum& pidtype, int j, double *err) override;
460 virtual bool getPidErrorsRaw(const PidControlTypeEnum& pidtype, double *errs) override;
461 virtual bool getPidOutputRaw(const PidControlTypeEnum& pidtype, int j, double *out) override;
462 virtual bool getPidOutputsRaw(const PidControlTypeEnum& pidtype, double *outs) override;
463 virtual bool getPidRaw(const PidControlTypeEnum& pidtype, int j, Pid *pid) override;
464 virtual bool getPidsRaw(const PidControlTypeEnum& pidtype, Pid *pids) override;
465 virtual bool getPidReferenceRaw(const PidControlTypeEnum& pidtype, int j, double *ref) override;
466 virtual bool getPidReferencesRaw(const PidControlTypeEnum& pidtype, double *refs) override;
467 virtual bool getPidErrorLimitRaw(const PidControlTypeEnum& pidtype, int j, double *limit) override;
468 virtual bool getPidErrorLimitsRaw(const PidControlTypeEnum& pidtype, double *limits) override;
469 virtual bool resetPidRaw(const PidControlTypeEnum& pidtype, int j) override;
470 virtual bool disablePidRaw(const PidControlTypeEnum& pidtype, int j) override;
471 virtual bool enablePidRaw(const PidControlTypeEnum& pidtype, int j) override;
472 virtual bool setPidOffsetRaw(const PidControlTypeEnum& pidtype, int j, double v) override;
473 virtual bool isPidEnabledRaw(const PidControlTypeEnum& pidtype, int j, bool* enabled) override;
474
475 // POSITION CONTROL INTERFACE RAW
476 virtual bool getAxes(int *ax) override;
477 virtual bool positionMoveRaw(int j, double ref) override;
478 virtual bool positionMoveRaw(const double *refs) override;
479 virtual bool relativeMoveRaw(int j, double delta) override;
480 virtual bool relativeMoveRaw(const double *deltas) override;
481 virtual bool checkMotionDoneRaw(bool *flag) override;
482 virtual bool checkMotionDoneRaw(int j, bool *flag) override;
483 virtual bool setRefSpeedRaw(int j, double sp) override;
484 virtual bool setRefSpeedsRaw(const double *spds) override;
485 virtual bool setRefAccelerationRaw(int j, double acc) override;
486 virtual bool setRefAccelerationsRaw(const double *accs) override;
487 virtual bool getRefSpeedRaw(int j, double *ref) override;
488 virtual bool getRefSpeedsRaw(double *spds) override;
489 virtual bool getRefAccelerationRaw(int j, double *acc) override;
490 virtual bool getRefAccelerationsRaw(double *accs) override;
491 virtual bool stopRaw(int j) override;
492 virtual bool stopRaw() override;
493
494
495 // Position Control2 Interface
496 virtual bool positionMoveRaw(const int n_joint, const int *joints, const double *refs) override;
497 virtual bool relativeMoveRaw(const int n_joint, const int *joints, const double *deltas) override;
498 virtual bool checkMotionDoneRaw(const int n_joint, const int *joints, bool *flags) override;
499 virtual bool setRefSpeedsRaw(const int n_joint, const int *joints, const double *spds) override;
500 virtual bool setRefAccelerationsRaw(const int n_joint, const int *joints, const double *accs) override;
501 virtual bool getRefSpeedsRaw(const int n_joint, const int *joints, double *spds) override;
502 virtual bool getRefAccelerationsRaw(const int n_joint, const int *joints, double *accs) override;
503 virtual bool stopRaw(const int n_joint, const int *joints) override;
504 virtual bool getTargetPositionRaw(const int joint, double *ref) override;
505 virtual bool getTargetPositionsRaw(double *refs) override;
506 virtual bool getTargetPositionsRaw(const int n_joint, const int *joints, double *refs) override;
507
508 // Velocity control interface raw
509 virtual bool velocityMoveRaw(int j, double sp) override;
510 virtual bool velocityMoveRaw(const double *sp) override;
511
512
513 // calibration2raw
514 virtual bool setCalibrationParametersRaw(int axis, const CalibrationParameters& params) override;
515 virtual bool calibrateAxisWithParamsRaw(int axis, unsigned int type, double p1, double p2, double p3) override;
516 virtual bool calibrationDoneRaw(int j) override;
517
518
520
521 // ControlMode
522 virtual bool getControlModeRaw(int j, int *v) override;
523 virtual bool getControlModesRaw(int *v) override;
524
525 // ControlMode 2
526 virtual bool getControlModesRaw(const int n_joint, const int *joints, int *modes) override;
527 virtual bool setControlModeRaw(const int j, const int mode) override;
528 virtual bool setControlModesRaw(const int n_joint, const int *joints, int *modes) override;
529 virtual bool setControlModesRaw(int *modes) override;
530
532 virtual bool resetEncoderRaw(int j) override;
533 virtual bool resetEncodersRaw() override;
534 virtual bool setEncoderRaw(int j, double val) override;
535 virtual bool setEncodersRaw(const double *vals) override;
536 virtual bool getEncoderRaw(int j, double *v) override;
537 virtual bool getEncodersRaw(double *encs) override;
538 virtual bool getEncoderSpeedRaw(int j, double *sp) override;
539 virtual bool getEncoderSpeedsRaw(double *spds) override;
540 virtual bool getEncoderAccelerationRaw(int j, double *spds) override;
541 virtual bool getEncoderAccelerationsRaw(double *accs) override;
543
544 virtual bool getEncodersTimedRaw(double *encs, double *stamps) override;
545 virtual bool getEncoderTimedRaw(int j, double *encs, double *stamp) override;
546
548 virtual bool getNumberOfMotorEncodersRaw(int * num) override;
549 virtual bool resetMotorEncoderRaw(int m) override;
550 virtual bool resetMotorEncodersRaw() override;
551 virtual bool setMotorEncoderRaw(int m, const double val) override;
552 virtual bool setMotorEncodersRaw(const double *vals) override;
553 virtual bool getMotorEncoderRaw(int m, double *v) override;
554 virtual bool getMotorEncodersRaw(double *encs) override;
555 virtual bool getMotorEncoderSpeedRaw(int m, double *sp) override;
556 virtual bool getMotorEncoderSpeedsRaw(double *spds) override;
557 virtual bool getMotorEncoderAccelerationRaw(int m, double *spds) override;
558 virtual bool getMotorEncoderAccelerationsRaw(double *accs) override;
559 virtual bool getMotorEncodersTimedRaw(double *encs, double *stamps) override;
560 virtual bool getMotorEncoderTimedRaw(int m, double *encs, double *stamp) override;
561 virtual bool getMotorEncoderCountsPerRevolutionRaw(int m, double *v) override;
562 virtual bool setMotorEncoderCountsPerRevolutionRaw(int m, const double cpr) override;
564
566 virtual bool getRemoteVariableRaw(std::string key, yarp::os::Bottle& val) override;
567 virtual bool setRemoteVariableRaw(std::string key, const yarp::os::Bottle& val) override;
568 virtual bool getRemoteVariablesListRaw(yarp::os::Bottle* listOfKeys) override;
570
572 virtual bool getAxisNameRaw(int axis, std::string& name) override;
573 virtual bool getJointTypeRaw(int axis, yarp::dev::JointTypeEnum& type) override;
575
576 //Internal use, not exposed by Yarp (yet)
577 bool getRotorEncoderResolutionRaw(int m, double &rotres) ;
578 bool getJointEncoderResolutionRaw(int m, double &jntres) ;
579 bool getJointEncoderTypeRaw(int j, int &type) ;
580 bool getRotorEncoderTypeRaw(int j, int &type) ;
581 bool getKinematicMJRaw(int j, double &rotres) ;
582 bool getTemperatureSensorTypeRaw(int j, std::string& ret) ;
583 bool getHasTempSensorsRaw(int j, int& ret) ;
584 bool getHasHallSensorRaw(int j, int& ret) ;
585 bool getHasRotorEncoderRaw(int j, int& ret) ;
586 bool getHasRotorEncoderIndexRaw(int j, int& ret) ;
587 bool getMotorPolesRaw(int j, int& poles) ;
588 bool getRotorIndexOffsetRaw(int j, double& rotorOffset) ;
589 bool getTorqueControlFilterType(int j, int& type) ;
590 bool getRotorLimitsRaw(int j, double *rotorMin, double *rotorMax) ;
591 bool getWholeImpedanceRaw(int j, eOmc_impedance_t &imped);
592
594 virtual bool enableAmpRaw(int j) override;
595 virtual bool disableAmpRaw(int j) override;
596 virtual bool getCurrentsRaw(double *vals) override;
597 virtual bool getCurrentRaw(int j, double *val) override;
598 virtual bool setMaxCurrentRaw(int j, double val) override;
599 virtual bool getMaxCurrentRaw(int j, double *val) override;
600 virtual bool getAmpStatusRaw(int *st) override;
601 virtual bool getAmpStatusRaw(int j, int *st) override;
602 virtual bool getPWMRaw(int j, double* val) override;
603 virtual bool getPWMLimitRaw(int j, double* val) override;
604 virtual bool setPWMLimitRaw(int j, const double val) override;
605 virtual bool getPowerSupplyVoltageRaw(int j, double* val) override;
606
608
609 // virtual analog sensor
610 virtual yarp::dev::VAS_status getVirtualAnalogSensorStatus(int ch) override;
611 virtual int getVirtualAnalogSensorChannels() override;
612 virtual bool updateVirtualAnalogSensorMeasure(yarp::sig::Vector &fTorques) override;
613 virtual bool updateVirtualAnalogSensorMeasure(int j, double &fTorque) override;
614
615#ifdef IMPLEMENT_DEBUG_INTERFACE
616 //----------------------------------------------
617 // Debug interface
618 //----------------------------------------------
619 virtual bool setParameterRaw(int j, unsigned int type, double value) override;
620 virtual bool getParameterRaw(int j, unsigned int type, double *value) override;
621 virtual bool setDebugParameterRaw(int j, unsigned int index, double value) override;
622 virtual bool setDebugReferencePositionRaw(int j, double value) override;
623 virtual bool getDebugParameterRaw(int j, unsigned int index, double *value) override;
624 virtual bool getDebugReferencePositionRaw(int j, double *value) override;
625#endif
626
627 // Limits
628 virtual bool setLimitsRaw(int axis, double min, double max) override;
629 virtual bool getLimitsRaw(int axis, double *min, double *max) override;
630 // Limits 2
631 virtual bool setVelLimitsRaw(int axis, double min, double max) override;
632 virtual bool getVelLimitsRaw(int axis, double *min, double *max) override;
633
634 // Torque control
635 virtual bool getTorqueRaw(int j, double *t) override;
636 virtual bool getTorquesRaw(double *t) override;
637 virtual bool getTorqueRangeRaw(int j, double *min, double *max) override;
638 virtual bool getTorqueRangesRaw(double *min, double *max) override;
639 virtual bool setRefTorquesRaw(const double *t) override;
640 virtual bool setRefTorqueRaw(int j, double t) override;
641 virtual bool setRefTorquesRaw(const int n_joint, const int *joints, const double *t) override;
642 virtual bool getRefTorquesRaw(double *t) override;
643 virtual bool getRefTorqueRaw(int j, double *t) override;
644 virtual bool getMotorTorqueParamsRaw(int j, MotorTorqueParameters *params) override;
645 virtual bool setMotorTorqueParamsRaw(int j, const MotorTorqueParameters params) override;
646
647
648 // IVelocityControl2
649 virtual bool velocityMoveRaw(const int n_joint, const int *joints, const double *spds) override;
650 virtual bool getRefVelocityRaw(const int joint, double *ref) override;
651 virtual bool getRefVelocitiesRaw(double *refs) override;
652 virtual bool getRefVelocitiesRaw(const int n_joint, const int *joints, double *refs) override;
653
654
655 // Impedance interface
656 virtual bool getImpedanceRaw(int j, double *stiffness, double *damping) override;
657 virtual bool setImpedanceRaw(int j, double stiffness, double damping) override;
658 virtual bool setImpedanceOffsetRaw(int j, double offset) override;
659 virtual bool getImpedanceOffsetRaw(int j, double *offset) override;
660 virtual bool getCurrentImpedanceLimitRaw(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override;
661
662 // PositionDirect Interface
663 virtual bool setPositionRaw(int j, double ref) override;
664 virtual bool setPositionsRaw(const int n_joint, const int *joints, const double *refs) override;
665 virtual bool setPositionsRaw(const double *refs) override;
666 virtual bool getRefPositionRaw(const int joint, double *ref) override;
667 virtual bool getRefPositionsRaw(double *refs) override;
668 virtual bool getRefPositionsRaw(const int n_joint, const int *joints, double *refs) override;
669
670 // InteractionMode interface
671 virtual bool getInteractionModeRaw(int j, yarp::dev::InteractionModeEnum* _mode) override;
672 virtual bool getInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum* modes) override;
673 virtual bool getInteractionModesRaw(yarp::dev::InteractionModeEnum* modes) override;
674 virtual bool setInteractionModeRaw(int j, yarp::dev::InteractionModeEnum _mode) override;
675 virtual bool setInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum* modes) override;
676 virtual bool setInteractionModesRaw(yarp::dev::InteractionModeEnum* modes) override;
677
678 // IMotor interface
679 virtual bool getNumberOfMotorsRaw(int * num) override;
680 virtual bool getTemperatureRaw(int m, double* val) override;
681 virtual bool getTemperaturesRaw(double *vals) override;
682 virtual bool getTemperatureLimitRaw(int m, double *temp) override;
683 virtual bool setTemperatureLimitRaw(int m, const double temp) override;
684 virtual bool getPeakCurrentRaw(int m, double *val) override;
685 virtual bool setPeakCurrentRaw(int m, const double val) override;
686 virtual bool getNominalCurrentRaw(int m, double *val) override;
687 virtual bool setNominalCurrentRaw(int m, const double val) override;
688 virtual bool getGearboxRatioRaw(int m, double *gearbox) override;
689
690 // PWMControl
691 virtual bool setRefDutyCycleRaw(int j, double v) override;
692 virtual bool setRefDutyCyclesRaw(const double *v) override;
693 virtual bool getRefDutyCycleRaw(int j, double *v) override;
694 virtual bool getRefDutyCyclesRaw(double *v) override;
695 virtual bool getDutyCycleRaw(int j, double *v) override;
696 virtual bool getDutyCyclesRaw(double *v) override;
697
698 // CurrentControl
699 // virtual bool getAxes(int *ax) override;
700 //virtual bool getCurrentRaw(int j, double *t) override;
701 //virtual bool getCurrentsRaw(double *t) override;
702 virtual bool getCurrentRangeRaw(int j, double *min, double *max) override;
703 virtual bool getCurrentRangesRaw(double *min, double *max) override;
704 virtual bool setRefCurrentsRaw(const double *t) override;
705 virtual bool setRefCurrentRaw(int j, double t) override;
706 virtual bool setRefCurrentsRaw(const int n_joint, const int *joints, const double *t) override;
707 virtual bool getRefCurrentsRaw(double *t) override;
708 virtual bool getRefCurrentRaw(int j, double *t) override;
709
710 // Used in joint faults interface
711 // Teturns true if it was successful and writes the fault code in the fault parameter
712 // with the associated string in message. If no fault is detected the fault parameters is set to -1.
713 // Returns false and fault is set to -2 if retrieval was unsuccessful.
714 virtual bool getLastJointFaultRaw(int j, int& fault, std::string& message) override;
715
716 // IRawValuesPublisher
717 virtual bool getRawDataMap(std::map<std::string, std::vector<std::int32_t>> &map) override;
718 virtual bool getRawData(std::string key, std::vector<std::int32_t> &data) override;
719 virtual bool getKeys(std::vector<std::string> &keys) override;
720 virtual int getNumberOfKeys() override;
721 virtual bool getMetadataMap(rawValuesKeyMetadataMap &metamap) override;
722 virtual bool getKeyMetadata(std::string key, rawValuesKeyMetadata &meta) override;
723};
724
725#endif // include guard
@ data
embObjMotionControl : driver for iCub motor control boards EMS on a ETH bus.
virtual bool getPidReferenceRaw(const PidControlTypeEnum &pidtype, int j, double *ref) override
virtual bool setVelLimitsRaw(int axis, double min, double max) override
virtual bool setMaxCurrentRaw(int j, double val) override
virtual bool getMotorEncoderRaw(int m, double *v) override
virtual bool enablePidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool getRawData(std::string key, std::vector< std::int32_t > &data) override
virtual bool setPidErrorLimitsRaw(const PidControlTypeEnum &pidtype, const double *limits) override
virtual bool setRefSpeedsRaw(const double *spds) override
virtual bool getEncoderTypeName(uint32_t jomoId, eOmc_position_t pos, std::string &encoderTypeName) override
virtual bool getTorqueRangesRaw(double *min, double *max) override
virtual bool getControlModesRaw(int *v) override
virtual bool getRefCurrentRaw(int j, double *t) override
virtual bool setInteractionModeRaw(int j, yarp::dev::InteractionModeEnum _mode) override
virtual bool getPidOutputRaw(const PidControlTypeEnum &pidtype, int j, double *out) override
virtual bool getInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
virtual bool setInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
bool getRotorEncoderTypeRaw(int j, int &type)
virtual bool setRefAccelerationsRaw(const double *accs) override
virtual bool disablePidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool getImpedanceRaw(int j, double *stiffness, double *damping) override
virtual bool update(eOprotID32_t id32, double timestamp, void *rxdata)
virtual bool setPidOffsetRaw(const PidControlTypeEnum &pidtype, int j, double v) override
virtual bool getPowerSupplyVoltageRaw(int j, double *val) override
virtual bool setPidsRaw(const PidControlTypeEnum &pidtype, const Pid *pids) override
virtual bool getPidErrorLimitRaw(const PidControlTypeEnum &pidtype, int j, double *limit) override
virtual bool setPeakCurrentRaw(int m, const double val) override
virtual bool enableAmpRaw(int j) override
bool getHasRotorEncoderRaw(int j, int &ret)
virtual bool setRefTorqueRaw(int j, double t) override
virtual bool relativeMoveRaw(int j, double delta) override
virtual bool disableAmpRaw(int j) override
virtual bool getRefVelocityRaw(const int joint, double *ref) override
virtual bool getEncodersRaw(double *encs) override
virtual bool getLastJointFaultRaw(int j, int &fault, std::string &message) override
virtual bool getDutyCyclesRaw(double *v) override
virtual bool getPidReferencesRaw(const PidControlTypeEnum &pidtype, double *refs) override
virtual bool getMotorEncoderAccelerationsRaw(double *accs) override
virtual bool resetMotorEncoderRaw(int m) override
virtual bool checkMotionDoneRaw(bool *flag) override
virtual bool getPWMLimitRaw(int j, double *val) override
virtual bool getControlModeRaw(int j, int *v) override
virtual bool getPWMRaw(int j, double *val) override
bool getRotorLimitsRaw(int j, double *rotorMin, double *rotorMax)
virtual bool getTorqueRaw(int j, double *t) override
virtual bool getMotorEncodersRaw(double *encs) override
virtual bool open(yarp::os::Searchable &par)
virtual bool getEncodersTimedRaw(double *encs, double *stamps) override
bool getJointEncoderResolutionRaw(int m, double &jntres)
virtual bool getRefSpeedsRaw(double *spds) override
virtual bool getInteractionModeRaw(int j, yarp::dev::InteractionModeEnum *_mode) override
virtual bool getEntityName(uint32_t entityId, std::string &entityName)
virtual eth::iethresType_t type()
bool getTemperatureSensorTypeRaw(int j, std::string &ret)
virtual bool getCurrentRangesRaw(double *min, double *max) override
virtual bool getLimitsRaw(int axis, double *min, double *max) override
virtual bool setPidReferenceRaw(const PidControlTypeEnum &pidtype, int j, double ref) override
virtual bool updateVirtualAnalogSensorMeasure(yarp::sig::Vector &fTorques) override
virtual bool setImpedanceRaw(int j, double stiffness, double damping) override
virtual bool setRemoteVariableRaw(std::string key, const yarp::os::Bottle &val) override
virtual bool getCurrentsRaw(double *vals) override
virtual bool getTorqueRangeRaw(int j, double *min, double *max) override
virtual bool getTorquesRaw(double *t) override
virtual bool getAmpStatusRaw(int *st) override
virtual yarp::dev::VAS_status getVirtualAnalogSensorStatus(int ch) override
virtual bool setRefCurrentsRaw(const double *t) override
virtual bool getTargetPositionRaw(const int joint, double *ref) override
virtual bool setMotorEncoderCountsPerRevolutionRaw(int m, const double cpr) override
virtual bool getGearboxRatioRaw(int m, double *gearbox) override
virtual bool resetEncodersRaw() override
virtual bool getTemperatureLimitRaw(int m, double *temp) override
virtual bool setCalibrationParametersRaw(int axis, const CalibrationParameters &params) override
virtual bool getRawDataMap(std::map< std::string, std::vector< std::int32_t > > &map) override
virtual bool setNominalCurrentRaw(int m, const double val) override
virtual bool setMotorTorqueParamsRaw(int j, const MotorTorqueParameters params) override
virtual bool setRefCurrentRaw(int j, double t) override
virtual bool setTemperatureLimitRaw(int m, const double temp) override
virtual bool getRemoteVariableRaw(std::string key, yarp::os::Bottle &val) override
virtual bool calibrationDoneRaw(int j) override
virtual bool getEncoderTimedRaw(int j, double *encs, double *stamp) override
virtual bool getMetadataMap(rawValuesKeyMetadataMap &metamap) override
virtual bool getAxisNameRaw(int axis, std::string &name) override
virtual bool setPWMLimitRaw(int j, const double val) override
virtual bool getRefAccelerationRaw(int j, double *acc) override
virtual bool resetPidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool getPidRaw(const PidControlTypeEnum &pidtype, int j, Pid *pid) override
virtual bool setPositionRaw(int j, double ref) override
virtual bool getRefSpeedRaw(int j, double *ref) override
virtual bool setPidErrorLimitRaw(const PidControlTypeEnum &pidtype, int j, double limit) override
virtual bool setControlModesRaw(const int n_joint, const int *joints, int *modes) override
bool getRotorEncoderResolutionRaw(int m, double &rotres)
virtual bool setRefDutyCycleRaw(int j, double v) override
virtual bool getImpedanceOffsetRaw(int j, double *offset) override
bool getWholeImpedanceRaw(int j, eOmc_impedance_t &imped)
virtual bool getEncoderSpeedsRaw(double *spds) override
virtual bool setPositionsRaw(const int n_joint, const int *joints, const double *refs) override
virtual bool resetMotorEncodersRaw() override
bool getJointEncoderTypeRaw(int j, int &type)
virtual bool getNumberOfMotorEncodersRaw(int *num) override
virtual bool getPidErrorLimitsRaw(const PidControlTypeEnum &pidtype, double *limits) override
virtual bool setMotorEncoderRaw(int m, const double val) override
virtual bool getMotorEncoderTimedRaw(int m, double *encs, double *stamp) override
virtual bool setEncoderRaw(int j, double val) override
virtual bool resetEncoderRaw(int j) override
virtual bool setPidRaw(const PidControlTypeEnum &pidtype, int j, const Pid &pid) override
virtual bool getRefAccelerationsRaw(double *accs) override
virtual bool getPidOutputsRaw(const PidControlTypeEnum &pidtype, double *outs) override
virtual bool getRefPositionsRaw(double *refs) override
virtual bool getJointTypeRaw(int axis, yarp::dev::JointTypeEnum &type) override
virtual bool calibrateAxisWithParamsRaw(int axis, unsigned int type, double p1, double p2, double p3) override
virtual bool getNominalCurrentRaw(int m, double *val) override
virtual bool setRefTorquesRaw(const double *t) override
virtual bool getRefDutyCyclesRaw(double *v) override
virtual bool getCurrentRaw(int j, double *val) override
bool getMotorPolesRaw(int j, int &poles)
virtual bool getCurrentRangeRaw(int j, double *min, double *max) override
virtual bool getRefTorquesRaw(double *t) override
virtual bool setEncodersRaw(const double *vals) override
virtual bool getEncoderRaw(int j, double *v) override
virtual bool getKeys(std::vector< std::string > &keys) override
virtual bool setControlModeRaw(const int j, const int mode) override
virtual bool positionMoveRaw(int j, double ref) override
bool getKinematicMJRaw(int j, double &rotres)
virtual bool setLimitsRaw(int axis, double min, double max) override
virtual bool getEncoderAccelerationRaw(int j, double *spds) override
virtual bool getMotorTorqueParamsRaw(int j, MotorTorqueParameters *params) override
virtual bool getTemperatureRaw(int m, double *val) override
virtual bool setPidReferencesRaw(const PidControlTypeEnum &pidtype, const double *refs) override
virtual bool getCurrentImpedanceLimitRaw(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override
virtual bool getVelLimitsRaw(int axis, double *min, double *max) override
virtual bool getRefTorqueRaw(int j, double *t) override
virtual bool getNumberOfMotorsRaw(int *num) override
virtual bool setRefSpeedRaw(int j, double sp) override
virtual bool getMotorEncoderSpeedsRaw(double *spds) override
virtual bool getMaxCurrentRaw(int j, double *val) override
virtual bool getTemperaturesRaw(double *vals) override
virtual bool getMotorEncoderCountsPerRevolutionRaw(int m, double *v) override
virtual bool getEncoderAccelerationsRaw(double *accs) override
virtual bool getPidsRaw(const PidControlTypeEnum &pidtype, Pid *pids) override
virtual bool getRemoteVariablesListRaw(yarp::os::Bottle *listOfKeys) override
bool getTorqueControlFilterType(int j, int &type)
virtual bool getRefCurrentsRaw(double *t) override
virtual bool getPidErrorRaw(const PidControlTypeEnum &pidtype, int j, double *err) override
virtual bool setImpedanceOffsetRaw(int j, double offset) override
virtual bool getRefDutyCycleRaw(int j, double *v) override
virtual bool getMotorEncodersTimedRaw(double *encs, double *stamps) override
virtual int getVirtualAnalogSensorChannels() override
bool getRotorIndexOffsetRaw(int j, double &rotorOffset)
virtual bool setMotorEncodersRaw(const double *vals) override
virtual bool isPidEnabledRaw(const PidControlTypeEnum &pidtype, int j, bool *enabled) override
virtual bool setRefAccelerationRaw(int j, double acc) override
virtual bool getEncoderSpeedRaw(int j, double *sp) override
virtual bool getMotorEncoderSpeedRaw(int m, double *sp) override
virtual bool getMotorEncoderAccelerationRaw(int m, double *spds) override
virtual bool getAxes(int *ax) override
virtual bool getRefPositionRaw(const int joint, double *ref) override
virtual bool setRefDutyCyclesRaw(const double *v) override
virtual bool getKeyMetadata(std::string key, rawValuesKeyMetadata &meta) override
virtual bool velocityMoveRaw(int j, double sp) override
virtual bool getPeakCurrentRaw(int m, double *val) override
virtual bool getPidErrorsRaw(const PidControlTypeEnum &pidtype, double *errs) override
virtual bool getRefVelocitiesRaw(double *refs) override
virtual bool getTargetPositionsRaw(double *refs) override
bool getHasRotorEncoderIndexRaw(int j, int &ret)
virtual bool getDutyCycleRaw(int j, double *v) override
void updatePrevTemperature(double temperature)
TemperatureFilter(TemperatureFilter &&other) noexcept=default
TemperatureFilter & operator=(const TemperatureFilter &other)=default
TemperatureFilter(const TemperatureFilter &other)=default
TemperatureFilter & operator=(TemperatureFilter &&other) noexcept=default
TemperatureFilter(uint32_t threshold, int32_t initCounter)
Watchdog & operator=(const Watchdog &other)=default
void setThreshold(uint8_t txrateOfRegularROPs)
Watchdog(const Watchdog &other)=default
Watchdog(Watchdog &&other) noexcept=default
Watchdog & operator=(Watchdog &&other) noexcept=default
_3f_vect_t acc
Definition dataTypes.h:1
In the Tools namespace there are classes useful to check some kinds of performance on robot.
iethresType_t
This file contains the definition of unique IDs for the body parts and the skin parts of the robot.
Copyright (C) 2008 RobotCub Consortium.
out
Definition sine.m:8
degrees offset
Definition sine.m:4
std::vector< BufferedPort< Bottle > * > ports
eOmn_serv_diagn_cfg_t config
bool useRawEncoderData
its value depends on environment variable "ETH_VERBOSEWHENOK"
bool pwmIsLimited
if true than do not use calibration data
int resolution
Num of error bits passable for joint encoder.
double tolerance
joint encoder type
vector< eOmc_jointset_configuration_t > jointset_cfgs