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;
121double _abstime;
122uint32_t _threshold; // use 10000 as limit on the watchdog for the error on the temperature sensor receiving of the values -
123 // since the ETH callback timing is 2ms by default so using 10000 we can set a checking threshould of 5 second
124 // in which we can allow the tdb to not respond. If cannot receive response over 1s we trigger the error
125public:
126
127Watchdog(): _count(0), _isStarted(false), _threshold(60000), _time(0), _abstime(yarp::os::Time::now()){;}
128Watchdog(uint32_t threshold):_count(0), _isStarted(false), _threshold(threshold), _time(0), _abstime(yarp::os::Time::now()){;}
129~Watchdog() = default;
130Watchdog(const Watchdog& other) = default;
131Watchdog(Watchdog&& other) noexcept = default;
132Watchdog& operator=(const Watchdog& other) = default;
133Watchdog& operator=(Watchdog&& other) noexcept = default;
134
135
136bool isStarted(){return _isStarted;}
137void start() {_count = 0; _time = yarp::os::Time::now(); _isStarted = true;}
138bool isExpired() {return (_count >= _threshold);}
139void increment() {++_count;}
140void clear(){_isStarted=false;}
141double getStartTime() {return _time;}
142uint32_t getCount() {return _count; }
143void setThreshold(uint8_t txrateOfRegularROPs){ if(txrateOfRegularROPs != 0) _threshold = _threshold / txrateOfRegularROPs;}
144uint32_t getThreshold(){return _threshold;}
145double getAbsoluteTime(){return _abstime;}
146
147};
148
150{
151private:
152 uint32_t _threshold; // threshold for the delta between current and previous temperature --> set to 20 Celsius deg by default --> over 20 deg delta spike
153 double _motorTempPrev; // motor temperature at previous instant for checking positive temperature spikes
154 bool _isStarted;
155 int32_t _initCounter;
156 std::vector<double> _initTempBuffer;
157public:
158 TemperatureFilter(): _threshold(20), _isStarted(false), _initCounter(50), _initTempBuffer(0), _motorTempPrev(0){;}
159 TemperatureFilter(uint32_t threshold, int32_t initCounter): _threshold(threshold), _isStarted(false), _initCounter(initCounter), _initTempBuffer(0), _motorTempPrev(0){;}
161 TemperatureFilter(const TemperatureFilter& other) = default;
162 TemperatureFilter(TemperatureFilter&& other) noexcept = default;
164 TemperatureFilter& operator=(TemperatureFilter&& other) noexcept = default;
165
166 bool isStarted(){return _isStarted;}
167 uint32_t getTemperatureThreshold() {return _threshold; }
168 double getPrevTemperature(){return _motorTempPrev;}
169 void updatePrevTemperature(double temperature){_motorTempPrev = temperature;}
170 void start(double temperature)
171 {
172 if(_initCounter < 0)
173 {
174 int median_pos = std::ceil(_initTempBuffer.size() / 2) -1;
175 _motorTempPrev = _initTempBuffer.at(median_pos);
176 _isStarted = true;
177 }
178 else
179 {
180 _initTempBuffer.push_back(temperature);
181 --_initCounter;
182 }
183
184 }
185};
186
187}}}
188
189namespace yarp {
190 namespace dev {
192 }
193}
194
195
197{
198 eOmn_serv_diagn_cfg_t config;
199 std::vector<BufferedPort<Bottle>*> ports;
200};
201
202using namespace yarp::dev;
203using namespace iCub;
204
205
225class yarp::dev::embObjMotionControl: public DeviceDriver,
226 public IPidControlRaw,
227 public IControlCalibrationRaw,
228 public IAmplifierControlRaw,
229 public IEncodersTimedRaw,
230 public IMotorEncodersRaw,
231 public ImplementEncodersTimed,
232 public ImplementMotorEncoders,
233 public IMotorRaw,
234 public ImplementMotor,
235 public IPositionControlRaw,
236 public IVelocityControlRaw,
237 public IControlModeRaw,
238 public ImplementControlMode,
239 public IControlLimitsRaw,
240 public IImpedanceControlRaw,
241 public ImplementImpedanceControl,
242 public ImplementControlLimits,
243 public ImplementAmplifierControl,
244 public ImplementPositionControl,
245 public ImplementControlCalibration,
246 public ImplementPidControl,
247 public ImplementVelocityControl,
248 public ITorqueControlRaw,
249 public ImplementTorqueControl,
250 public IVirtualAnalogSensor,
251 public IPositionDirectRaw,
252 public ImplementPositionDirect,
253 public IInteractionModeRaw,
254 public ImplementInteractionMode,
255 public IRemoteVariablesRaw,
256 public ImplementRemoteVariables,
257 public IAxisInfoRaw,
258 public ImplementAxisInfo,
259 public IPWMControlRaw,
260 public ImplementPWMControl,
261 public ICurrentControlRaw,
262 public ImplementCurrentControl,
263 public eth::IethResource,
264 public IJointFaultRaw,
265 public ImplementJointFault,
267 {
268private:
269 eth::TheEthManager* ethManager;
271 ServiceParser* parser;
272 eomc::Parser * _mcparser;
273 ControlBoardHelper* _measureConverter;
274 std::mutex _mutex;
275
276 bool opened; //internal state
277
278 MCdiagnostics mcdiagnostics;
279
281 int _njoints;
282 eomc::behaviour_flags_t behFlags;
283 servConfigMC_t serviceConfig;
284 double * _gearbox_M2J;
285 double * _gearbox_E2J;
286 double * _deadzone;
287 std::vector<eomc::kalmanFilterParams_t> _kalman_params;
289 std::vector<std::unique_ptr<eomc::ITemperatureSensor>> _temperatureSensorsVector;
290
291 eomc::focBasedSpecificInfo_t * _foc_based_info;
292
293 std::vector<eomc::encoder_t> _jointEncs;
294 std::vector<eomc::encoder_t> _motorEncs;
295
296 std::vector<eomc::rotorLimits_t> _rotorsLimits;
297 std::vector<eomc::jointLimits_t> _jointsLimits;
298 std::vector<eomc::motorCurrentLimits_t> _currentLimits;
299 std::vector<eomc::temperatureLimits_t> _temperatureLimits;
300 eomc::couplingInfo_t _couplingInfo;
301 std::vector<eomc::JointsSet> _jsets;
302 std::vector<int> _joint2set;
303 std::vector<eomc::timeouts_t> _timeouts;
304
305 std::vector<eomc::impedanceParameters_t> _impedance_params; // TODO doubled!!! optimize using just one of the 2!!!
306 std::vector<eomc::lugreParameters_t> _lugre_params;
307 eomc::impedanceLimits_t * _impedance_limits;
310 eomc::PidInfo * _trj_pids;
311 //eomc::PidInfo * _dir_pids;
312 eomc::TrqPidInfo * _trq_pids;
313 eomc::PidInfo * _cur_pids;
314 eomc::PidInfo * _spd_pids;
315
316 int * _axisMap;
317 std::vector<eomc::axisInfo_t> _axesInfo;
319
320 // event downsampler
321 mced::mcEventDownsampler* event_downsampler;
322
323#ifdef VERIFY_ROP_SETIMPEDANCE
324 uint32_t *impedanceSignature;
325#endif
326
327#ifdef VERIFY_ROP_SETPOSITIONRAW
328 uint32_t *refRawSignature;
329 bool *sendingDirects;
330#endif
331
332
333
334 double SAFETY_THRESHOLD;
335
336
337 // internal stuff
338 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.
339 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.
340 bool *_calibrated; // Flag to know if the calibrate function has been called for the joint
341 double *_ref_command_positions;// used for position control.
342 double *_ref_speeds; // used for position control.
343 double *_ref_command_speeds; // used for velocity control.
344 double *_ref_positions; // used for direct position control.
345 double *_ref_accs; // for velocity control, in position min jerk eq is used.
346 double *_encodersStamp;
347 bool *checking_motiondone; /* flag telling if I'm already waiting for motion done */
348 #define MAX_POSITION_MOVE_INTERVAL 0.080
349 double *_last_position_move_time;
350 eOmc_impedance_t *_cacheImpedance; /* cache impedance value to split up the 2 sets */
351 std::vector<yarp::dev::eomc::Watchdog> _temperatureSensorErrorWatchdog; /* counter used to filter error coming from tdb reading fromm 2FOC board*/
352 std::vector<yarp::dev::eomc::Watchdog> _temperatureExceededLimitWatchdog; /* counter used to filter the print of the exeded limits*/
353 std::vector<yarp::dev::eomc::TemperatureFilter> _temperatureSpikesFilter;
354
355 std::map<std::string, rawValuesKeyMetadata> _rawValuesMetadataMap;
356 std::vector<std::int32_t> _rawDataAuxVector;
357
358#ifdef NETWORK_PERFORMANCE_BENCHMARK
359 Tools:Emb_RensponseTimingVerifier m_responseTimingVerifier;
360#endif
361
362private:
363
364 std::string getBoardInfo(void);
365 bool askRemoteValue(eOprotID32_t id32, void* value, uint16_t& size);
366 template <class T>
367 bool askRemoteValues(eOprotEndpoint_t ep, eOprotEntity_t entity, eOprotTag_t tag, std::vector<T>& values);
368 bool checkRemoteControlModeStatus(int joint, int target_mode);
369
370 bool dealloc();
371
372
373 bool verifyUserControlLawConsistencyInJointSet(eomc::PidInfo *ipdInfo);
374 bool verifyUserControlLawConsistencyInJointSet(eomc::TrqPidInfo *pidInfo);
375 bool verifyTorquePidshasSameUnitTypes(yarp::dev::PidFeedbackUnitsEnum &fbk_pidunits, yarp::dev::PidOutputUnitsEnum& out_pidunits);
376 bool verifyUseMotorSpeedFbkInJointSet(int useMotorSpeedFbk []);
377 bool updatedJointsetsCfgWithControlInfo(void);
378 bool saveCouplingsData(void);
379 void debugUtil_printJointsetInfo(void);
380
381 bool isTorqueControlEnabled(int joint);
382 bool isVelocityControlEnabled(int joint);
383
384 bool iNeedCouplingsInfo(void); //the device needs coupling info if it manages joints controlled by 2foc and mc4plus.
385
386 bool getJointConfiguration(int joint, eOmc_joint_config_t *jntCfg_ptr);
387 bool getMotorConfiguration(int axis, eOmc_motor_config_t *motCfg_ptr);
388 bool getGerabox_E2J(int joint, double *gearbox_E2J_ptr);
389 bool getJointEncTolerance(int joint, double *jEncTolerance_ptr);
390 bool getMotorEncTolerance(int axis, double *mEncTolerance_ptr);
391 void updateDeadZoneWithDefaultValues(void);
392 bool getJointDeadZoneRaw(int j, double &jntDeadZone);
393
394private:
395
396 //functions used in init this object
397 bool fromConfig(yarp::os::Searchable &config);
398 int fromConfig_NumOfJoints(yarp::os::Searchable &config);
399 bool fromConfig_getGeneralInfo(yarp::os::Searchable &config); //get general info: useRawEncoderData, useLiitedPwm, etc....
400 bool fromConfig_Step2(yarp::os::Searchable &config);
401 bool fromConfig_readServiceCfg(yarp::os::Searchable &config);
402 bool initializeInterfaces(measureConvFactors &f);
403 bool alloc(int njoints);
404 bool init(void);
405
406 //function used in the closing this object
407 void cleanup(void);
408
409 //used in pid interface
410 bool helper_setPosPidRaw( int j, const Pid &pid);
411 bool helper_getPosPidRaw(int j, Pid *pid);
412 bool helper_getPosPidsRaw(Pid *pid);
413
414 //used in torque control interface
415 bool helper_setTrqPidRaw( int j, const Pid &pid);
416 bool helper_getTrqPidRaw(int j, Pid *pid);
417 bool helper_getTrqPidsRaw(Pid *pid);
418
419 //used in velocity control interface
420 bool helper_setVelPidRaw( int j, const Pid &pid);
421 bool helper_getVelPidRaw(int j, Pid *pid);
422 bool helper_getVelPidsRaw(Pid *pid);
423
424 //used in current control interface
425 bool helper_setCurPidRaw(int j, const Pid &pid);
426 bool helper_getCurPidRaw(int j, Pid *pid);
427 bool helper_getCurPidsRaw(Pid *pid);
428
429 //used in low level speed control interface
430 bool helper_setSpdPidRaw(int j, const Pid &pid);
431 bool helper_getSpdPidRaw(int j, Pid *pid);
432 bool helper_getSpdPidsRaw(Pid *pid);
433
434 bool checkCalib14RotationParam(int32_t calib_param4);
435
436 // used in rawvaluespublisher interface
437 bool getRawData_core(std::string key, std::vector<std::int32_t> &data);
438
439public:
440
443
444
445 // Device Driver
446 virtual bool open(yarp::os::Searchable &par);
447 virtual bool close();
448
449 virtual bool initialised();
450 virtual eth::iethresType_t type();
451 virtual bool update(eOprotID32_t id32, double timestamp, void *rxdata);
452 virtual bool getEntityName(uint32_t entityId, std::string &entityName);
453 virtual bool getEncoderTypeName(uint32_t jomoId, eOmc_position_t pos, std::string &encoderTypeName) override;
454
456 virtual bool setPidRaw(const PidControlTypeEnum& pidtype, int j, const Pid &pid) override;
457 virtual bool setPidsRaw(const PidControlTypeEnum& pidtype, const Pid *pids) override;
458 virtual bool setPidReferenceRaw(const PidControlTypeEnum& pidtype, int j, double ref) override;
459 virtual bool setPidReferencesRaw(const PidControlTypeEnum& pidtype, const double *refs) override;
460 virtual bool setPidErrorLimitRaw(const PidControlTypeEnum& pidtype, int j, double limit) override;
461 virtual bool setPidErrorLimitsRaw(const PidControlTypeEnum& pidtype, const double *limits) override;
462 virtual bool getPidErrorRaw(const PidControlTypeEnum& pidtype, int j, double *err) override;
463 virtual bool getPidErrorsRaw(const PidControlTypeEnum& pidtype, double *errs) override;
464 virtual bool getPidOutputRaw(const PidControlTypeEnum& pidtype, int j, double *out) override;
465 virtual bool getPidOutputsRaw(const PidControlTypeEnum& pidtype, double *outs) override;
466 virtual bool getPidRaw(const PidControlTypeEnum& pidtype, int j, Pid *pid) override;
467 virtual bool getPidsRaw(const PidControlTypeEnum& pidtype, Pid *pids) override;
468 virtual bool getPidReferenceRaw(const PidControlTypeEnum& pidtype, int j, double *ref) override;
469 virtual bool getPidReferencesRaw(const PidControlTypeEnum& pidtype, double *refs) override;
470 virtual bool getPidErrorLimitRaw(const PidControlTypeEnum& pidtype, int j, double *limit) override;
471 virtual bool getPidErrorLimitsRaw(const PidControlTypeEnum& pidtype, double *limits) override;
472 virtual bool resetPidRaw(const PidControlTypeEnum& pidtype, int j) override;
473 virtual bool disablePidRaw(const PidControlTypeEnum& pidtype, int j) override;
474 virtual bool enablePidRaw(const PidControlTypeEnum& pidtype, int j) override;
475 virtual bool setPidOffsetRaw(const PidControlTypeEnum& pidtype, int j, double v) override;
476 virtual bool isPidEnabledRaw(const PidControlTypeEnum& pidtype, int j, bool* enabled) override;
477
478 // POSITION CONTROL INTERFACE RAW
479 virtual bool getAxes(int *ax) override;
480 virtual bool positionMoveRaw(int j, double ref) override;
481 virtual bool positionMoveRaw(const double *refs) override;
482 virtual bool relativeMoveRaw(int j, double delta) override;
483 virtual bool relativeMoveRaw(const double *deltas) override;
484 virtual bool checkMotionDoneRaw(bool *flag) override;
485 virtual bool checkMotionDoneRaw(int j, bool *flag) override;
486 virtual bool setRefSpeedRaw(int j, double sp) override;
487 virtual bool setRefSpeedsRaw(const double *spds) override;
488 virtual bool setRefAccelerationRaw(int j, double acc) override;
489 virtual bool setRefAccelerationsRaw(const double *accs) override;
490 virtual bool getRefSpeedRaw(int j, double *ref) override;
491 virtual bool getRefSpeedsRaw(double *spds) override;
492 virtual bool getRefAccelerationRaw(int j, double *acc) override;
493 virtual bool getRefAccelerationsRaw(double *accs) override;
494 virtual bool stopRaw(int j) override;
495 virtual bool stopRaw() override;
496
497
498 // Position Control2 Interface
499 virtual bool positionMoveRaw(const int n_joint, const int *joints, const double *refs) override;
500 virtual bool relativeMoveRaw(const int n_joint, const int *joints, const double *deltas) override;
501 virtual bool checkMotionDoneRaw(const int n_joint, const int *joints, bool *flags) override;
502 virtual bool setRefSpeedsRaw(const int n_joint, const int *joints, const double *spds) override;
503 virtual bool setRefAccelerationsRaw(const int n_joint, const int *joints, const double *accs) override;
504 virtual bool getRefSpeedsRaw(const int n_joint, const int *joints, double *spds) override;
505 virtual bool getRefAccelerationsRaw(const int n_joint, const int *joints, double *accs) override;
506 virtual bool stopRaw(const int n_joint, const int *joints) override;
507 virtual bool getTargetPositionRaw(const int joint, double *ref) override;
508 virtual bool getTargetPositionsRaw(double *refs) override;
509 virtual bool getTargetPositionsRaw(const int n_joint, const int *joints, double *refs) override;
510
511 // Velocity control interface raw
512 virtual bool velocityMoveRaw(int j, double sp) override;
513 virtual bool velocityMoveRaw(const double *sp) override;
514
515
516 // calibration2raw
517 virtual bool setCalibrationParametersRaw(int axis, const CalibrationParameters& params) override;
518 virtual bool calibrateAxisWithParamsRaw(int axis, unsigned int type, double p1, double p2, double p3) override;
519 virtual bool calibrationDoneRaw(int j) override;
520
521
523
524 // ControlMode
525 virtual bool getControlModeRaw(int j, int *v) override;
526 virtual bool getControlModesRaw(int *v) override;
527
528 // ControlMode 2
529 virtual bool getControlModesRaw(const int n_joint, const int *joints, int *modes) override;
530 virtual bool setControlModeRaw(const int j, const int mode) override;
531 virtual bool setControlModesRaw(const int n_joint, const int *joints, int *modes) override;
532 virtual bool setControlModesRaw(int *modes) override;
533
535 virtual bool resetEncoderRaw(int j) override;
536 virtual bool resetEncodersRaw() override;
537 virtual bool setEncoderRaw(int j, double val) override;
538 virtual bool setEncodersRaw(const double *vals) override;
539 virtual bool getEncoderRaw(int j, double *v) override;
540 virtual bool getEncodersRaw(double *encs) override;
541 virtual bool getEncoderSpeedRaw(int j, double *sp) override;
542 virtual bool getEncoderSpeedsRaw(double *spds) override;
543 virtual bool getEncoderAccelerationRaw(int j, double *spds) override;
544 virtual bool getEncoderAccelerationsRaw(double *accs) override;
546
547 virtual bool getEncodersTimedRaw(double *encs, double *stamps) override;
548 virtual bool getEncoderTimedRaw(int j, double *encs, double *stamp) override;
549
551 virtual bool getNumberOfMotorEncodersRaw(int * num) override;
552 virtual bool resetMotorEncoderRaw(int m) override;
553 virtual bool resetMotorEncodersRaw() override;
554 virtual bool setMotorEncoderRaw(int m, const double val) override;
555 virtual bool setMotorEncodersRaw(const double *vals) override;
556 virtual bool getMotorEncoderRaw(int m, double *v) override;
557 virtual bool getMotorEncodersRaw(double *encs) override;
558 virtual bool getMotorEncoderSpeedRaw(int m, double *sp) override;
559 virtual bool getMotorEncoderSpeedsRaw(double *spds) override;
560 virtual bool getMotorEncoderAccelerationRaw(int m, double *spds) override;
561 virtual bool getMotorEncoderAccelerationsRaw(double *accs) override;
562 virtual bool getMotorEncodersTimedRaw(double *encs, double *stamps) override;
563 virtual bool getMotorEncoderTimedRaw(int m, double *encs, double *stamp) override;
564 virtual bool getMotorEncoderCountsPerRevolutionRaw(int m, double *v) override;
565 virtual bool setMotorEncoderCountsPerRevolutionRaw(int m, const double cpr) override;
567
569 virtual bool getRemoteVariableRaw(std::string key, yarp::os::Bottle& val) override;
570 virtual bool setRemoteVariableRaw(std::string key, const yarp::os::Bottle& val) override;
571 virtual bool getRemoteVariablesListRaw(yarp::os::Bottle* listOfKeys) override;
573
575 virtual bool getAxisNameRaw(int axis, std::string& name) override;
576 virtual bool getJointTypeRaw(int axis, yarp::dev::JointTypeEnum& type) override;
578
579 //Internal use, not exposed by Yarp (yet)
580 bool getRotorEncoderResolutionRaw(int m, double &rotres) ;
581 bool getJointEncoderResolutionRaw(int m, double &jntres) ;
582 bool getJointEncoderTypeRaw(int j, int &type) ;
583 bool getRotorEncoderTypeRaw(int j, int &type) ;
584 bool getKinematicMJRaw(int j, double &rotres) ;
585 bool getTemperatureSensorTypeRaw(int j, std::string& ret) ;
586 bool getHasTempSensorsRaw(int j, int& ret) ;
587 bool getHasHallSensorRaw(int j, int& ret) ;
588 bool getHasRotorEncoderRaw(int j, int& ret) ;
589 bool getHasRotorEncoderIndexRaw(int j, int& ret) ;
590 bool getMotorPolesRaw(int j, int& poles) ;
591 bool getRotorIndexOffsetRaw(int j, double& rotorOffset) ;
592 bool getTorqueControlFilterType(int j, int& type) ;
593 bool getRotorLimitsRaw(int j, double *rotorMin, double *rotorMax) ;
594 bool getWholeImpedanceRaw(int j, eOmc_impedance_t &imped);
595
597 virtual bool enableAmpRaw(int j) override;
598 virtual bool disableAmpRaw(int j) override;
599 virtual bool getCurrentsRaw(double *vals) override;
600 virtual bool getCurrentRaw(int j, double *val) override;
601 virtual bool setMaxCurrentRaw(int j, double val) override;
602 virtual bool getMaxCurrentRaw(int j, double *val) override;
603 virtual bool getAmpStatusRaw(int *st) override;
604 virtual bool getAmpStatusRaw(int j, int *st) override;
605 virtual bool getPWMRaw(int j, double* val) override;
606 virtual bool getPWMLimitRaw(int j, double* val) override;
607 virtual bool setPWMLimitRaw(int j, const double val) override;
608 virtual bool getPowerSupplyVoltageRaw(int j, double* val) override;
609
611
612 // virtual analog sensor
613 virtual yarp::dev::VAS_status getVirtualAnalogSensorStatus(int ch) override;
614 virtual int getVirtualAnalogSensorChannels() override;
615 virtual bool updateVirtualAnalogSensorMeasure(yarp::sig::Vector &fTorques) override;
616 virtual bool updateVirtualAnalogSensorMeasure(int j, double &fTorque) override;
617
618#ifdef IMPLEMENT_DEBUG_INTERFACE
619 //----------------------------------------------
620 // Debug interface
621 //----------------------------------------------
622 virtual bool setParameterRaw(int j, unsigned int type, double value) override;
623 virtual bool getParameterRaw(int j, unsigned int type, double *value) override;
624 virtual bool setDebugParameterRaw(int j, unsigned int index, double value) override;
625 virtual bool setDebugReferencePositionRaw(int j, double value) override;
626 virtual bool getDebugParameterRaw(int j, unsigned int index, double *value) override;
627 virtual bool getDebugReferencePositionRaw(int j, double *value) override;
628#endif
629
630 // Limits
631 virtual bool setLimitsRaw(int axis, double min, double max) override;
632 virtual bool getLimitsRaw(int axis, double *min, double *max) override;
633 // Limits 2
634 virtual bool setVelLimitsRaw(int axis, double min, double max) override;
635 virtual bool getVelLimitsRaw(int axis, double *min, double *max) override;
636
637 // Torque control
638 virtual bool getTorqueRaw(int j, double *t) override;
639 virtual bool getTorquesRaw(double *t) override;
640 virtual bool getTorqueRangeRaw(int j, double *min, double *max) override;
641 virtual bool getTorqueRangesRaw(double *min, double *max) override;
642 virtual bool setRefTorquesRaw(const double *t) override;
643 virtual bool setRefTorqueRaw(int j, double t) override;
644 virtual bool setRefTorquesRaw(const int n_joint, const int *joints, const double *t) override;
645 virtual bool getRefTorquesRaw(double *t) override;
646 virtual bool getRefTorqueRaw(int j, double *t) override;
647 virtual bool getMotorTorqueParamsRaw(int j, MotorTorqueParameters *params) override;
648 virtual bool setMotorTorqueParamsRaw(int j, const MotorTorqueParameters params) override;
649
650
651 // IVelocityControl2
652 virtual bool velocityMoveRaw(const int n_joint, const int *joints, const double *spds) override;
653 virtual bool getRefVelocityRaw(const int joint, double *ref) override;
654 virtual bool getRefVelocitiesRaw(double *refs) override;
655 virtual bool getRefVelocitiesRaw(const int n_joint, const int *joints, double *refs) override;
656
657
658 // Impedance interface
659 virtual bool getImpedanceRaw(int j, double *stiffness, double *damping) override;
660 virtual bool setImpedanceRaw(int j, double stiffness, double damping) override;
661 virtual bool setImpedanceOffsetRaw(int j, double offset) override;
662 virtual bool getImpedanceOffsetRaw(int j, double *offset) override;
663 virtual bool getCurrentImpedanceLimitRaw(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override;
664
665 // PositionDirect Interface
666 virtual bool setPositionRaw(int j, double ref) override;
667 virtual bool setPositionsRaw(const int n_joint, const int *joints, const double *refs) override;
668 virtual bool setPositionsRaw(const double *refs) override;
669 virtual bool getRefPositionRaw(const int joint, double *ref) override;
670 virtual bool getRefPositionsRaw(double *refs) override;
671 virtual bool getRefPositionsRaw(const int n_joint, const int *joints, double *refs) override;
672
673 // InteractionMode interface
674 virtual bool getInteractionModeRaw(int j, yarp::dev::InteractionModeEnum* _mode) override;
675 virtual bool getInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum* modes) override;
676 virtual bool getInteractionModesRaw(yarp::dev::InteractionModeEnum* modes) override;
677 virtual bool setInteractionModeRaw(int j, yarp::dev::InteractionModeEnum _mode) override;
678 virtual bool setInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum* modes) override;
679 virtual bool setInteractionModesRaw(yarp::dev::InteractionModeEnum* modes) override;
680
681 // IMotor interface
682 virtual bool getNumberOfMotorsRaw(int * num) override;
683 virtual bool getTemperatureRaw(int m, double* val) override;
684 virtual bool getTemperaturesRaw(double *vals) override;
685 virtual bool getTemperatureLimitRaw(int m, double *temp) override;
686 virtual bool setTemperatureLimitRaw(int m, const double temp) override;
687 virtual bool getPeakCurrentRaw(int m, double *val) override;
688 virtual bool setPeakCurrentRaw(int m, const double val) override;
689 virtual bool getNominalCurrentRaw(int m, double *val) override;
690 virtual bool setNominalCurrentRaw(int m, const double val) override;
691 virtual bool getGearboxRatioRaw(int m, double *gearbox) override;
692
693 // PWMControl
694 virtual bool setRefDutyCycleRaw(int j, double v) override;
695 virtual bool setRefDutyCyclesRaw(const double *v) override;
696 virtual bool getRefDutyCycleRaw(int j, double *v) override;
697 virtual bool getRefDutyCyclesRaw(double *v) override;
698 virtual bool getDutyCycleRaw(int j, double *v) override;
699 virtual bool getDutyCyclesRaw(double *v) override;
700
701 // CurrentControl
702 // virtual bool getAxes(int *ax) override;
703 //virtual bool getCurrentRaw(int j, double *t) override;
704 //virtual bool getCurrentsRaw(double *t) override;
705 virtual bool getCurrentRangeRaw(int j, double *min, double *max) override;
706 virtual bool getCurrentRangesRaw(double *min, double *max) override;
707 virtual bool setRefCurrentsRaw(const double *t) override;
708 virtual bool setRefCurrentRaw(int j, double t) override;
709 virtual bool setRefCurrentsRaw(const int n_joint, const int *joints, const double *t) override;
710 virtual bool getRefCurrentsRaw(double *t) override;
711 virtual bool getRefCurrentRaw(int j, double *t) override;
712
713 // Used in joint faults interface
714 // Teturns true if it was successful and writes the fault code in the fault parameter
715 // with the associated string in message. If no fault is detected the fault parameters is set to -1.
716 // Returns false and fault is set to -2 if retrieval was unsuccessful.
717 virtual bool getLastJointFaultRaw(int j, int& fault, std::string& message) override;
718
719 // IRawValuesPublisher
720 virtual bool getRawDataMap(std::map<std::string, std::vector<std::int32_t>> &map) override;
721 virtual bool getRawData(std::string key, std::vector<std::int32_t> &data) override;
722 virtual bool getKeys(std::vector<std::string> &keys) override;
723 virtual int getNumberOfKeys() override;
724 virtual bool getMetadataMap(rawValuesKeyMetadataMap &metamap) override;
725 virtual bool getKeyMetadata(std::string key, rawValuesKeyMetadata &meta) override;
726};
727
728#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