27 #define NEW_JSTATUS_STRUCT 1
28 #define VELOCITY_WATCHDOG 0.1
29 #define OPENLOOP_WATCHDOG 0.1
30 #define PWM_CONSTANT 0.1
38 for (
int i=0;i <_njoints ;i++)
43 if (this->_command_speeds[i]!=0)
46 double increment = _command_speeds[i]*elapsed;
53 this->_command_speeds[i]=0.0;
59 if (this->refpwm[i]!=0)
74 pos[i] = _posDir_references[i];
78 pos[i] = _posCtrl_references[i];
100 yCError(FAKEMOTIONCONTROL) << txt <<
"is not yet implemented for FakeMotionControl";
106 yCError(FAKEMOTIONCONTROL) << txt <<
"has been deprecated for FakeMotionControl";
119 std::ostringstream oss;
126 bool FakeMotionControl::extractGroup(
Bottle &input,
Bottle &out,
const std::string &key1,
const std::string &txt,
int size)
133 yCError(FAKEMOTIONCONTROL) << key1.c_str() <<
"parameter not found";
137 if(tmp.
size()!=(
size_t) size)
139 yCError(FAKEMOTIONCONTROL) << key1.c_str() <<
"incorrect number of entries";
149 pos.resize(_njoints);
150 dpos.resize(_njoints);
151 vel.resize(_njoints);
152 speed.resize(_njoints);
153 acc.resize(_njoints);
154 loc.resize(_njoints);
155 amp.resize(_njoints);
157 current.resize(_njoints);
158 nominalCurrent.resize(_njoints);
159 maxCurrent.resize(_njoints);
160 peakCurrent.resize(_njoints);
161 pwm.resize(_njoints);
162 refpwm.resize(_njoints);
163 pwmLimit.resize(_njoints);
164 supplyVoltage.resize(_njoints);
165 last_velocity_command.resize(_njoints);
166 last_pwm_command.resize(_njoints);
177 nominalCurrent.zero();
184 supplyVoltage.zero();
189 _axisMap = allocAndCheck<int>(nj);
190 _controlModes = allocAndCheck<int>(nj);
191 _interactMode = allocAndCheck<int>(nj);
192 _angleToEncoder = allocAndCheck<double>(nj);
193 _dutycycleToPWM = allocAndCheck<double>(nj);
194 _ampsToSensor = allocAndCheck<double>(nj);
195 _encodersStamp = allocAndCheck<double>(nj);
196 _DEPRECATED_encoderconversionoffset = allocAndCheck<float>(nj);
197 _DEPRECATED_encoderconversionfactor = allocAndCheck<float>(nj);
200 _jointEncoderRes = allocAndCheck<int>(nj);
201 _rotorEncoderRes = allocAndCheck<int>(nj);
202 _gearbox = allocAndCheck<double>(nj);
203 _torqueSensorId= allocAndCheck<int>(nj);
204 _torqueSensorChan= allocAndCheck<int>(nj);
205 _maxTorque=allocAndCheck<double>(nj);
206 _torques = allocAndCheck<double>(nj);
207 _maxJntCmdVelocity = allocAndCheck<double>(nj);
208 _maxMotorVelocity = allocAndCheck<double>(nj);
209 _newtonsToSensor=allocAndCheck<double>(nj);
210 _hasHallSensor = allocAndCheck<bool>(nj);
211 _hasTempSensor = allocAndCheck<bool>(nj);
212 _hasRotorEncoder = allocAndCheck<bool>(nj);
213 _hasRotorEncoderIndex = allocAndCheck<bool>(nj);
214 _rotorIndexOffset = allocAndCheck<int>(nj);
215 _motorPoles = allocAndCheck<int>(nj);
216 _rotorlimits_max = allocAndCheck<double>(nj);
217 _rotorlimits_min = allocAndCheck<double>(nj);
219 _ppids=allocAndCheck<Pid>(nj);
220 _tpids=allocAndCheck<Pid>(nj);
221 _cpids = allocAndCheck<Pid>(nj);
222 _vpids = allocAndCheck<Pid>(nj);
223 _ppids_ena=allocAndCheck<bool>(nj);
224 _tpids_ena=allocAndCheck<bool>(nj);
225 _cpids_ena = allocAndCheck<bool>(nj);
226 _vpids_ena = allocAndCheck<bool>(nj);
227 _ppids_lim=allocAndCheck<double>(nj);
228 _tpids_lim=allocAndCheck<double>(nj);
229 _cpids_lim = allocAndCheck<double>(nj);
230 _vpids_lim = allocAndCheck<double>(nj);
231 _ppids_ref=allocAndCheck<double>(nj);
232 _tpids_ref=allocAndCheck<double>(nj);
233 _cpids_ref = allocAndCheck<double>(nj);
234 _vpids_ref = allocAndCheck<double>(nj);
238 _axisName =
new std::string[nj];
241 _limitsMax=allocAndCheck<double>(nj);
242 _limitsMin=allocAndCheck<double>(nj);
243 _kinematic_mj=allocAndCheck<double>(16);
245 _motorPwmLimits=allocAndCheck<double>(nj);
246 checking_motiondone=allocAndCheck<bool>(nj);
248 _velocityShifts=allocAndCheck<int>(nj);
249 _velocityTimeout=allocAndCheck<int>(nj);
250 _kbemf=allocAndCheck<double>(nj);
251 _ktau=allocAndCheck<double>(nj);
252 _kbemf_scale = allocAndCheck<int>(nj);
253 _ktau_scale = allocAndCheck<int>(nj);
254 _filterType=allocAndCheck<int>(nj);
255 _last_position_move_time=allocAndCheck<double>(nj);
258 _posCtrl_references = allocAndCheck<double>(nj);
259 _posDir_references = allocAndCheck<double>(nj);
260 _command_speeds = allocAndCheck<double>(nj);
261 _ref_speeds = allocAndCheck<double>(nj);
262 _ref_accs = allocAndCheck<double>(nj);
263 _ref_torques = allocAndCheck<double>(nj);
264 _ref_currents = allocAndCheck<double>(nj);
265 _enabledAmp = allocAndCheck<bool>(nj);
266 _enabledPid = allocAndCheck<bool>(nj);
267 _calibrated = allocAndCheck<bool>(nj);
275 bool FakeMotionControl::dealloc()
377 _angleToEncoder(nullptr),
378 _encodersStamp (nullptr),
379 _ampsToSensor (nullptr),
380 _dutycycleToPWM(nullptr),
381 _DEPRECATED_encoderconversionfactor (nullptr),
382 _DEPRECATED_encoderconversionoffset (nullptr),
383 _jointEncoderRes (nullptr),
384 _rotorEncoderRes (nullptr),
386 _hasHallSensor (nullptr),
387 _hasTempSensor (nullptr),
388 _hasRotorEncoder (nullptr),
389 _hasRotorEncoderIndex (nullptr),
390 _rotorIndexOffset (nullptr),
391 _motorPoles (nullptr),
392 _rotorlimits_max (nullptr),
393 _rotorlimits_min (nullptr),
398 _ppids_ena (nullptr),
399 _tpids_ena (nullptr),
400 _cpids_ena (nullptr),
401 _vpids_ena (nullptr),
402 _ppids_lim (nullptr),
403 _tpids_lim (nullptr),
404 _cpids_lim (nullptr),
405 _vpids_lim (nullptr),
406 _ppids_ref (nullptr),
407 _tpids_ref (nullptr),
408 _cpids_ref (nullptr),
409 _vpids_ref (nullptr),
411 _jointType (nullptr),
412 _limitsMin (nullptr),
413 _limitsMax (nullptr),
414 _kinematic_mj (nullptr),
415 _maxJntCmdVelocity (nullptr),
416 _maxMotorVelocity (nullptr),
417 _velocityShifts (nullptr),
418 _velocityTimeout (nullptr),
421 _kbemf_scale (nullptr),
422 _ktau_scale (nullptr),
423 _filterType (nullptr),
424 _torqueSensorId (nullptr),
425 _torqueSensorChan (nullptr),
426 _maxTorque (nullptr),
427 _newtonsToSensor (nullptr),
428 checking_motiondone (nullptr),
429 _last_position_move_time(nullptr),
430 _motorPwmLimits (nullptr),
432 useRawEncoderData (false),
433 _pwmIsLimited (false),
434 _torqueControlEnabled (false),
435 _torqueControlUnits (T_MACHINE_UNITS),
436 _positionControlUnits (P_MACHINE_UNITS),
437 _controlModes (nullptr),
438 _interactMode (nullptr),
439 _enabledAmp (nullptr),
440 _enabledPid (nullptr),
441 _calibrated (nullptr),
442 _posCtrl_references (nullptr),
443 _posDir_references (nullptr),
444 _ref_speeds (nullptr),
445 _command_speeds (nullptr),
447 _ref_torques (nullptr),
448 _ref_currents (nullptr),
451 verbose (VERY_VERBOSE)
455 verbosewhenok = (tmp !=
"") ? (
bool)yarp::conf::numeric::from_string<int>(tmp) :
473 for(
int i=0; i<_njoints; i++)
476 pwmLimit[i] = (33+i)*10;
477 current[i] = (33+i)*100;
478 maxCurrent[i] = (33+i)*1000;
479 peakCurrent[i] = (33+i)*2;
480 nominalCurrent[i] = (33+i)*20;
481 supplyVoltage[i] = (33+i)*200;
482 last_velocity_command[i] = -1;
483 last_pwm_command[i] = -1;
485 _maxJntCmdVelocity[i]=50.0;
527 yCTrace(FAKEMOTIONCONTROL) << str;
532 _njoints = config.
findGroup(
"GENERAL").
check(
"Joints",
Value(1),
"Number of degrees of freedom").asInt32();
533 yCInfo(FAKEMOTIONCONTROL,
"Using %d joint%s", _njoints, ((_njoints != 1) ?
"s" :
""));
537 yCError(FAKEMOTIONCONTROL) <<
"Malloc failed";
542 for (
int i = 0; i < _njoints; i++) {
543 _newtonsToSensor[i] = 1;
548 yCError(FAKEMOTIONCONTROL) <<
"Missing parameters in config file";
560 ControlBoardHelper cb(_njoints, _axisMap, _angleToEncoder,
nullptr, _newtonsToSensor, _ampsToSensor, _dutycycleToPWM);
562 ImplementControlCalibration::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
563 ImplementAmplifierControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
564 ImplementEncodersTimed::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
565 ImplementMotorEncoders::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
566 ImplementPositionControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
567 ImplementPidControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr, _newtonsToSensor, _ampsToSensor, _dutycycleToPWM);
570 ImplementControlMode::initialize(_njoints, _axisMap);
571 ImplementVelocityControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
572 ImplementControlLimits::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
573 ImplementImpedanceControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr, _newtonsToSensor);
574 ImplementTorqueControl::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr, _newtonsToSensor, _ampsToSensor, _dutycycleToPWM, bemfToRaw.
data(), ktauToRaw.
data());
575 ImplementPositionDirect::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
576 ImplementInteractionMode::initialize(_njoints, _axisMap, _angleToEncoder,
nullptr);
577 ImplementMotor::initialize(_njoints, _axisMap);
578 ImplementAxisInfo::initialize(_njoints, _axisMap);
579 ImplementPWMControl::initialize(_njoints, _axisMap, _dutycycleToPWM);
580 ImplementCurrentControl::initialize(_njoints, _axisMap, _ampsToSensor);
581 ImplementVirtualAnalogSensor::initialize(_njoints, _axisMap, _newtonsToSensor);
584 bool init = this->
start();
587 yCError(FAKEMOTIONCONTROL) <<
"open() has an error in call of FakeMotionControl::init() for board" ;
594 yCDebug(FAKEMOTIONCONTROL) <<
"init() has successfully initted board ";
607 if (!extractGroup(pidsGroup, xtmp,
"stiffness",
"stiffness parameter", _njoints)) {
610 for (j=0; j<_njoints; j++) {
614 if (!extractGroup(pidsGroup, xtmp,
"damping",
"damping parameter", _njoints)) {
617 for (j=0; j<_njoints; j++) {
624 bool FakeMotionControl::parsePositionPidsGroup(
Bottle& pidsGroup,
Pid myPid[])
629 if (!extractGroup(pidsGroup, xtmp,
"kp",
"Pid kp parameter", _njoints)) {
632 for (j=0; j<_njoints; j++) {
636 if (!extractGroup(pidsGroup, xtmp,
"kd",
"Pid kd parameter", _njoints)) {
639 for (j=0; j<_njoints; j++) {
643 if (!extractGroup(pidsGroup, xtmp,
"ki",
"Pid kp parameter", _njoints)) {
646 for (j=0; j<_njoints; j++) {
650 if (!extractGroup(pidsGroup, xtmp,
"maxInt",
"Pid maxInt parameter", _njoints)) {
653 for (j=0; j<_njoints; j++) {
657 if (!extractGroup(pidsGroup, xtmp,
"maxPwm",
"Pid maxPwm parameter", _njoints)) {
660 for (j=0; j<_njoints; j++) {
664 if (!extractGroup(pidsGroup, xtmp,
"shift",
"Pid shift parameter", _njoints)) {
667 for (j=0; j<_njoints; j++) {
671 if (!extractGroup(pidsGroup, xtmp,
"ko",
"Pid ko parameter", _njoints)) {
674 for (j=0; j<_njoints; j++) {
678 if (!extractGroup(pidsGroup, xtmp,
"stictionUp",
"Pid stictionUp", _njoints)) {
681 for (j=0; j<_njoints; j++) {
685 if (!extractGroup(pidsGroup, xtmp,
"stictionDwn",
"Pid stictionDwn", _njoints)) {
688 for (j=0; j<_njoints; j++) {
692 if (!extractGroup(pidsGroup, xtmp,
"kff",
"Pid kff parameter", _njoints)) {
695 for (j=0; j<_njoints; j++) {
700 if (_positionControlUnits==P_METRIC_UNITS)
702 for (j=0; j<_njoints; j++)
704 myPid[j].
kp = myPid[j].
kp / _angleToEncoder[j];
705 myPid[j].
ki = myPid[j].
ki / _angleToEncoder[j];
706 myPid[j].
kd = myPid[j].
kd / _angleToEncoder[j];
717 if (!extractGroup(pidsGroup, xtmp,
"limPwm",
"Limited PWD", _njoints))
719 yCError(FAKEMOTIONCONTROL) <<
"The PID parameter limPwm was requested but was not correctly set in the configuration file, please fill it.";
723 yCInfo(FAKEMOTIONCONTROL) <<
"Using LIMITED PWM!!";
724 for (j = 0; j < _njoints; j++) {
732 bool FakeMotionControl::parseTorquePidsGroup(
Bottle& pidsGroup,
Pid myPid[],
double kbemf[],
double ktau[],
int filterType[])
736 if (!extractGroup(pidsGroup, xtmp,
"kp",
"Pid kp parameter", _njoints)) {
739 for (j=0; j<_njoints; j++) {
743 if (!extractGroup(pidsGroup, xtmp,
"kd",
"Pid kd parameter", _njoints)) {
746 for (j=0; j<_njoints; j++) {
750 if (!extractGroup(pidsGroup, xtmp,
"ki",
"Pid kp parameter", _njoints)) {
753 for (j=0; j<_njoints; j++) {
757 if (!extractGroup(pidsGroup, xtmp,
"maxInt",
"Pid maxInt parameter", _njoints)) {
760 for (j=0; j<_njoints; j++) {
764 if (!extractGroup(pidsGroup, xtmp,
"maxPwm",
"Pid maxPwm parameter", _njoints)) {
767 for (j=0; j<_njoints; j++) {
771 if (!extractGroup(pidsGroup, xtmp,
"shift",
"Pid shift parameter", _njoints)) {
774 for (j=0; j<_njoints; j++) {
778 if (!extractGroup(pidsGroup, xtmp,
"ko",
"Pid ko parameter", _njoints)) {
781 for (j=0; j<_njoints; j++) {
785 if (!extractGroup(pidsGroup, xtmp,
"stictionUp",
"Pid stictionUp", _njoints)) {
788 for (j=0; j<_njoints; j++) {
792 if (!extractGroup(pidsGroup, xtmp,
"stictionDwn",
"Pid stictionDwn", _njoints)) {
795 for (j=0; j<_njoints; j++) {
799 if (!extractGroup(pidsGroup, xtmp,
"kff",
"Pid kff parameter", _njoints)) {
802 for (j=0; j<_njoints; j++) {
806 if (!extractGroup(pidsGroup, xtmp,
"kbemf",
"kbemf parameter", _njoints)) {
809 for (j=0; j<_njoints; j++) {
813 if (!extractGroup(pidsGroup, xtmp,
"ktau",
"ktau parameter", _njoints)) {
816 for (j=0; j<_njoints; j++) {
820 if (!extractGroup(pidsGroup, xtmp,
"filterType",
"filterType param", _njoints)) {
823 for (j=0; j<_njoints; j++) {
840 if (!extractGroup(pidsGroup, xtmp,
"limPwm",
"Limited PWM", _njoints))
842 yCError(FAKEMOTIONCONTROL) <<
"The PID parameter limPwm was requested but was not correctly set in the configuration file, please fill it.";
846 yCInfo(FAKEMOTIONCONTROL) <<
"Using LIMITED PWM!!";
847 for (j = 0; j < _njoints; j++) {
862 if(general.
check(
"AxisMap"))
864 if(extractGroup(general, xtmp,
"AxisMap",
"a list of reordered indices for the axes", _njoints))
875 yCInfo(FAKEMOTIONCONTROL) <<
"Using default AxisMap";
876 for (i = 0; i < _njoints; i++) {
881 if(general.
check(
"AxisName"))
883 if (extractGroup(general, xtmp,
"AxisName",
"a list of strings representing the axes names", _njoints))
888 _axisName[_axisMap[i - 1]] = xtmp.
get(i).
asString();
896 yCInfo(FAKEMOTIONCONTROL) <<
"Using default AxisName";
897 for (i = 0; i < _njoints; i++)
899 _axisName[_axisMap[i]] =
"joint" +
toString(i);
902 if(general.
check(
"AxisType"))
904 if (extractGroup(general, xtmp,
"AxisType",
"a list of strings representing the axes type (revolute/prismatic)", _njoints))
910 if (typeString ==
"revolute") {
912 }
else if (typeString ==
"prismatic") {
915 yCError(FAKEMOTIONCONTROL,
"Unknown AxisType value %s!", typeString.c_str());
926 yCInfo(FAKEMOTIONCONTROL) <<
"Using default AxisType (revolute)";
927 for (i = 0; i < _njoints; i++)
934 if (general.
check(
"ampsToSensor"))
936 if (extractGroup(general, xtmp,
"ampsToSensor",
"a list of scales for the ampsToSensor conversion factors", _njoints))
951 yCInfo(FAKEMOTIONCONTROL) <<
"Using default ampsToSensor";
952 for (i = 0; i < _njoints; i++)
954 _ampsToSensor[i] = 1.0;
959 if (general.
check(
"fullscalePWM"))
961 if (extractGroup(general, xtmp,
"fullscalePWM",
"a list of scales for the fullscalePWM conversion factors", _njoints))
967 _dutycycleToPWM[i - 1] = xtmp.
get(i).
asFloat64() / 100.0;
976 yCInfo(FAKEMOTIONCONTROL) <<
"Using default dutycycleToPWM=1.0";
977 for (i = 0; i < _njoints; i++) {
978 _dutycycleToPWM[i] = 1.0;
984 if(general.
check(
"Encoder"))
986 if (extractGroup(general, xtmp,
"Encoder",
"a list of scales for the encoders", _njoints))
998 yCInfo(FAKEMOTIONCONTROL) <<
"Using default Encoder";
999 for (i = 0; i < _njoints; i++) {
1000 _angleToEncoder[i] = 1;
1438 yCTrace(FAKEMOTIONCONTROL) <<
" close()";
1440 ImplementControlMode::uninitialize();
1441 ImplementEncodersTimed::uninitialize();
1442 ImplementMotorEncoders::uninitialize();
1443 ImplementPositionControl::uninitialize();
1444 ImplementVelocityControl::uninitialize();
1445 ImplementPidControl::uninitialize();
1446 ImplementControlCalibration::uninitialize();
1447 ImplementAmplifierControl::uninitialize();
1448 ImplementImpedanceControl::uninitialize();
1449 ImplementControlLimits::uninitialize();
1450 ImplementTorqueControl::uninitialize();
1451 ImplementPositionDirect::uninitialize();
1452 ImplementInteractionMode::uninitialize();
1453 ImplementAxisInfo::uninitialize();
1454 ImplementVirtualAnalogSensor::uninitialize();
1461 void FakeMotionControl::cleanup()
1472 yCDebug(FAKEMOTIONCONTROL) <<
"setPidRaw" << pidtype << j << pid.
kp;
1496 for(
int j=0; j< _njoints; j++)
1528 for(
int j=0, index=0; j< _njoints; j++, index++)
1540 _ppids_lim[j]=limit;
1543 _vpids_lim[j]=limit;
1546 _cpids_lim[j]=limit;
1549 _tpids_lim[j]=limit;
1560 for(
int j=0, index=0; j< _njoints; j++, index++)
1592 for(
int j=0; j< _njoints; j++)
1618 yCDebug(FAKEMOTIONCONTROL) <<
"getPidRaw" << pidtype << j << pid->
kp;
1628 for(
int j=0, index=0; j<_njoints; j++, index++)
1663 for(
int j=0; j< _njoints; j++)
1675 *limit=_ppids_lim[j];
1678 *limit=_vpids_lim[j];
1681 *limit=_cpids_lim[j];
1684 *limit=_tpids_lim[j];
1695 for(
int j=0, index=0; j<_njoints; j++, index++)
1712 _ppids_ena[j]=
false;
1715 _vpids_ena[j]=
false;
1718 _cpids_ena[j]=
false;
1721 _tpids_ena[j]=
false;
1753 yCDebug(FAKEMOTIONCONTROL) <<
"setPidOffsetRaw" << pidtype << j << v;
1779 *enabled=_ppids_ena[j];
1782 *enabled=_vpids_ena[j];
1785 *enabled=_cpids_ena[j];
1788 *enabled=_tpids_ena[j];
1815 yCDebug(FAKEMOTIONCONTROL) <<
"getPidOutputRaw" << pidtype << j << *out;
1822 for(
int j=0; j< _njoints; j++)
1842 yCError(FAKEMOTIONCONTROL) <<
"velocityMoveRaw: skipping command because board " <<
" joint " << j <<
" is not in VOCAB_CM_VELOCITY mode";
1844 _command_speeds[j] = sp;
1853 for (
int i = 0; i < _njoints; i++) {
1866 yCTrace(FAKEMOTIONCONTROL) <<
"setCalibrationParametersRaw for joint" << j;
1872 yCTrace(FAKEMOTIONCONTROL) <<
"calibrateRaw for joint" << j;
1878 bool result =
false;
1896 if (verbose >= VERY_VERBOSE) {
1897 yCTrace(FAKEMOTIONCONTROL) <<
"j " << j <<
" ref " << ref;
1913 yCError(FAKEMOTIONCONTROL) <<
"positionMoveRaw: skipping command because joint " << j <<
" is not in VOCAB_CM_POSITION mode";
1915 _posCtrl_references[j] = ref;
1921 if (verbose >= VERY_VERBOSE) {
1926 for(
int j=0, index=0; j< _njoints; j++, index++)
1935 if (verbose >= VERY_VERBOSE) {
1936 yCTrace(FAKEMOTIONCONTROL) <<
"j " << j <<
" ref " << delta;
1951 yCError(FAKEMOTIONCONTROL) <<
"relativeMoveRaw: skipping command because joint " << j <<
" is not in VOCAB_CM_POSITION mode";
1953 _posCtrl_references[j] += delta;
1959 if (verbose >= VERY_VERBOSE) {
1964 for(
int j=0, index=0; j< _njoints; j++, index++)
1974 if (verbose >= VERY_VERBOSE) {
1975 yCTrace(FAKEMOTIONCONTROL) <<
"j ";
1984 if (verbose >= VERY_VERBOSE) {
1989 bool val, tot_res =
true;
1991 for(
int j=0, index=0; j< _njoints; j++, index++)
2005 _ref_speeds[index] = sp;
2013 for(
int j=0, index=0; j< _njoints; j++, index++)
2015 _ref_speeds[index] = spds[index];
2027 _ref_accs[j ] = 1e6;
2029 else if (acc < -1e6)
2031 _ref_accs[j ] = -1e6;
2035 _ref_accs[j ] = acc;
2045 for(
int j=0, index=0; j< _njoints; j++, index++)
2049 _ref_accs[index] = 1e6;
2051 else if (accs[j] < -1e6)
2053 _ref_accs[index] = -1e6;
2057 _ref_accs[index] = accs[j];
2065 *spd = _ref_speeds[j];
2071 memcpy(spds, _ref_speeds,
sizeof(
double) * _njoints);
2077 *acc = _ref_accs[j];
2083 memcpy(accs, _ref_accs,
sizeof(
double) * _njoints);
2095 for(
int j=0; j< _njoints; j++)
2109 if (verbose >= VERY_VERBOSE) {
2110 yCTrace(FAKEMOTIONCONTROL) <<
" -> n_joint " << n_joint;
2113 for(
int j=0; j<n_joint; j++)
2115 yCDebug(FAKEMOTIONCONTROL,
"j: %d; ref %f;\n", joints[j], refs[j]); fflush(stdout);
2119 for(
int j=0; j<n_joint; j++)
2128 if (verbose >= VERY_VERBOSE) {
2129 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2133 for(
int j=0; j<n_joint; j++)
2142 if (verbose >= VERY_VERBOSE) {
2143 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2148 bool tot_val =
true;
2150 for(
int j=0; j<n_joint; j++)
2161 if (verbose >= VERY_VERBOSE) {
2162 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2166 for(
int j=0; j<n_joint; j++)
2175 if (verbose >= VERY_VERBOSE) {
2176 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2180 for(
int j=0; j<n_joint; j++)
2189 if (verbose >= VERY_VERBOSE) {
2190 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2194 for(
int j=0; j<n_joint; j++)
2203 if (verbose >= VERY_VERBOSE) {
2204 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2208 for(
int j=0; j<n_joint; j++)
2217 if (verbose >= VERY_VERBOSE) {
2218 yCTrace(FAKEMOTIONCONTROL) <<
"n_joint " << _njoints;
2222 for(
int j=0; j<n_joint; j++)
2236 if (verbose > VERY_VERY_VERBOSE) {
2237 yCTrace(FAKEMOTIONCONTROL) <<
"j: " << j;
2240 *v = _controlModes[j];
2248 for(
int j=0; j< _njoints; j++)
2258 for(
int j=0; j< n_joint; j++)
2272 if (verbose >= VERY_VERBOSE) {
2282 _controlModes[j] = _mode;
2284 _posCtrl_references[j] = pos[j];
2291 if (verbose >= VERY_VERBOSE) {
2292 yCTrace(FAKEMOTIONCONTROL) <<
"n_joints: " << n_joint;
2296 for(
int i=0; i<n_joint; i++)
2305 if (verbose >= VERY_VERBOSE) {
2310 for(
int i=0; i<_njoints; i++)
2354 for(
int j=0; j< _njoints; j++)
2373 for(
int j=0; j< _njoints; j++)
2391 for(
int j=0; j< _njoints; j++)
2404 for (
int i = 0; i < _njoints; i++) {
2405 stamps[i] = _encodersStamp[i];
2415 *stamp = _encodersStamp[j];
2468 for(
int j=0; j< _njoints; j++)
2485 for(
int j=0; j< _njoints; j++)
2501 for(
int j=0; j< _njoints; j++)
2512 for (
int i = 0; i < _njoints; i++) {
2513 stamps[i] = _encodersStamp[i];
2524 *stamp = _encodersStamp[m];
2546 *value = current[j];
2554 for(
int j=0; j< _njoints; j++)
2563 maxCurrent[m] = val;
2569 *val = maxCurrent[m];
2575 (_enabledAmp[j ]) ? *st = 1 : *st = 0;
2582 for(
int j=0; j<_njoints; j++)
2584 sts[j] = _enabledAmp[j];
2591 *val = peakCurrent[m];
2597 peakCurrent[m] = val;
2603 *val = nominalCurrent[m];
2609 nominalCurrent[m] = val;
2633 *val = supplyVoltage[m];
2682 yCError(FAKEMOTIONCONTROL,
"getKinematicMJRaw not yet implemented");
2718 if (axis >= 0 && axis < _njoints)
2720 name = _axisName[axis];
2732 if (axis >= 0 && axis < _njoints)
2734 type = _jointType[axis];
2752 *max = _maxJntCmdVelocity[axis];
2766 for (
int i = 0; i < _njoints; i++)
2786 for (
int j = 0; j < _njoints &&
ret; j++) {
2839 params->
bemf = _kbemf[j];
2841 params->
ktau = _ktau[j];
2849 _kbemf[j] = params.
bemf;
2850 _ktau[j] = params.
ktau;
2861 for(
int i=0; i<n_joint; i++)
2871 _posDir_references[j] = ref;
2877 for(
int i=0; i< n_joint; i++)
2879 _posDir_references[joints[i]] = refs[i];
2886 for(
int i=0; i< _njoints; i++)
2888 _posDir_references[i] = refs[i];
2896 if (verbose >= VERY_VERBOSE) {
2897 yCTrace(FAKEMOTIONCONTROL) <<
"j " << axis <<
" ref " << _posCtrl_references[axis];
2906 yCWarning(FAKEMOTIONCONTROL) <<
"getTargetPosition: Joint " << axis <<
" is not in POSITION mode, therefore the value returned by " <<
2907 "this call is for reference only and may not reflect the actual behaviour of the motor/firmware.";
2909 *ref = _posCtrl_references[axis];
2916 for (
int i = 0; i < _njoints; i++) {
2925 for (
int i = 0; i<nj; i++)
2934 *ref = _command_speeds[axis];
2941 for (
int i = 0; i<_njoints; i++)
2951 for (
int i = 0; i<nj; i++)
2967 yCWarning(FAKEMOTIONCONTROL) <<
"getRefPosition: Joint " << axis <<
" is not in POSITION_DIRECT mode, therefore the value returned by \
2968 this call is for reference only and may not reflect the actual behaviour of the motor/firmware.";
2971 *ref = _posDir_references[axis];
2979 for (
int i = 0; i<_njoints; i++)
2989 for (
int i = 0; i<nj; i++)
3000 if (verbose > VERY_VERY_VERBOSE) {
3001 yCTrace(FAKEMOTIONCONTROL) <<
"j: " << j;
3010 for(
int j=0; j< n_joints; j++)
3021 for (
int j = 0; j < _njoints; j++) {
3032 if (verbose >= VERY_VERBOSE) {
3036 _interactMode[j] = _mode;
3045 for(
int i=0; i<n_joints; i++)
3055 for(
int i=0; i<_njoints; i++)
3077 for(
int j=0; j< _njoints; j++)
3105 for (
int i = 0; i < _njoints; i++)
3120 for (
int i = 0; i < _njoints; i++)
3135 for (
int i = 0; i < _njoints; i++)
3157 *min = _ref_currents[j] / 100;
3158 *max = _ref_currents[j] * 100;
3165 for (
int i = 0; i < _njoints; i++)
3167 min[i] = _ref_currents[i] / 100;
3168 max[i] = _ref_currents[i] * 100;
3175 for (
int i = 0; i < _njoints; i++)
3177 _ref_currents[i] =
t[i];
3178 current[i] =
t[i] / 2;
3185 _ref_currents[j] =
t;
3193 for (
int j = 0; j<n_joint; j++)
3202 for (
int i = 0; i < _njoints; i++)
3204 t[i] = _ref_currents[i];
3211 *
t = _ref_currents[j];
3232 for (
int i = 0; i < _njoints; i++)
3234 measure[i] = _torques[i];
3241 _torques[ch] = measure;
void checkAndDestroy(T *&p)
constexpr yarp::conf::vocab32_t VOCAB_CM_MIXED
constexpr yarp::conf::vocab32_t VOCAB_CM_PWM
constexpr yarp::conf::vocab32_t VOCAB_CM_IMPEDANCE_VEL
constexpr yarp::conf::vocab32_t VOCAB_CM_IDLE
constexpr yarp::conf::vocab32_t VOCAB_CM_POSITION
constexpr yarp::conf::vocab32_t VOCAB_CM_IMPEDANCE_POS
constexpr yarp::conf::vocab32_t VOCAB_CM_POSITION_DIRECT
constexpr yarp::conf::vocab32_t VOCAB_CM_VELOCITY
constexpr yarp::conf::vocab32_t VOCAB_CM_FORCE_IDLE
bool getPowerSupplyVoltageRaw(int j, double *val) override
bool getRefSpeedRaw(int j, double *ref) override
Get reference speed for a joint.
virtual bool getHasTempSensorsRaw(int j, int &ret)
bool setRefCurrentsRaw(const double *t) override
Set the reference value of the currents for all motors.
bool setRefTorqueRaw(int j, double t) override
Set the reference value of the torque for a given joint.
bool getCurrentsRaw(double *vals) override
bool getImpedanceOffsetRaw(int j, double *offset) override
Get current force Offset for a specific joint.
bool getTargetPositionRaw(const int joint, double *ref) override
Get the last position reference for the specified axis.
bool getTorqueRangeRaw(int j, double *min, double *max) override
Get the full scale of the torque sensor of a given joint.
bool getCurrentImpedanceLimitRaw(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override
Get the current impedandance limits for a specific joint.
bool setTemperatureLimitRaw(int m, const double temp) override
Set the temperature limit for a specific motor.
bool getPidErrorRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double *err) override
Get the current error for a joint.
bool setPeakCurrentRaw(int m, const double val) override
bool velocityMoveRaw(int j, double sp) override
Start motion at a given speed, single joint.
bool checkMotionDoneRaw(bool *flag) override
Check if the current trajectory is terminated.
bool getMotorEncoderSpeedRaw(int m, double *sp) override
Read the istantaneous speed of a motor encoder.
virtual bool getJointEncoderTypeRaw(int j, int &type)
bool setRefDutyCycleRaw(int j, double v) override
Sets the reference dutycycle of a single motor.
bool getTemperatureRaw(int m, double *val) override
Get temperature of a motor.
bool getEncoderAccelerationRaw(int j, double *spds) override
Read the instantaneous acceleration of an axis.
bool getRefAccelerationRaw(int j, double *acc) override
Get reference acceleration for a joint.
bool getMotorEncoderSpeedsRaw(double *spds) override
Read the instantaneous speed of all motor encoders.
bool setPidsRaw(const yarp::dev::PidControlTypeEnum &pidtype, const yarp::dev::Pid *pids) override
Set new pid value on multiple axes.
bool setVelLimitsRaw(int axis, double min, double max) override
Set the software speed limits for a particular axis, the behavior of the control card when these limi...
bool getJointTypeRaw(int axis, yarp::dev::JointTypeEnum &type) override
bool setMotorEncoderRaw(int m, const double val) override
Set the value of the motor encoder for a given motor.
bool getPidErrorLimitRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double *limit) override
Get the error limit for the controller on a specific joint.
bool getPidOutputRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double *out) override
Get the output of the controller (e.g.
bool setControlModeRaw(const int j, const int mode) override
bool getMotorEncoderAccelerationRaw(int m, double *spds) override
Read the instantaneous acceleration of a motor encoder.
bool open(yarp::os::Searchable &par) override
Open the DeviceDriver.
virtual bool getHasHallSensorRaw(int j, int &ret)
bool getTemperatureLimitRaw(int m, double *temp) override
Retreives the current temperature limit for a specific motor.
bool getNumberOfMotorsRaw(int *num) override
Retrieves the number of controlled motors from the current physical interface.
bool disableAmpRaw(int j) override
Disable the amplifier on a specific joint.
bool setMotorTorqueParamsRaw(int j, const yarp::dev::MotorTorqueParameters params) override
Set the motor parameters.
bool calibrateAxisWithParamsRaw(int axis, unsigned int type, double p1, double p2, double p3) override
Start calibration, this method is very often platform specific.
bool setRefAccelerationRaw(int j, double acc) override
Set reference acceleration for a joint.
virtual bool initialised()
bool setEncodersRaw(const double *vals) override
Set the value of all encoders.
bool getPidOutputsRaw(const yarp::dev::PidControlTypeEnum &pidtype, double *outs) override
Get the output of the controllers (e.g.
bool isPidEnabledRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, bool *enabled) override
Get the current status (enabled/disabled) of the pid controller.
bool setRefSpeedsRaw(const double *spds) override
Set reference speed on all joints.
bool getTargetPositionsRaw(double *refs) override
Get the last position reference for all axes.
bool getRefDutyCycleRaw(int j, double *v) override
Gets the last reference sent using the setRefDutyCycleRaw function.
bool setMotorEncoderCountsPerRevolutionRaw(int m, const double cpr) override
Sets number of counts per revolution for motor encoder m.
bool setPidErrorLimitsRaw(const yarp::dev::PidControlTypeEnum &pidtype, const double *limits) override
Get the error limit for the controller on all joints.
bool getPidReferenceRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double *ref) override
Get the current reference of the pid controller for a specific joint.
bool getNominalCurrentRaw(int m, double *val) override
bool getControlModeRaw(int j, int *v) override
bool calibrationDoneRaw(int j) override
Check if the calibration is terminated, on a particular joint.
bool threadInit() override
Initialization method.
bool getRefDutyCyclesRaw(double *v) override
Gets the last reference sent using the setRefDutyCyclesRaw function.
bool getRefVelocityRaw(const int joint, double *ref) override
Get the last reference speed set by velocityMove for single joint.
bool getEncoderTimedRaw(int j, double *encs, double *stamp) override
Read the instantaneous acceleration of all axes.
bool disablePidRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j) override
Disable the pid computation for a joint.
yarp::dev::VAS_status getVirtualAnalogSensorStatusRaw(int ch) override
Check the status of a given channel.
bool getMotorEncodersRaw(double *encs) override
Read the position of all motor encoders.
bool getTorqueRangesRaw(double *min, double *max) override
Get the full scale of the torque sensors of all joints.
bool getRefCurrentsRaw(double *t) override
Get the reference value of the currents for all motors.
bool setRefDutyCyclesRaw(const double *v) override
Sets the reference dutycycle for all motors.
bool getEncoderSpeedRaw(int j, double *sp) override
Read the instantaneous speed of an axis.
int getVirtualAnalogSensorChannelsRaw() override
Get the number of channels of the virtual sensor.
bool resetPidRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j) override
Reset the controller of a given joint, usually sets the current status of the joint as the reference ...
bool getCurrentRangesRaw(double *min, double *max) override
Get the full scale of the current measurements for all motors motor (e.g.
bool getEncoderRaw(int j, double *v) override
Read the value of an encoder.
bool getPidErrorLimitsRaw(const yarp::dev::PidControlTypeEnum &pidtype, double *limits) override
Get the error limit for all controllers.
bool enableAmpRaw(int j) override
Enable the amplifier on a specific joint.
bool fromConfig(yarp::os::Searchable &config)
bool getPidsRaw(const yarp::dev::PidControlTypeEnum &pidtype, yarp::dev::Pid *pids) override
Get current pid value for a specific joint.
bool getRefPositionsRaw(double *refs) override
Get the last position reference for all axes.
bool getMotorTorqueParamsRaw(int j, yarp::dev::MotorTorqueParameters *params) override
Get the motor parameters.
bool setControlModesRaw(const int n_joint, const int *joints, int *modes) override
bool setRefSpeedRaw(int j, double sp) override
Set reference speed for a joint, this is the speed used during the interpolation of the trajectory.
virtual bool getHasRotorEncoderIndexRaw(int j, int &ret)
bool updateVirtualAnalogSensorMeasureRaw(yarp::sig::Vector &measure) override
Set a vector of torque values for virtual sensor.
void resizeBuffers()
Resize previously allocated buffers.
void threadRelease() override
Release method.
bool getAmpStatusRaw(int *st) override
bool setImpedanceRaw(int j, double stiffness, double damping) override
Set current impedance parameters (stiffness,damping) for a specific joint.
bool setPWMLimitRaw(int j, const double val) override
bool relativeMoveRaw(int j, double delta) override
Set relative position.
virtual bool getMotorPolesRaw(int j, int &poles)
bool getPidRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, yarp::dev::Pid *pid) override
Get current pid value for a specific joint.
bool getCurrentRaw(int j, double *val) override
bool getPeakCurrentRaw(int m, double *val) override
bool getDutyCyclesRaw(double *v) override
Gets the current dutycycle of the output of the amplifier (i.e.
bool setEncoderRaw(int j, double val) override
Set the value of the encoder for a given joint.
bool getRefPositionRaw(const int joint, double *ref) override
Get the last position reference for the specified axis.
bool getLimitsRaw(int axis, double *min, double *max) override
Get the software limits for a particular axis.
virtual bool getRotorIndexOffsetRaw(int j, double &rotorOffset)
bool getVelLimitsRaw(int axis, double *min, double *max) override
Get the software speed limits for a particular axis.
bool setPositionsRaw(const int n_joint, const int *joints, const double *refs) override
Set new reference point for all axes.
bool setPidReferenceRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double ref) override
Set the controller reference for a given axis.
bool resetEncodersRaw() override
Reset encoders.
bool getPWMRaw(int j, double *val) override
bool getAxisNameRaw(int axis, std::string &name) override
bool setCalibrationParametersRaw(int axis, const yarp::dev::CalibrationParameters ¶ms) override
Start calibration, this method is very often platform specific.
bool setPidOffsetRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double v) override
Set an offset value on the ourput of pid controller.
bool getInteractionModeRaw(int j, yarp::dev::InteractionModeEnum *_mode) override
Get the current interaction mode of the robot, values can be stiff or compliant.
bool getCurrentRangeRaw(int j, double *min, double *max) override
Get the full scale of the current measurement for a given motor (e.g.
bool stopRaw() override
Stop motion, multiple joints.
virtual bool getKinematicMJRaw(int j, double &rotres)
bool getRefSpeedsRaw(double *spds) override
Get reference speed of all joints.
bool getRefAccelerationsRaw(double *accs) override
Get reference acceleration of all joints.
virtual bool getJointEncoderResolutionRaw(int m, double &jntres)
bool getAxes(int *ax) override
Get the number of controlled axes.
bool setMaxCurrentRaw(int j, double val) override
bool alloc(int njoints)
Allocated buffers.
bool resetMotorEncodersRaw() override
Reset motor encoders.
bool setRefTorquesRaw(const double *t) override
Set the reference value of the torque for all joints.
bool getEncodersRaw(double *encs) override
Read the position of all axes.
bool setRefAccelerationsRaw(const double *accs) override
Set reference acceleration on all joints.
bool getControlModesRaw(int *v) override
bool setPidRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, const yarp::dev::Pid &pid) override
Set new pid value for a joint axis.
bool getPWMLimitRaw(int j, double *val) override
virtual bool getRotorEncoderTypeRaw(int j, int &type)
bool getRefCurrentRaw(int j, double *t) override
Get the reference value of the current for a single motor.
bool getDutyCycleRaw(int j, double *v) override
Gets the current dutycycle of the output of the amplifier (i.e.
bool setPidErrorLimitRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j, double limit) override
Set the error limit for the controller on a specific joint.
bool getInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
Get the current interaction mode of the robot for a set of joints, values can be stiff or compliant.
bool positionMoveRaw(int j, double ref) override
Set new reference point for a single axis.
bool getMotorEncoderCountsPerRevolutionRaw(int m, double *v) override
Gets number of counts per revolution for motor encoder m.
bool setImpedanceOffsetRaw(int j, double offset) override
Set current force Offset for a specific joint.
bool setMotorEncodersRaw(const double *vals) override
Set the value of all motor encoders.
bool getPidErrorsRaw(const yarp::dev::PidControlTypeEnum &pidtype, double *errs) override
Get the error of all joints.
bool getGearboxRatioRaw(int m, double *gearbox) override
Get the gearbox ratio for a specific motor.
bool getMaxCurrentRaw(int j, double *val) override
Returns the maximum electric current allowed for a given motor.
bool close() override
Close the DeviceDriver.
bool getRefTorquesRaw(double *t) override
Get the reference value of the torque for all joints.
bool setRefCurrentRaw(int j, double t) override
Set the reference value of the current for a single motor.
bool getNumberOfMotorEncodersRaw(int *num) override
Get the number of available motor encoders.
bool getPidReferencesRaw(const yarp::dev::PidControlTypeEnum &pidtype, double *refs) override
Get the current reference of all pid controllers.
bool getTorqueRaw(int j, double *t) override
Get the value of the torque on a given joint (this is the feedback if you have a torque sensor).
bool getImpedanceRaw(int j, double *stiffness, double *damping) override
Get current impedance parameters (stiffness,damping,offset) for a specific joint.
bool enablePidRaw(const yarp::dev::PidControlTypeEnum &pidtype, int j) override
Enable the pid computation for a joint.
bool getRefVelocitiesRaw(double *refs) override
Get the last reference speed set by velocityMove for all joints.
bool setPositionRaw(int j, double ref) override
Set new position for a single axis.
bool getEncoderAccelerationsRaw(double *accs) override
Read the instantaneous acceleration of all axes.
bool setPidReferencesRaw(const yarp::dev::PidControlTypeEnum &pidtype, const double *refs) override
Set the controller reference, multiple axes.
bool getMotorEncoderRaw(int m, double *v) override
Read the value of a motor encoder.
bool getRefTorqueRaw(int j, double *t) override
Set the reference value of the torque for a given joint.
bool getMotorEncoderAccelerationsRaw(double *accs) override
Read the instantaneous acceleration of all motor encoders.
bool setInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
Set the interaction mode of the robot for a set of joints, values can be stiff or compliant.
bool getTemperaturesRaw(double *vals) override
Get temperature of all the motors.
bool resetMotorEncoderRaw(int m) override
Reset motor encoder, single motor.
bool setNominalCurrentRaw(int m, const double val) override
virtual bool getRotorEncoderResolutionRaw(int m, double &rotres)
virtual bool getHasRotorEncoderRaw(int j, int &ret)
bool getMotorEncodersTimedRaw(double *encs, double *stamps) override
Read the instantaneous position of all motor encoders.
bool resetEncoderRaw(int j) override
Reset encoder, single joint.
bool getTorquesRaw(double *t) override
Get the value of the torque for all joints (this is the feedback if you have torque sensors).
bool setLimitsRaw(int axis, double min, double max) override
Set the software limits for a particular axis, the behavior of the control card when these limits are...
bool setInteractionModeRaw(int j, yarp::dev::InteractionModeEnum _mode) override
Set the interaction mode of the robot, values can be stiff or compliant.
void run() override
Loop function.
bool getMotorEncoderTimedRaw(int m, double *encs, double *stamp) override
Read the instantaneous position of a motor encoder.
bool getEncodersTimedRaw(double *encs, double *stamps) override
Read the instantaneous acceleration of all axes.
bool getEncoderSpeedsRaw(double *spds) override
Read the instantaneous acceleration of an axis.
virtual bool getTorqueControlFilterType(int j, int &type)
class ImplementControlLimits; class StubImplControlLimitsRaw;
Interface settings the way the robot interacts with the environment: basic interaction types are Stif...
Default implementation of the IPositionControl interface.
Default implementation of the IPositionDirect interface.
Contains the parameters for a PID.
double scale
scale for the pid output
double offset
pwm offset added to the pid output
double stiction_down_val
down stiction offset added to the pid output
double stiction_up_val
up stiction offset added to the pid output
double max_output
max output
double kff
feedforward gain
double ki
integrative gain
double max_int
saturation threshold for the integrator
double kp
proportional gain
A simple collection of objects that can be described and transmitted in a portable way.
size_type size() const
Gets the number of elements in the bottle.
Value & get(size_type index) const
Reads a Value v from a certain part of the list.
Bottle & findGroup(const std::string &key) const override
Gets a list corresponding to a given keyword.
bool check(const std::string &key) const override
Check if there exists a property of the given name.
bool isNull() const override
Checks if the object is invalid.
An abstraction for a periodic thread.
bool start()
Call this to start the thread.
A base class for nested structures that can be searched.
virtual std::string toString() const =0
Return a standard text representation of the content of the object.
virtual Bottle & findGroup(const std::string &key) const =0
Gets a list corresponding to a given keyword.
A single value (typically within a Bottle).
virtual yarp::conf::float64_t asFloat64() const
Get 64-bit floating point value.
virtual std::int32_t asInt32() const
Get 32-bit integer value.
virtual bool isFloat64() const
Checks if value is a 64-bit floating point number.
virtual bool isInt32() const
Checks if value is a 32-bit integer.
virtual std::string asString() const
Get string value.
void resize(size_t size) override
Resize the vector.
T * data()
Return a pointer to the first element of the vector.
#define OPENLOOP_WATCHDOG
std::string toString(const T &value)
convert an arbitrary type to string.
static bool NOT_YET_IMPLEMENTED(const char *txt)
static bool DEPRECATED(const char *txt)
#define VELOCITY_WATCHDOG
#define yCInfo(component,...)
#define yCError(component,...)
#define yCTrace(component,...)
#define yCWarning(component,...)
#define yCDebug(component,...)
#define YARP_LOG_COMPONENT(name,...)
std::string get_string(const std::string &key, bool *found=nullptr)
Read a string from an environment variable.
An interface for the device drivers.
@ VOCAB_JOINTTYPE_REVOLUTE
@ VOCAB_JOINTTYPE_PRISMATIC
@ VOCAB_JOINTTYPE_UNKNOWN
double now()
Return the current time in seconds, relative to an arbitrary starting point.
std::string decode(NetInt32 code)
Convert a vocabulary identifier into a string.
The components from which ports and connections are built.
An interface to the operating system, including Port based communication.
VectorOf< double > Vector