12#ifndef __CanBusMotionControlh__
13#define __CanBusMotionControlh__
15#include <yarp/dev/DeviceDriver.h>
16#include <yarp/dev/ControlBoardHelper.h>
17#include <yarp/dev/ControlBoardInterfaces.h>
18#include <yarp/dev/ControlBoardInterfacesImpl.h>
19#include <yarp/dev/IAnalogSensor.h>
20#include <yarp/dev/CanBusInterface.h>
21#include <yarp/dev/IPreciselyTimed.h>
22#include <yarp/os/PeriodicThread.h>
33 class CanBusMotionControl;
34 class CanBusMotionControlParameters;
142 bool fromConfig(yarp::os::Searchable &config);
204 _data=
new double[_bufferSize];
205 for(
int k=0;k<_bufferSize;k++)
228 public yarp::dev::DeviceDriver
248 unsigned int counterSat;
249 unsigned int counterError;
250 unsigned int counterTimeout;
260 yarp::os::Bottle initMsg;
261 yarp::os::Bottle speedMsg;
262 yarp::os::Bottle closeMsg;
263 std::string deviceIdentifier;
265 short useCalibration;
266 bool isVirtualSensor;
268 bool decode8(
const unsigned char *msg,
int id,
double *data);
269 bool decode16(
const unsigned char *msg,
int id,
double *data);
299 return deviceIdentifier;
317 {
return useCalibration;}
319 {
return scaleFactor;}
322 if (chan>=0 && chan<data->size())
323 return scaleFactor[chan];
331 virtual int read(yarp::sig::Vector &
out);
361 if (jnt>=0 && jnt<jointsNum)
return estim_params[jnt];
367 delete [] estim_params;
371#define BOARD_TYPE_4DC 0x03
372#define BOARD_TYPE_BLL 0x04
423 for (
int i=0; i<jointsNum; i++)
425 infos[i] = f_infos[i];
434 bool printed =
false;
435 for (
int j=0; j<jointsNum; j++)
437 if (
infos[j].board_type==0)
483 yInfo(
"**********************************\n");
485 yInfo(
"Firmware report:\n");
486 for (
int j=0; j<jointsNum; j++)
490 yInfo(
"**********************************\n");
496 yWarning(
"###################################################################################\n");
497 yWarning(
"###################################################################################\n");
499 yWarning(
" yarprobotinterface detected that your control boards are not running the latest\n");
500 yWarning(
" available firmware version, although it is still compatible with it.\n");
501 yWarning(
" Upgrading your iCub firmware to build %d is highly recommended.\n",
LAST_BLL_BUILD);
502 yWarning(
" For further information please visit: https://icub-tech-iit.github.io/documentation/icub_firmware\n");
504 yWarning(
"###################################################################################\n");
505 yWarning(
"###################################################################################\n");
511 yWarning(
"#################################################################################################\n");
512 yWarning(
"#################################################################################################\n");
514 yWarning(
" yarprobotinterface detected that your control boards are running a firmware version\n");
515 yWarning(
" which is newer than the recommended version (build %d), although it is still compatible with it.\n",
LAST_BLL_BUILD);
516 yWarning(
" It may also be that you are running an experimental firmware version. \n");
517 yWarning(
" An update of Yarp/iCub SW is recommended. Proceed only if you are aware of what you are doing.\n");
519 yWarning(
"#################################################################################################\n");
520 yWarning(
"#################################################################################################\n");
526 yError(
"###################################################################################\n");
527 yError(
"###################################################################################\n");
529 yError(
" It has been detected that your control boards are not using the same\n");
530 yError(
" CAN protocol used by yarprobotinterface. yarprobotinterface cannot continue.\n");
531 yError(
" Please update your system (yarprobotinterface and/or your control board firmware.\n");
532 yError(
" For further information please visit: https://icub-tech-iit.github.io/documentation/icub_firmware\n");
534 yError(
"###################################################################################\n");
535 yError(
"###################################################################################\n");
567 yarp::dev::ControlBoardHelper* helper;
576 delete [] maxUserStep;
582 inline double posA2E (
double ang,
int j) {
return helper->posA2E(ang, j);}
583 inline double posE2A (
double ang,
int j) {
return helper->posE2A(ang, j);}
593 int* torqueSensorChan;
594 double* maximumTorque;
595 double* newtonsToSensor;
598 axisTorqueHelper(
int njoints,
int*
id,
int* chan,
double* maxTrq,
double* newtons2sens );
601 if (jnt>=0 && jnt<jointsNum)
return torqueSensorId[jnt];
606 if (jnt>=0 && jnt<jointsNum)
return torqueSensorChan[jnt];
611 if (jnt>=0 && jnt<jointsNum)
return maximumTorque[jnt];
616 if (jnt>=0 && jnt<jointsNum)
return newtonsToSensor[jnt];
625 if (torqueSensorId)
delete [] torqueSensorId;
626 if (torqueSensorChan)
delete [] torqueSensorChan;
627 if (maximumTorque)
delete [] maximumTorque;
628 if (newtonsToSensor)
delete [] newtonsToSensor;
655 public os::PeriodicThread,
656 public IPidControlRaw,
657 public IPositionControlRaw,
658 public IPositionDirectRaw,
659 public IVelocityControlRaw,
660 public IAmplifierControlRaw,
661 public IControlCalibrationRaw,
662 public IControlLimitsRaw,
663 public ITorqueControlRaw,
664 public IImpedanceControlRaw,
665 public IControlModeRaw,
666 public IPreciselyTimed,
667 public ImplementPositionControl,
668 public ImplementPositionDirect,
669 public ImplementVelocityControl,
670 public ImplementPidControl,
671 public IEncodersTimedRaw,
672 public ImplementEncodersTimed,
673 public IMotorEncodersRaw,
674 public ImplementMotorEncoders,
676 public ImplementMotor,
677 public ImplementControlCalibration,
678 public ImplementAmplifierControl,
679 public ImplementControlLimits,
680 public ImplementTorqueControl,
681 public ImplementImpedanceControl,
682 public ImplementControlMode,
683 public IInteractionModeRaw,
684 public ImplementInteractionMode,
685 public IRemoteVariablesRaw,
686 public ImplementRemoteVariables,
688 public ImplementAxisInfo,
689 public IPWMControlRaw,
690 public ImplementPWMControl,
691 public ICurrentControlRaw,
692 public ImplementCurrentControl,
696 class torqueControlHelper
699 double* newtonsToSensor;
700 double* angleToEncoders;
703 torqueControlHelper(
int njoints,
double* angleToEncoders,
double* newtons2sens);
704 inline ~torqueControlHelper()
706 if (newtonsToSensor)
delete [] newtonsToSensor;
707 if (angleToEncoders)
delete [] angleToEncoders;
711 inline double getNewtonsToSensor (
int jnt)
713 if (jnt>=0 && jnt<jointsNum)
return newtonsToSensor[jnt];
716 inline double getAngleToEncoders (
int jnt)
718 if (jnt>=0 && jnt<jointsNum)
return angleToEncoders[jnt];
721 inline int getNumberOfJoints ()
731 void handleBroadcasts();
734 double averagePeriod;
735 double averageThreadTime;
738 double lastReportTime;
739 os::Stamp stampEncoders;
742 std::string errorstring;
743 static constexpr size_t errorstringsize = 512;
745 std::list<TBR_AnalogSensor *> analogSensors;
747 std::string canDevName;
748 std::string networkName;
752 bool readFullScaleAnalog(
int analog_can_address,
int channel,
double* fullScale);
753 TBR_AnalogSensor *instantiateAnalog(yarp::os::Searchable& config, std::string
id);
773 virtual bool open(yarp::os::Searchable& config);
787 virtual bool close(
void);
790 yarp::dev::DeviceDriver *
createDevice(yarp::os::Searchable& config);
798 #ifdef _USE_INTERFACEGUI
800 void logNetworkData(
const char *devName,
int network,
int index,
const yarp::os::Value&
data)
804 sprintf(_buff,
"%s %d,network,%d",devName,network,index);
805 mServerLogger->
log(std::string(_buff),
data);
809 void logJointData(
const char *devName,
int network,
int joint,
int index,
const yarp::os::Value&
data)
813 sprintf(_buff,
"%s %d,BLL,%d,%d",devName,network,joint,index);
814 mServerLogger->
log(std::string(_buff),
data);
818 void logAnalogData(
const char *devName,
int network,
int board,
int index,
const yarp::os::Value&
data)
822 sprintf(_buff,
"%s %d,analog,%d,%d",devName,network,
board,index);
823 mServerLogger->
log(std::string(_buff),
data);
827 #define logJointData(a,b,c,d,e)
828 #define logNetworkData(a,b,c,d)
829 #define logBoardData(a,b,c,d,e)
834 virtual bool setPidRaw(
const PidControlTypeEnum& pidtype,
int j,
const Pid &pid)
override;
835 virtual bool setPidsRaw(
const PidControlTypeEnum& pidtype,
const Pid *pids)
override;
836 virtual bool setPidReferenceRaw(
const PidControlTypeEnum& pidtype,
int j,
double ref)
override;
837 virtual bool setPidReferencesRaw(
const PidControlTypeEnum& pidtype,
const double *refs)
override;
838 virtual bool setPidErrorLimitRaw(
const PidControlTypeEnum& pidtype,
int j,
double limit)
override;
839 virtual bool setPidErrorLimitsRaw(
const PidControlTypeEnum& pidtype,
const double *limits)
override;
840 virtual bool getPidErrorRaw(
const PidControlTypeEnum& pidtype,
int j,
double *err)
override;
841 virtual bool getPidErrorsRaw(
const PidControlTypeEnum& pidtype,
double *errs)
override;
842 virtual bool getPidOutputRaw(
const PidControlTypeEnum& pidtype,
int j,
double *
out)
override;
843 virtual bool getPidOutputsRaw(
const PidControlTypeEnum& pidtype,
double *outs)
override;
844 virtual bool getPidRaw(
const PidControlTypeEnum& pidtype,
int j, Pid *pid)
override;
845 virtual bool getPidsRaw(
const PidControlTypeEnum& pidtype, Pid *pids)
override;
846 virtual bool getPidReferenceRaw(
const PidControlTypeEnum& pidtype,
int j,
double *ref)
override;
847 virtual bool getPidReferencesRaw(
const PidControlTypeEnum& pidtype,
double *refs)
override;
848 virtual bool getPidErrorLimitRaw(
const PidControlTypeEnum& pidtype,
int j,
double *limit)
override;
850 virtual bool resetPidRaw(
const PidControlTypeEnum& pidtype,
int j)
override;
851 virtual bool disablePidRaw(
const PidControlTypeEnum& pidtype,
int j)
override;
852 virtual bool enablePidRaw(
const PidControlTypeEnum& pidtype,
int j)
override;
853 virtual bool setPidOffsetRaw(
const PidControlTypeEnum& pidtype,
int j,
double v)
override;
854 virtual bool isPidEnabledRaw(
const PidControlTypeEnum& pidtype,
int j,
bool* enabled);
861 virtual bool getAxes(
int *ax)
override;
876 virtual bool stopRaw(
int j)
override;
877 virtual bool stopRaw()
override;
892 virtual bool setRefTorquesRaw(
const int n_joint,
const int *joints,
const double *t)
override;
910 virtual bool getImpedanceRaw(
int j,
double *stiff,
double *damp)
override;
911 virtual bool setImpedanceRaw(
int j,
double stiff,
double damp)
override;
914 virtual bool getCurrentImpedanceLimitRaw(
int j,
double *min_stiff,
double *max_stiff,
double *min_damp,
double *max_damp)
override;
924 virtual bool getControlModesRaw(
const int n_joint,
const int *joints,
int *modes)
override;
926 virtual bool setControlModesRaw(
const int n_joint,
const int *joints,
int *modes)
override;
996 virtual bool getPWMRaw(
int j,
double* val)
override;
1016 virtual bool getAxisNameRaw(
int axis, std::string& name)
override;
1017 virtual bool getJointTypeRaw(
int axis, yarp::dev::JointTypeEnum& type)
override;
1030 virtual bool setParameterRaw(
int j,
unsigned int type,
double value) ;
1031 virtual bool getParameterRaw(
int j,
unsigned int type,
double* value) ;
1038 virtual bool setLimitsRaw(
int axis,
double min,
double max)
override;
1039 virtual bool getLimitsRaw(
int axis,
double *min,
double *max)
override;
1041 virtual bool setVelLimitsRaw(
int axis,
double min,
double max)
override;
1042 virtual bool getVelLimitsRaw(
int axis,
double *min,
double *max)
override;
1049 virtual bool positionMoveRaw(
const int n_joint,
const int *joints,
const double *refs)
override;
1050 virtual bool relativeMoveRaw(
const int n_joint,
const int *joints,
const double *deltas)
override;
1051 virtual bool checkMotionDoneRaw(
const int n_joint,
const int *joints,
bool *flags)
override;
1052 virtual bool setRefSpeedsRaw(
const int n_joint,
const int *joints,
const double *spds)
override;
1054 virtual bool getRefSpeedsRaw(
const int n_joint,
const int *joints,
double *spds)
override;
1056 virtual bool stopRaw(
const int n_joint,
const int *joints)
override;
1062 virtual bool velocityMoveRaw(
const int n_joint,
const int *joints,
const double *spds)
override;
1065 virtual bool getRefVelocitiesRaw(
const int n_joint,
const int *joints,
double *refs)
override;
1073 virtual bool setTorqueSource(
int axis,
char board_id,
char board_chan);
1077 virtual bool setPositionsRaw(
const int n_joint,
const int *joints,
const double *refs)
override;
1081 virtual bool getRefPositionsRaw(
const int n_joint,
const int *joints,
double *refs)
override;
1085 virtual bool getInteractionModesRaw(
int n_joints,
int *joints, yarp::dev::InteractionModeEnum* modes)
override;
1088 virtual bool setInteractionModesRaw(
int n_joints,
int *joints, yarp::dev::InteractionModeEnum* modes)
override;
1107 virtual bool setRefCurrentsRaw(
const int n_joint,
const int *joints,
const double *t)
override;
1138 inline bool ENABLED (
int axis);
1140 virtual void run(
void);
1146 bool _writeWord16Ex (
int msg,
int axis,
short s1,
short s2,
bool check=
true);
1147 bool _readWord16 (
int msg,
int axis,
short& value);
1148 bool _readWord16Ex (
int msg,
int axis,
short& value1,
short& value2);
1150 bool _readDWord (
int msg,
int axis,
int& value);
1155 bool _readByte8(
int msg,
int axis,
int& value);
1156 bool _writeByteWords16(
int msg,
int axis,
unsigned char value,
short s1,
short s2,
short s3);
1177 #define MAX_POSITION_MOVE_INTERVAL 0.080
1192 return short(
x + .5);
1194 return short(
x - .5);
#define logNetworkData(a, b, c, d)
#define logJointData(a, b, c, d, e)
Interface for a factory device; a device that can create objects.
double & operator[](int i)
TBR_AnalogData(int ch, int buffsize)
virtual int calibrateChannel(int ch, double v)
bool handleAnalog(void *)
std::string getDeviceId()
short getUseCalibration()
double getScaleFactor(int chan)
bool open(int channels, AnalogDataFormat f, short bId, short useCalib, bool isVirtualSensor)
virtual int getState(int ch)
TBR_CanBackDoor * backDoor
virtual int read(yarp::sig::Vector &out)
void getCounters(unsigned int &sat, unsigned int &err, unsigned int &to)
virtual int getChannels()
void setDeviceId(std::string id)
virtual int calibrateSensor(const yarp::sig::Vector &value)
virtual int calibrateSensor()
virtual int calibrateChannel(int ch)
double * getScaleFactor()
ImpedanceLimits * getImpedanceLimits()
double getMaxHwStep(int j)
double posA2E(double ang, int j)
double getMaxUserStep(int j)
double getSaturatedValue(int j, double curr_value, double ref_value)
~axisPositionDirectHelper()
double posE2A(double ang, int j)
double getMaximumTorque(int jnt)
double getNewtonsToSensor(int jnt)
int getTorqueSensorChan(int jnt)
int getTorqueSensorId(int jnt)
void printFirmwareVersions()
void printMessagePleaseUpgradeFirmware()
void printMessagePleaseUpgradeiCub()
void printMessageSevereError()
bool checkFirmwareVersions()
firmwareVersionHelper(int joints, firmware_info *f_infos, can_protocol_info &protocol)
can_protocol_info icub_protocol
SpeedEstimationParameters getEstimationParameters(int jnt)
The PlxCan motion controller device driver.
double * _motorPwmLimits
current limits
double * _maxTorque
Channel of associated Joint Torque Sensor.
int _timeout
thread polling interval [ms]
std::string * _axisName
number of cycles before timing out
DebugParameters * _debug_params
parameters for speed/acceleration estimation
int _polling_interval
my address
double * _optical_factor
max velocity command for a joint
bool parseImpedanceGroup_NewFormat(yarp::os::Bottle &pidsGroup, ImpedanceParameters vals[])
int * _torqueSensorId
reduction ratio of the optical encoder on motor axis
double * _ktau
bemf compensation gain
double * _ampsToSensor
Newtons to force sensor units conversion factors.
double * _rotToEncoder
angle to encoder conversion factors
double * _zeros
angle to rotor conversion factors
bool parseTrqPidsGroup_OldFormat(yarp::os::Bottle &pidsGroup, int nj, Pid myPid[])
bool setBroadCastMask(yarp::os::Bottle &list, int MASK)
SpeedEstimationParameters * _estim_params
set to true if pwm is limited
unsigned char _my_address
destination addresses
bool parsePosPidsGroup_OldFormat(yarp::os::Bottle &pidsGroup, int nj, Pid myPid[])
unsigned char * _destinations
number of joints/axes/controlled motors
Pid * _tpids
initial gains
std::string * _axisType
axis name
bool fromConfig(yarp::os::Searchable &config)
double * _currentLimits
joint limits, min
double * _angleToEncoder
axis remapping lookup-table
~CanBusMotionControlParameters()
Destructor, with memory deallocation.
double * _maxJntCmdVelocity
max size of a positionDirect step
bool _pwmIsLimited
initial torque gains
double * _bemfGain
impedancel imits
int * _torqueSensorChan
Id of associated Joint Torque Sensor.
int * _velocityShifts
pwm limits
double * _newtonsToSensor
Max torque of a joint.
int * _filterType
motor torque constant
torqueControlUnitsType _torqueControlUnits
ImpedanceParameters * _impedance_params
debug parameters
std::string _networkName
network number
CanBusMotionControlParameters()
Constructor (please make sure you use the constructor to allocate memory).
bool parsePidsGroup_NewFormat(yarp::os::Bottle &pidsGroup, Pid myPid[])
ImpedanceLimits * _impedance_limits
impedance parameters
double * _limitsMax
joint limits, max
int * _velocityTimeout
velocity shifts
bool _torqueControlEnabled
double * _maxStep
velocity shifts
bool parseDebugGroup_NewFormat(yarp::os::Bottle &pidsGroup, DebugParameters vals[])
canbusmotioncontrol : driver for motor control boards on a CAN bus.
virtual bool setInteractionModeRaw(int axis, yarp::dev::InteractionModeEnum mode) override
bool _readDWordArray(int msg, double *out)
reads an array of double words.
virtual bool enablePidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool getTemperatureLimitRaw(int m, double *temp) override
virtual bool setEncoderRaw(int j, double val) override
bool _readByte8(int msg, int axis, int &value)
virtual bool getRefVelocitiesRaw(double *refs) override
virtual bool setRefCurrentsRaw(const double *t) override
bool _writeWord16(int msg, int axis, short s)
to send a Word16.
virtual bool getMotorEncodersTimedRaw(double *v, double *t) override
virtual bool getCurrentImpedanceLimitRaw(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override
bool _readWord16Ex(int msg, int axis, short &value1, short &value2)
virtual bool getEncoderAccelerationsRaw(double *accs) override
virtual bool setRefSpeedsRaw(const double *spds) override
virtual bool getMotorEncoderRaw(int m, double *v) override
icubCanProto_controlmode_t from_modevocab_to_modeint(int modevocab)
virtual bool setPrintFunction(int(*f)(const char *fmt,...))
IControlDebug Interface.
void setServerLogger(const IServerLogger *server)
virtual bool getRemoteVariableRaw(std::string key, yarp::os::Bottle &val) override
virtual bool getNominalCurrentRaw(int m, double *val) override
int from_interactionint_to_interactionvocab(unsigned char interactionint)
virtual bool setPidReferenceRaw(const PidControlTypeEnum &pidtype, int j, double ref) override
cmd is a SingleAxis poitner with 1 double arg
virtual bool getCurrentRaw(int j, double *val) override
virtual bool setRefAccelerationRaw(int j, double acc) override
virtual bool getEncoderRaw(int j, double *v) override
virtual bool setParameterRaw(int j, unsigned int type, double value)
axisPositionDirectHelper * _axisPositionDirectHelper
firmwareVersionHelper * _firmwareVersionHelper
virtual bool getPidRaw(const PidControlTypeEnum &pidtype, int j, Pid *pid) override
virtual bool stopRaw() override
virtual bool getEncodersRaw(double *encs) override
virtual bool getLimitsRaw(int axis, double *min, double *max) override
virtual ~CanBusMotionControl()
Destructor.
virtual bool disableAmpRaw(int j) override
virtual bool setTorqueSource(int axis, char board_id, char board_chan)
virtual bool getRefVelocityRaw(const int joint, double *ref) override
virtual bool setInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
virtual bool setMotorEncoderCountsPerRevolutionRaw(int m, const double cpr) override
virtual bool setPidOffsetRaw(const PidControlTypeEnum &pidtype, int j, double v) override
virtual bool getTorqueRangesRaw(double *min, double *max) override
virtual bool getDutyCyclesRaw(double *v) override
bool helper_getTrqPidRaw(int j, Pid *pid)
virtual bool getRefTorqueRaw(int j, double *ref_trq) override
TORQUE CONTROL INTERFACE RAW.
virtual bool setRefTorquesRaw(const double *ref_trqs) override
cmd is an array of double (LATER: to be optimized).
bool _writeWord16Ex(int msg, int axis, short s1, short s2, bool check=true)
two shorts in a single Can message (both must belong to the same control card).
virtual bool setPositionsRaw(const int n_joint, const int *joints, const double *refs) override
bool helper_setTrqPidRaw(int j, const Pid &pid)
virtual bool getPidOutputRaw(const PidControlTypeEnum &pidtype, int j, double *out) override
speedEstimationHelper * _speedEstimationHelper
virtual bool resetEncodersRaw() override
yarp::dev::DeviceDriver * createDevice(yarp::os::Searchable &config)
virtual bool saveBootMemory()
bool _writeDWord(int msg, int axis, int value)
write a DWord
CanBusMotionControl()
Default constructor.
virtual bool getImpedanceOffsetRaw(int j, double *offs) override
bool _readWord16(int msg, int axis, short &value)
virtual yarp::os::Stamp getLastInputStamp() override
virtual bool getEncoderSpeedsRaw(double *spds) override
virtual bool setMotorEncodersRaw(const double *vals) override
bool helper_getVelPidRaw(int j, Pid *pid)
virtual bool calibrationDoneRaw(int j) override
axisTorqueHelper * _axisTorqueHelper
virtual bool getMotorEncoderAccelerationRaw(int m, double *spds) override
virtual bool getControlModesRaw(int *v) override
virtual bool setVelLimitsRaw(int axis, double min, double max) override
double * _max_vel_jnt_cmd
virtual bool setMaxCurrentRaw(int j, double val) override
virtual bool checkMotionDoneRaw(bool *flag) override
ret is a pointer to a bool
virtual bool getVelLimitsRaw(int axis, double *min, double *max) override
virtual bool getCurrentsRaw(double *vals) override
bool getFilterTypeRaw(int j, int *type)
virtual bool getCurrentRangeRaw(int j, double *min, double *max) override
bool open(const CanBusMotionControlParameters &par)
Open the device driver.
virtual bool getInteractionModesRaw(int n_joints, int *joints, yarp::dev::InteractionModeEnum *modes) override
virtual bool getRefPositionsRaw(double *refs) override
bool ENABLED(int axis)
helper function to check whether the enabled flag is on or off.
bool helper_setPosPidRaw(int j, const Pid &pid)
virtual bool setControlModesRaw(const int n_joint, const int *joints, int *modes) override
virtual bool getPidReferencesRaw(const PidControlTypeEnum &pidtype, double *refs) override
virtual bool setImpedanceRaw(int j, double stiff, double damp) override
virtual bool setPidErrorLimitRaw(const PidControlTypeEnum &pidtype, int j, double limit) override
virtual bool getEncoderTimedRaw(int j, double *v, double *t) override
virtual bool getCurrentRangesRaw(double *min, double *max) override
virtual bool getMotorEncoderTimedRaw(int m, double *v, double *t) override
virtual bool getJointTypeRaw(int axis, yarp::dev::JointTypeEnum &type) override
std::recursive_mutex _mutex
axisImpedanceHelper * _axisImpedanceHelper
virtual bool getMotorEncoderSpeedRaw(int m, double *sp) override
virtual bool setTemperatureLimitRaw(int m, const double temp) override
virtual bool getEncodersTimedRaw(double *v, double *t) override
virtual bool resetMotorEncodersRaw() override
virtual bool getPidErrorsRaw(const PidControlTypeEnum &pidtype, double *errs) override
double * _ref_command_positions
virtual bool getInteractionModeRaw(int axis, yarp::dev::InteractionModeEnum *mode) override
virtual bool setImpedanceOffsetRaw(int j, double offs) override
virtual bool getControlModeRaw(int j, int *v) override
virtual bool getRefCurrentsRaw(double *t) override
bool helper_getPosPidRaw(int j, Pid *pid)
bool _readWord16Array(int msg, double *out)
reads an array.
virtual bool getPowerSupplyVoltageRaw(int j, double *val) override
virtual bool loadBootMemory()
virtual bool getTargetPositionRaw(const int joint, double *ref) override
virtual bool getNumberOfMotorEncodersRaw(int *num) override
bool helper_setCurPidRaw(int j, const Pid &pid)
int from_modeint_to_modevocab(unsigned char modeint)
bool _writeByteWords16(int msg, int axis, unsigned char value, short s1, short s2, short s3)
virtual bool getAxes(int *ax) override
POSITION CONTROL INTERFACE RAW.
virtual bool setMotorEncoderRaw(int m, const double val) override
virtual bool getRefCurrentRaw(int j, double *t) override
virtual bool getRefAccelerationRaw(int j, double *acc) override
cmd is an array of double (LATER: to be optimized).
virtual bool setPWMLimitRaw(int j, const double val) override
bool _writeNone(int msg, int axis)
WRITE functions sends a message without parameters.
bool setBCastMessages(int axis, unsigned int v)
sets the broadcast policy for a given board (don't need to be called twice).
virtual bool calibrateAxisWithParamsRaw(int axis, unsigned int type, double p1, double p2, double p3) override
virtual bool getRefSpeedsRaw(double *spds) override
cmd is an array of double (LATER: to be optimized).
virtual bool close(void)
Closes the device driver.
virtual bool setPositionRaw(int j, double ref) override
virtual bool open(yarp::os::Searchable &config)
Open the device driver and start communication with the hardware.
bool _readDWord(int msg, int axis, int &value)
READ functions sends a message and gets a dword back.
virtual bool setDebugReferencePositionRaw(int j, double value)
virtual bool getPWMLimitRaw(int j, double *val) override
unsigned char from_interactionvocab_to_interactionint(int interactionvocab)
virtual bool getAxisNameRaw(int axis, std::string &name) override
IAxisInfo.
virtual bool positionMoveRaw(int j, double ref) override
virtual bool setPidErrorLimitsRaw(const PidControlTypeEnum &pidtype, const double *limits) override
virtual bool setRefCurrentRaw(int j, double t) override
virtual bool getEncoderAccelerationRaw(int j, double *spds) override
virtual bool getTorqueRangeRaw(int j, double *min, double *max) override
virtual bool threadInit()
virtual bool setPidReferencesRaw(const PidControlTypeEnum &pidtype, const double *refs) override
cmd is an array of double (LATER: to be optimized).
virtual bool setPidRaw(const PidControlTypeEnum &pidtype, int j, const Pid &pid) override
double * _last_position_move_time
virtual bool setPeakCurrentRaw(int m, const double val) override
virtual bool setLimitsRaw(int axis, double min, double max) override
virtual bool getFirmwareVersionRaw(int axis, can_protocol_info const &icub_interface_protocol, firmware_info *info)
virtual bool getTemperatureRaw(int m, double *val) override
virtual bool getDutyCycleRaw(int j, double *v) override
virtual bool relativeMoveRaw(int j, double delta) override
virtual bool getNumberOfMotorsRaw(int *m) override
IMotor.
virtual bool getDebugParameterRaw(int j, unsigned int index, double *value)
virtual bool getRefDutyCycleRaw(int j, double *v) override
virtual bool getMaxCurrentRaw(int j, double *val) override
int _filter
filter for recurrent messages.
virtual bool getRefDutyCyclesRaw(double *v) override
virtual bool isPidEnabledRaw(const PidControlTypeEnum &pidtype, int j, bool *enabled)
virtual bool getMotorTorqueParamsRaw(int j, MotorTorqueParameters *params) override
virtual bool getMotorEncodersRaw(double *encs) override
virtual bool setRefDutyCyclesRaw(const double *v) override
virtual bool getMotorEncoderSpeedsRaw(double *spds) override
virtual bool getRefAccelerationsRaw(double *accs) override
cmd is an array of double (LATER: to be optimized).
virtual bool getMotorEncoderCountsPerRevolutionRaw(int m, double *cpr) override
virtual bool velocityMoveRaw(int j, double sp) override
Velocity control interface raw.
bool setVelocityShiftRaw(int j, double val)
bool setFilterTypeRaw(int j, int type)
virtual bool getPidsRaw(const PidControlTypeEnum &pidtype, Pid *pids) override
virtual bool getPeakCurrentRaw(int m, double *val) override
virtual bool getTargetPositionsRaw(double *refs) override
bool setVelocityTimeoutRaw(int j, double val)
virtual bool resetEncoderRaw(int j) override
virtual bool getRemoteVariablesListRaw(yarp::os::Bottle *listOfKeys) override
virtual bool setCalibrationParametersRaw(int j, const CalibrationParameters ¶ms) override
bool helper_setVelPidRaw(int j, const Pid &pid)
bool setSpeedEstimatorShiftRaw(int j, double jnt_speed, double jnt_acc, double mot_speed, double mot_acc)
virtual bool setRefTorqueRaw(int j, double ref_trq) override
cmd is a SingleAxis poitner with 1 double arg
virtual bool setControlModeRaw(const int j, const int mode) override
double * _ref_command_speeds
virtual bool getParameterRaw(int j, unsigned int type, double *value)
virtual bool getPWMRaw(int j, double *val) override
bool _writeByte8(int msg, int axis, int value)
write a byte
virtual bool setDebugParameterRaw(int j, unsigned int index, double value)
virtual bool getAmpStatusRaw(int *st) override
virtual bool getRefTorquesRaw(double *ref_trqs) override
cmd is an array of double (LATER: to be optimized).
virtual bool getPidOutputsRaw(const PidControlTypeEnum &pidtype, double *outs) override
virtual bool getPidErrorRaw(const PidControlTypeEnum &pidtype, int j, double *err) override
virtual bool setRemoteVariableRaw(std::string key, const yarp::os::Bottle &val) override
virtual bool setRefAccelerationsRaw(const double *accs) override
virtual bool getRefPositionRaw(const int joint, double *ref) override
virtual bool getPidReferenceRaw(const PidControlTypeEnum &pidtype, int j, double *ref) override
bool helper_getCurPidRaw(int j, Pid *pid)
virtual bool getImpedanceRaw(int j, double *stiff, double *damp) override
IMPEDANCE CONTROL INTERFACE RAW.
virtual bool getPidErrorLimitsRaw(const PidControlTypeEnum &pidtype, double *limits) override
virtual bool setRefSpeedRaw(int j, double sp) override
virtual bool getTorqueRaw(int j, double *trq) override
cmd is a SingleAxis pointer with 1 double arg
virtual bool resetMotorEncoderRaw(int m) override
virtual bool getDebugReferencePositionRaw(int j, double *value)
virtual bool getTemperaturesRaw(double *vals) override
bool _MCtorqueControlEnabled
virtual bool setEncodersRaw(const double *vals) override
virtual bool getEncoderSpeedRaw(int j, double *sp) override
virtual bool disablePidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool getTorquesRaw(double *trqs) override
cmd is an array of double (LATER: to be optimized).
virtual bool setMotorTorqueParamsRaw(int j, const MotorTorqueParameters params) override
virtual bool resetPidRaw(const PidControlTypeEnum &pidtype, int j) override
virtual bool setRefDutyCycleRaw(int j, double v) override
short S_16(double x) const
virtual bool getPidErrorLimitRaw(const PidControlTypeEnum &pidtype, int j, double *limit) override
virtual bool setPidsRaw(const PidControlTypeEnum &pidtype, const Pid *pids) override
virtual bool enableAmpRaw(int j) override
virtual void threadRelease()
virtual bool getRefSpeedRaw(int j, double *ref) override
virtual bool setNominalCurrentRaw(int m, const double val) override
virtual bool getMotorEncoderAccelerationsRaw(double *accs) override
Interface for a client that logs status messages to a server.
Interface for a factory device; a device that can create objects.
Interface for a server that logs status messages.
virtual bool log(const std::string &key, const yarp::os::Value &data)=0
Get a reference to log server data.
double sat(const double val, const double min, const double max)
Copyright (C) 2008 RobotCub Consortium.
SpeedEstimationParameters()
double jnt_Vel_estimator_shift
double mot_Acc_estimator_shift
double mot_Vel_estimator_shift
double jnt_Acc_estimator_shift
can_protocol_info can_protocol