25#define NEW_JSTATUS_STRUCT 1
26#define VELOCITY_WATCHDOG 0.1
27#define OPENLOOP_WATCHDOG 0.1
28#define PWM_CONSTANT 0.1
36 std::lock_guard lock(_mutex);
38 for (
int i=0;
i <_njoints ;
i++)
43 if (this->_command_speeds[
i]!=0)
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];
127 std::ostringstream oss;
134bool FakeMotionControl::extractGroup(
Bottle &input,
Bottle &out,
const std::string &
key1,
const std::string &txt,
int size)
145 if(
tmp.size()!=(
size_t) size)
166 nominalCurrent.
resize(_njoints);
167 maxCurrent.
resize(_njoints);
168 peakCurrent.
resize(_njoints);
171 pwmLimit.
resize(_njoints);
172 supplyVoltage.
resize(_njoints);
173 last_velocity_command.
resize(_njoints);
174 last_pwm_command.
resize(_njoints);
185 nominalCurrent.
zero();
192 supplyVoltage.
zero();
247 _axisName =
new std::string[nj];
289bool FakeMotionControl::dealloc()
399 _angleToEncoder(nullptr),
400 _encodersStamp (nullptr),
401 _ampsToSensor (nullptr),
402 _dutycycleToPWM(nullptr),
403 _DEPRECATED_encoderconversionfactor (nullptr),
404 _DEPRECATED_encoderconversionoffset (nullptr),
405 _jointEncoderRes (nullptr),
406 _rotorEncoderRes (nullptr),
408 _hasHallSensor (nullptr),
409 _hasTempSensor (nullptr),
410 _hasRotorEncoder (nullptr),
411 _hasRotorEncoderIndex (nullptr),
412 _rotorIndexOffset (nullptr),
413 _motorPoles (nullptr),
414 _rotorlimits_max (nullptr),
415 _rotorlimits_min (nullptr),
420 _ppids_ena (nullptr),
421 _tpids_ena (nullptr),
422 _cpids_ena (nullptr),
423 _vpids_ena (nullptr),
424 _ppids_lim (nullptr),
425 _tpids_lim (nullptr),
426 _cpids_lim (nullptr),
427 _vpids_lim (nullptr),
428 _ppids_ref (nullptr),
429 _tpids_ref (nullptr),
430 _cpids_ref (nullptr),
431 _vpids_ref (nullptr),
433 _jointType (nullptr),
434 _limitsMin (nullptr),
435 _limitsMax (nullptr),
436 _kinematic_mj (nullptr),
437 _maxJntCmdVelocity (nullptr),
438 _maxMotorVelocity (nullptr),
439 _velocityShifts (nullptr),
440 _velocityTimeout (nullptr),
443 _kbemf_scale (nullptr),
444 _ktau_scale (nullptr),
445 _viscousPos (nullptr),
446 _viscousNeg (nullptr),
447 _coulombPos (nullptr),
448 _coulombNeg (nullptr),
449 _velocityThres (nullptr),
450 _filterType (nullptr),
451 _torqueSensorId (nullptr),
452 _torqueSensorChan (nullptr),
453 _maxTorque (nullptr),
454 _newtonsToSensor (nullptr),
455 checking_motiondone (nullptr),
456 _last_position_move_time(nullptr),
457 _motorPwmLimits (nullptr),
459 useRawEncoderData (
false),
460 _pwmIsLimited (
false),
461 _torqueControlEnabled (
false),
462 _torqueControlUnits (T_MACHINE_UNITS),
463 _positionControlUnits (P_MACHINE_UNITS),
466 verbose (VERY_VERBOSE)
470 verbosewhenok = (
tmp !=
"") ? (
bool)yarp::conf::numeric::from_string<int>(
tmp) :
488 for(
int i=0;
i<_njoints;
i++)
491 pwmLimit[
i] = (33+
i)*10;
492 current[
i] = (33+
i)*100;
493 maxCurrent[
i] = (33+
i)*1000;
494 peakCurrent[
i] = (33+
i)*2;
495 nominalCurrent[
i] = (33+
i)*20;
496 supplyVoltage[
i] = (33+
i)*200;
497 last_velocity_command[
i] = -1;
498 last_pwm_command[
i] = -1;
500 _maxJntCmdVelocity[
i]=50.0;
547 _njoints = config.
findGroup(
"GENERAL").check(
"Joints",
Value(1),
"Number of degrees of freedom").asInt32();
557 for (
int i = 0;
i < _njoints;
i++) {
558 _newtonsToSensor[
i] = 1;
572 for (
size_t i = 0;
i < _njoints;
i++) {
bemfToRaw [
i] = _newtonsToSensor[
i] / _angleToEncoder[
i];}
573 for (
size_t i = 0;
i < _njoints;
i++) {
ktauToRaw[
i] = _dutycycleToPWM[
i] / _newtonsToSensor[
i]; }
574 ControlBoardHelper cb(_njoints, _axisMap, _angleToEncoder,
nullptr, _newtonsToSensor, _ampsToSensor, _dutycycleToPWM);
599 bool init = this->
start();
622 if (!extractGroup(
pidsGroup,
xtmp,
"stiffness",
"stiffness parameter", _njoints)) {
625 for (
j=0;
j<_njoints;
j++) {
626 vals[
j].stiffness =
xtmp.get(
j+1).asFloat64();
629 if (!extractGroup(
pidsGroup,
xtmp,
"damping",
"damping parameter", _njoints)) {
632 for (
j=0;
j<_njoints;
j++) {
644 if (!extractGroup(
pidsGroup,
xtmp,
"kp",
"Pid kp parameter", _njoints)) {
647 for (
j=0;
j<_njoints;
j++) {
651 if (!extractGroup(
pidsGroup,
xtmp,
"kd",
"Pid kd parameter", _njoints)) {
654 for (
j=0;
j<_njoints;
j++) {
658 if (!extractGroup(
pidsGroup,
xtmp,
"ki",
"Pid kp parameter", _njoints)) {
661 for (
j=0;
j<_njoints;
j++) {
665 if (!extractGroup(
pidsGroup,
xtmp,
"maxInt",
"Pid maxInt parameter", _njoints)) {
668 for (
j=0;
j<_njoints;
j++) {
672 if (!extractGroup(
pidsGroup,
xtmp,
"maxPwm",
"Pid maxPwm parameter", _njoints)) {
675 for (
j=0;
j<_njoints;
j++) {
679 if (!extractGroup(
pidsGroup,
xtmp,
"shift",
"Pid shift parameter", _njoints)) {
682 for (
j=0;
j<_njoints;
j++) {
686 if (!extractGroup(
pidsGroup,
xtmp,
"ko",
"Pid ko parameter", _njoints)) {
689 for (
j=0;
j<_njoints;
j++) {
693 if (!extractGroup(
pidsGroup,
xtmp,
"stictionUp",
"Pid stictionUp", _njoints)) {
696 for (
j=0;
j<_njoints;
j++) {
697 myPid[
j].stiction_up_val =
xtmp.get(
j+1).asFloat64();
700 if (!extractGroup(
pidsGroup,
xtmp,
"stictionDwn",
"Pid stictionDwn", _njoints)) {
703 for (
j=0;
j<_njoints;
j++) {
704 myPid[
j].stiction_down_val =
xtmp.get(
j+1).asFloat64();
707 if (!extractGroup(
pidsGroup,
xtmp,
"kff",
"Pid kff parameter", _njoints)) {
710 for (
j=0;
j<_njoints;
j++) {
715 if (_positionControlUnits==P_METRIC_UNITS)
717 for (
j=0;
j<_njoints;
j++)
732 if (!extractGroup(
pidsGroup,
xtmp,
"limPwm",
"Limited PWD", _njoints))
734 yCError(
FAKEMOTIONCONTROL) <<
"The PID parameter limPwm was requested but was not correctly set in the configuration file, please fill it.";
739 for (
j = 0;
j < _njoints;
j++) {
747bool FakeMotionControl::parseTorquePidsGroup(
Bottle&
pidsGroup,
Pid myPid[],
double kbemf[],
double ktau[],
int filterType[],
double viscousPos[],
double viscousNeg[],
double coulombPos[],
double coulombNeg[],
double velocityThres[])
751 if (!extractGroup(
pidsGroup,
xtmp,
"kp",
"Pid kp parameter", _njoints)) {
754 for (
j=0;
j<_njoints;
j++) {
758 if (!extractGroup(
pidsGroup,
xtmp,
"kd",
"Pid kd parameter", _njoints)) {
761 for (
j=0;
j<_njoints;
j++) {
765 if (!extractGroup(
pidsGroup,
xtmp,
"ki",
"Pid kp parameter", _njoints)) {
768 for (
j=0;
j<_njoints;
j++) {
772 if (!extractGroup(
pidsGroup,
xtmp,
"maxInt",
"Pid maxInt parameter", _njoints)) {
775 for (
j=0;
j<_njoints;
j++) {
779 if (!extractGroup(
pidsGroup,
xtmp,
"maxPwm",
"Pid maxPwm parameter", _njoints)) {
782 for (
j=0;
j<_njoints;
j++) {
786 if (!extractGroup(
pidsGroup,
xtmp,
"shift",
"Pid shift parameter", _njoints)) {
789 for (
j=0;
j<_njoints;
j++) {
793 if (!extractGroup(
pidsGroup,
xtmp,
"ko",
"Pid ko parameter", _njoints)) {
796 for (
j=0;
j<_njoints;
j++) {
800 if (!extractGroup(
pidsGroup,
xtmp,
"stictionUp",
"Pid stictionUp", _njoints)) {
803 for (
j=0;
j<_njoints;
j++) {
804 myPid[
j].stiction_up_val =
xtmp.get(
j+1).asFloat64();
807 if (!extractGroup(
pidsGroup,
xtmp,
"stictionDwn",
"Pid stictionDwn", _njoints)) {
810 for (
j=0;
j<_njoints;
j++) {
811 myPid[
j].stiction_down_val =
xtmp.get(
j+1).asFloat64();
814 if (!extractGroup(
pidsGroup,
xtmp,
"kff",
"Pid kff parameter", _njoints)) {
817 for (
j=0;
j<_njoints;
j++) {
821 if (!extractGroup(
pidsGroup,
xtmp,
"kbemf",
"kbemf parameter", _njoints)) {
824 for (
j=0;
j<_njoints;
j++) {
828 if (!extractGroup(
pidsGroup,
xtmp,
"ktau",
"ktau parameter", _njoints)) {
831 for (
j=0;
j<_njoints;
j++) {
832 ktau[
j] =
xtmp.get(
j+1).asFloat64();
835 if (!extractGroup(
pidsGroup,
xtmp,
"filterType",
"filterType param", _njoints)) {
838 for (
j=0;
j<_njoints;
j++) {
842 if (!extractGroup(
pidsGroup,
xtmp,
"viscousPos",
"viscous pos parameter", _njoints)) {
845 for (
j=0;
j<_njoints;
j++) {
846 viscousPos[
j] =
xtmp.get(
j+1).asFloat64();
849 if (!extractGroup(
pidsGroup,
xtmp,
"viscousNeg",
"viscous neg parameter", _njoints)) {
852 for (
j=0;
j<_njoints;
j++) {
853 viscousNeg[
j] =
xtmp.get(
j+1).asFloat64();
856 if (!extractGroup(
pidsGroup,
xtmp,
"coulombPos",
"coulomb pos parameter", _njoints)) {
859 for (
j=0;
j<_njoints;
j++) {
860 coulombPos[
j] =
xtmp.get(
j+1).asFloat64();
863 if (!extractGroup(
pidsGroup,
xtmp,
"coulombNeg",
"coulomb neg parameter", _njoints)) {
866 for (
j=0;
j<_njoints;
j++) {
867 coulombNeg[
j] =
xtmp.get(
j+1).asFloat64();
870 if (!extractGroup(
pidsGroup,
xtmp,
"velocityThres",
"velocity threshold parameter", _njoints)) {
873 for (
j=0;
j<_njoints;
j++) {
874 velocityThres[
j] =
xtmp.get(
j+1).asFloat64();
891 if (!extractGroup(
pidsGroup,
xtmp,
"limPwm",
"Limited PWM", _njoints))
893 yCError(
FAKEMOTIONCONTROL) <<
"The PID parameter limPwm was requested but was not correctly set in the configuration file, please fill it.";
898 for (
j = 0;
j < _njoints;
j++) {
915 if(extractGroup(
general,
xtmp,
"AxisMap",
"a list of reordered indices for the axes", _njoints))
918 _axisMap[
i - 1] =
xtmp.get(
i).asInt32();
927 for (
i = 0;
i < _njoints;
i++) {
934 if (extractGroup(
general,
xtmp,
"AxisName",
"a list of strings representing the axes names", _njoints))
939 _axisName[_axisMap[
i - 1]] =
xtmp.get(
i).asString();
948 for (
i = 0;
i < _njoints;
i++)
950 _axisName[_axisMap[
i]] =
"joint" +
toString(
i);
955 if (extractGroup(
general,
xtmp,
"AxisType",
"a list of strings representing the axes type (revolute/prismatic)", _njoints))
978 for (
i = 0;
i < _njoints;
i++)
985 if (
general.check(
"ampsToSensor"))
987 if (extractGroup(
general,
xtmp,
"ampsToSensor",
"a list of scales for the ampsToSensor conversion factors", _njoints))
991 if (
xtmp.get(
i).isFloat64())
993 _ampsToSensor[
i - 1] =
xtmp.get(
i).asFloat64();
1003 for (
i = 0;
i < _njoints;
i++)
1005 _ampsToSensor[
i] = 1.0;
1010 if (
general.check(
"fullscalePWM"))
1012 if (extractGroup(
general,
xtmp,
"fullscalePWM",
"a list of scales for the fullscalePWM conversion factors", _njoints))
1016 if (
xtmp.get(
i).isFloat64() ||
xtmp.get(
i).isInt32())
1018 _dutycycleToPWM[
i - 1] =
xtmp.get(
i).asFloat64() / 100.0;
1028 for (
i = 0;
i < _njoints;
i++) {
1029 _dutycycleToPWM[
i] = 1.0;
1037 if (extractGroup(
general,
xtmp,
"Encoder",
"a list of scales for the encoders", _njoints))
1041 _angleToEncoder[
i-1] =
xtmp.get(
i).asFloat64();
1050 for (
i = 0;
i < _njoints;
i++) {
1051 _angleToEncoder[
i] = 1;
1436 if (!extractGroup(limits,
xtmp,
"Max",
"a list of maximum angles (in degrees)", _njoints))
1437 _limitsMax[
i - 1] = 100;
1439 for(
i=1;
i<
xtmp.size();
i++) _limitsMax[
i-1]=
xtmp.get(
i).asFloat64();
1442 if (!extractGroup(limits,
xtmp,
"Min",
"a list of minimum angles (in degrees)", _njoints))
1443 _limitsMin[
i - 1] = 0;
1445 for(
i=1;
i<
xtmp.size();
i++) _limitsMin[
i-1]=
xtmp.get(
i).asFloat64();
1487 std::lock_guard lock(_mutex);
1514void FakeMotionControl::cleanup()
1549 for(
int j=0;
j< _njoints;
j++)
1581 for(
int j=0, index=0;
j< _njoints;
j++, index++)
1613 for(
int j=0, index=0;
j< _njoints;
j++, index++)
1645 for(
int j=0;
j< _njoints;
j++)
1681 for(
int j=0, index=0;
j<_njoints;
j++, index++)
1716 for(
int j=0;
j< _njoints;
j++)
1748 for(
int j=0, index=0;
j<_njoints;
j++, index++)
1765 _ppids_ena[
j]=
false;
1768 _vpids_ena[
j]=
false;
1771 _cpids_ena[
j]=
false;
1774 _tpids_ena[
j]=
false;
1832 *enabled=_ppids_ena[
j];
1835 *enabled=_vpids_ena[
j];
1838 *enabled=_cpids_ena[
j];
1841 *enabled=_tpids_ena[
j];
1875 for(
int j=0;
j< _njoints;
j++)
1895 yCError(
FAKEMOTIONCONTROL) <<
"velocityMoveRaw: skipping command because board " <<
" joint " <<
j <<
" is not in VOCAB_CM_VELOCITY mode";
1897 _command_speeds[
j] =
sp;
1906 for (
int i = 0;
i < _njoints;
i++) {
1947 if (verbose >= VERY_VERBOSE) {
1964 yCError(
FAKEMOTIONCONTROL) <<
"positionMoveRaw: skipping command because joint " <<
j <<
" is not in VOCAB_CM_POSITION mode";
1966 _posCtrl_references[
j] = ref;
1972 if (verbose >= VERY_VERBOSE) {
1977 for(
int j=0, index=0;
j< _njoints;
j++, index++)
1986 if (verbose >= VERY_VERBOSE) {
2002 yCError(
FAKEMOTIONCONTROL) <<
"relativeMoveRaw: skipping command because joint " <<
j <<
" is not in VOCAB_CM_POSITION mode";
2004 _posCtrl_references[
j] +=
delta;
2010 if (verbose >= VERY_VERBOSE) {
2015 for(
int j=0, index=0;
j< _njoints;
j++, index++)
2025 if (verbose >= VERY_VERBOSE) {
2035 if (verbose >= VERY_VERBOSE) {
2042 for(
int j=0, index=0;
j< _njoints;
j++, index++)
2056 _ref_speeds[index] =
sp;
2064 for(
int j=0, index=0;
j< _njoints;
j++, index++)
2066 _ref_speeds[index] =
spds[index];
2078 _ref_accs[
j ] = 1
e6;
2080 else if (acc < -1
e6)
2082 _ref_accs[
j ] = -1
e6;
2086 _ref_accs[
j ] = acc;
2096 for(
int j=0, index=0;
j< _njoints;
j++, index++)
2100 _ref_accs[index] = 1
e6;
2104 _ref_accs[index] = -1
e6;
2108 _ref_accs[index] =
accs[
j];
2116 *
spd = _ref_speeds[
j];
2122 memcpy(
spds, _ref_speeds,
sizeof(
double) * _njoints);
2128 *acc = _ref_accs[
j];
2134 memcpy(
accs, _ref_accs,
sizeof(
double) * _njoints);
2147 for(
int j=0;
j< _njoints;
j++)
2161 if (verbose >= VERY_VERBOSE) {
2180 if (verbose >= VERY_VERBOSE) {
2194 if (verbose >= VERY_VERBOSE) {
2213 if (verbose >= VERY_VERBOSE) {
2227 if (verbose >= VERY_VERBOSE) {
2241 if (verbose >= VERY_VERBOSE) {
2255 if (verbose >= VERY_VERBOSE) {
2269 if (verbose >= VERY_VERBOSE) {
2288 if (verbose > VERY_VERY_VERBOSE) {
2292 *v = _controlModes[
j];
2300 for(
int j=0;
j< _njoints;
j++)
2319 if (verbose >= VERY_VERBOSE) {
2329 _controlModes[
j] =
_mode;
2331 _posCtrl_references[
j] = pos[
j];
2338 if (verbose >= VERY_VERBOSE) {
2352 if (verbose >= VERY_VERBOSE) {
2357 for(
int i=0;
i<_njoints;
i++)
2401 for(
int j=0;
j< _njoints;
j++)
2420 for(
int j=0;
j< _njoints;
j++)
2438 for(
int j=0;
j< _njoints;
j++)
2451 for (
int i = 0;
i < _njoints;
i++) {
2462 *stamp = _encodersStamp[
j];
2515 for(
int j=0;
j< _njoints;
j++)
2532 for(
int j=0;
j< _njoints;
j++)
2548 for(
int j=0;
j< _njoints;
j++)
2559 for (
int i = 0;
i < _njoints;
i++) {
2571 *stamp = _encodersStamp[m];
2593 *value = current[
j];
2601 for(
int j=0;
j< _njoints;
j++)
2610 maxCurrent[m] = val;
2616 *val = maxCurrent[m];
2622 (_enabledAmp[
j ]) ? *
st = 1 : *
st = 0;
2629 for(
int j=0;
j<_njoints;
j++)
2631 sts[
j] = _enabledAmp[
j];
2638 *val = peakCurrent[m];
2644 peakCurrent[m] = val;
2650 *val = nominalCurrent[m];
2656 nominalCurrent[m] = val;
2680 *val = supplyVoltage[m];
2694 *min = _limitsMin[
j];
2695 *max = _limitsMax[
j];
2773 name = _axisName[
axis];
2787 type = _jointType[
axis];
2805 *max = _maxJntCmdVelocity[
axis];
2819 for (
int i = 0;
i < _njoints;
i++)
2839 for (
int j = 0;
j < _njoints &&
ret;
j++) {
2850 if (
t>1.0 ||
t< -1.0)
2853 _hwfault_code[
j] = 1;
2854 _hwfault_message[
j] =
"test" + std::to_string(
j) +
" torque";
2869 for (
int j = 0;
j < _njoints &&
ret;
j++) {
2878 *
t = _ref_torques[
j];
2910 params->
bemf = _kbemf[
j];
2912 params->
ktau = _ktau[
j];
2933 _kbemf[
j] = params.
bemf;
2934 _ktau[
j] = params.
ktau;
2968 _posDir_references[
j] = ref;
2983 for(
int i=0;
i< _njoints;
i++)
2985 _posDir_references[
i] =
refs[
i];
2993 if (verbose >= VERY_VERBOSE) {
3004 "this call is for reference only and may not reflect the actual behaviour of the motor/firmware.";
3006 *ref = _posCtrl_references[
axis];
3013 for (
int i = 0;
i < _njoints;
i++) {
3022 for (
int i = 0;
i<nj;
i++)
3031 *ref = _command_speeds[
axis];
3038 for (
int i = 0;
i<_njoints;
i++)
3048 for (
int i = 0;
i<nj;
i++)
3065 this call is for reference only and may not reflect the actual behaviour of the motor/firmware.";
3068 *ref = _posDir_references[
axis];
3076 for (
int i = 0;
i<_njoints;
i++)
3086 for (
int i = 0;
i<nj;
i++)
3097 if (verbose > VERY_VERY_VERBOSE) {
3107 for(
int j=0;
j< n_joints;
j++)
3118 for (
int j = 0;
j < _njoints;
j++) {
3129 if (verbose >= VERY_VERBOSE) {
3133 _interactMode[
j] =
_mode;
3142 for(
int i=0;
i<n_joints;
i++)
3152 for(
int i=0;
i<_njoints;
i++)
3175 for(
int j=0;
j< _njoints;
j++)
3203 for (
int i = 0;
i < _njoints;
i++)
3218 for (
int i = 0;
i < _njoints;
i++)
3233 for (
int i = 0;
i < _njoints;
i++)
3255 *min = _ref_currents[
j] / 100;
3256 *max = _ref_currents[
j] * 100;
3263 for (
int i = 0;
i < _njoints;
i++)
3265 min[
i] = _ref_currents[
i] / 100;
3266 max[
i] = _ref_currents[
i] * 100;
3273 for (
int i = 0;
i < _njoints;
i++)
3275 _ref_currents[
i] =
t[
i];
3276 current[
i] =
t[
i] / 2;
3283 _ref_currents[
j] =
t;
3300 for (
int i = 0;
i < _njoints;
i++)
3302 t[
i] = _ref_currents[
i];
3309 *
t = _ref_currents[
j];
3325 for (
int i = 0;
i < _njoints;
i++)
3341 fault = _hwfault_code[
j];
3342 message = _hwfault_message[
j];
void checkAndDestroy(T *&p)
bool NOT_YET_IMPLEMENTED(const char *txt)
constexpr yarp::conf::vocab32_t VOCAB_CM_MIXED
constexpr yarp::conf::vocab32_t VOCAB_CM_TORQUE
constexpr yarp::conf::vocab32_t VOCAB_CM_PWM
constexpr yarp::conf::vocab32_t VOCAB_CM_HW_FAULT
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
Get the number of available motors.
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 setGearboxRatioRaw(int m, const double val) override
Set the gearbox ratio for a specific motor.
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 getLastJointFaultRaw(int j, int &fault, std::string &message) 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)
bool initialize(int size, const int *amap, const double *enc, const double *zos, const double *ampereFactor=NULL, const double *voltFactor=NULL)
Initialize the internal data and alloc memory.
bool uninitialize()
Clean up internal data and memory.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap)
Initialize the internal data and alloc memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool uninitialize()
Clean up internal data and memory.
class ImplementControlLimits; class StubImplControlLimitsRaw;
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool initialize(int k, const int *amap)
bool initialize(int size, const int *amap, const double *ampsToSens)
Initialize the internal data and alloc memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool uninitialize()
Clean up internal data and memory.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos, const double *nw)
Initialize the internal data and alloc memory.
Interface settings the way the robot interacts with the environment: basic interaction types are Stif...
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap)
Initialize the internal data and alloc memory, smaller version.
bool initialize(int size, const int *amap)
Initialize the internal data and alloc memory.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool initialize(int size, const int *amap)
Initialize the internal data and alloc memory.
bool initialize(int k, const int *amap, const double *dutyToPWM)
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos, const double *newtons, const double *amps, const double *dutys)
Initialize the internal data and alloc memory.
bool setConversionUnits(const PidControlTypeEnum &pidtype, const PidFeedbackUnitsEnum fbk_conv_units, const PidOutputUnitsEnum out_conv_units)
Default implementation of the IPositionControl interface.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
Default implementation of the IPositionDirect interface.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos, const double *nw, const double *amps, const double *dutys, const double *bemfs, const double *ktaus)
Initialize the internal data and alloc memory.
bool uninitialize()
Clean up internal data and memory.
bool uninitialize()
Clean up internal data and memory.
bool initialize(int size, const int *amap, const double *enc, const double *zos)
Initialize the internal data and alloc memory.
bool initialize(int k, const int *amap, const double *userToRaw)
Contains the parameters for a PID.
double offset
pwm offset added to the pid output
double kp
proportional gain
A simple collection of objects that can be described and transmitted in a portable way.
Bottle & findGroup(const std::string &key) const override
Gets a list corresponding to a given keyword.
bool isNull() const override
Checks if the object is invalid.
A mini-server for performing network communication in the background.
An abstraction for a periodic thread.
bool start()
Call this to start the thread.
void stop()
Call this to stop the thread, this call blocks until the thread is terminated (and releaseThread() ca...
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).
void resize(size_t size) override
Resize the vector.
void zero()
Zero the elements 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.
For streams capable of holding different kinds of content, check what they actually have.
@ 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.