yarp-devices
Loading...
Searching...
No Matches
CanBusBroker.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CAN_BUS_BROKER_HPP__
4#define __CAN_BUS_BROKER_HPP__
5
6#include <vector>
7
8#include <yarp/conf/version.h>
9
10#include <yarp/dev/ControlBoardInterfaces.h>
11#include <yarp/dev/MultipleAnalogSensorsInterfaces.h>
12
13#include "DeviceMapper.hpp"
14#include "SingleBusBroker.hpp"
15#include "SyncPeriodicThread.hpp"
16#include "CanBusBroker_ParamsParser.h"
17
18#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
19#define CHECK_JOINT(j) do { int n = deviceMapper.getControlledAxes(); if ((j) < 0 || (j) > n - 1) return yarp::dev::ReturnValue_error_input_out_of_bounds; } while (0)
20#else
21#define CHECK_JOINT(j) do { int n = deviceMapper.getControlledAxes(); if ((j) < 0 || (j) > n - 1) return false; } while (0)
22#endif
23
44class CanBusBroker : public yarp::dev::DeviceDriver,
46 // control board interfaces
47 public yarp::dev::IAmplifierControl,
48 public yarp::dev::IAxisInfo,
49 public yarp::dev::IControlCalibration,
50 public yarp::dev::IControlLimits,
51 public yarp::dev::IControlMode,
52 public yarp::dev::ICurrentControl,
53 public yarp::dev::IEncodersTimed,
54 public yarp::dev::IImpedanceControl,
55 public yarp::dev::IInteractionMode,
56#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
57 public yarp::dev::IJointBrake,
58#endif
59 public yarp::dev::IJointFault,
60 public yarp::dev::IMotor,
61 public yarp::dev::IMotorEncoders,
62 public yarp::dev::IPidControl,
63 public yarp::dev::IPositionControl,
64 public yarp::dev::IPositionDirect,
65 public yarp::dev::IPWMControl,
66 public yarp::dev::IRemoteVariables,
67 public yarp::dev::ITorqueControl,
68 public yarp::dev::IVelocityControl,
69#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
70 public yarp::dev::IVelocityDirect,
71#endif
72 // multiple analog sensors interfaces
73 public yarp::dev::IContactLoadCellArrays,
74 public yarp::dev::IEncoderArrays,
75 public yarp::dev::IOrientationSensors,
76 public yarp::dev::IPositionSensors,
77 public yarp::dev::ISixAxisForceTorqueSensors,
78 public yarp::dev::ISkinPatches,
79 public yarp::dev::ITemperatureSensors,
80 public yarp::dev::IThreeAxisGyroscopes,
81 public yarp::dev::IThreeAxisLinearAccelerometers,
82 public yarp::dev::IThreeAxisMagnetometers
83{
84public:
85#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
86 using return_t = yarp::dev::ReturnValue;
87#else
88 using return_t = bool;
89#endif
90
91 // -------- DeviceDriver declarations. Implementation in DeviceDriverImpl.cpp --------
92
93 bool open(yarp::os::Searchable & config) override;
94 bool close() override;
95
96 // ---------- CONTROL BOARD INTERFACES ----------
97
98 // --------- IAmplifierControl declarations. Implementation in IAmplifierControlImpl.cpp ---------
99
100 return_t enableAmp(int j) override;
101 return_t disableAmp(int j) override;
102 return_t getAmpStatus(int j, int * v) override;
103 return_t getAmpStatus(int * st) override;
104 //return_t getCurrent(int j, double * val) override;
105 //return_t getCurrents(double * vals) override;
106 return_t getMaxCurrent(int j, double * v) override;
107 return_t setMaxCurrent(int j, double v) override;
108 return_t getNominalCurrent(int m, double * val) override;
109 return_t setNominalCurrent(int m, double val) override;
110 return_t getPeakCurrent(int m, double * val) override;
111 return_t setPeakCurrent(int m, double val) override;
112 return_t getPWM(int j, double * val) override;
113 return_t getPWMLimit(int j, double * val) override;
114 return_t setPWMLimit(int j, double val) override;
115 return_t getPowerSupplyVoltage(int j, double * val) override;
116
117 // --------- IAxisInfo declarations. Implementation in IAxisInfoImpl.cpp ---------
118
119 return_t getAxisName(int axis, std::string & name) override;
120 return_t getJointType(int axis, yarp::dev::JointTypeEnum & type) override;
121
122 // --------- IControlCalibration declarations. Implementation in IControlCalibrationImpl.cpp ---------
123
124 return_t calibrateAxisWithParams(int axis, unsigned int type, double p1, double p2, double p3) override;
125 return_t setCalibrationParameters(int axis, const yarp::dev::CalibrationParameters & params) override;
126 return_t calibrationDone(int j) override;
127
128 // --------- IControlLimits declarations. Implementation in IControlLimitsImpl.cpp ---------
129
130#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
131 return_t setPosLimits(int axis, double min, double max) override;
132 return_t getPosLimits(int axis, double * min, double * max) override;
133#else
134 return_t setLimits(int axis, double min, double max) override;
135 return_t getLimits(int axis, double * min, double * max) override;
136#endif
137 return_t setVelLimits(int axis, double min, double max) override;
138 return_t getVelLimits(int axis, double * min, double * max) override;
139
140 // --------- IControlMode declarations. Implementation in IControlModeImpl.cpp ---------
141
142#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
143 return_t getAvailableControlModes(int j, std::vector<yarp::dev::SelectableControlModeEnum> & avail) override;
144 return_t getControlMode(int j, yarp::dev::ControlModeEnum & mode) override;
145 return_t getControlModes(std::vector<yarp::dev::ControlModeEnum> & modes) override;
146 return_t getControlModes(const std::vector<int> & joints, std::vector<yarp::dev::ControlModeEnum> & modes) override;
147 return_t setControlMode(int j, yarp::dev::SelectableControlModeEnum mode) override;
148 return_t setControlModes(const std::vector<int> & joints, const std::vector<yarp::dev::SelectableControlModeEnum> & modes) override;
149 return_t setControlModes(const std::vector<yarp::dev::SelectableControlModeEnum> & modes) override;
150#else
151 return_t getControlMode(int j, int * mode) override;
152 return_t getControlModes(int * modes) override;
153 return_t getControlModes(int n_joint, const int * joints, int * modes) override;
154 return_t setControlMode(int j, const int mode) override;
155 return_t setControlModes(int n_joint, const int * joints, int * modes) override;
156 return_t setControlModes(int * modes) override;
157#endif
158
159 // --------- ICurrentControl declarations. Implementation in ICurrentControlImpl.cpp ---------
160
161 //return_t getNumberOfMotors(int * ax) override;
162 return_t getCurrent(int m, double * curr) override;
163 return_t getCurrents(double * currs) override;
164 return_t getCurrentRange(int m, double * min, double * max) override;
165 return_t getCurrentRanges(double * mins, double * maxs) override;
166 return_t setRefCurrent(int m, double curr) override;
167 return_t setRefCurrents(const double * currs) override;
168 return_t setRefCurrents(int n_motor, const int * motors, const double * currs) override;
169 return_t getRefCurrent(int m, double * curr) override;
170 return_t getRefCurrents(double * currs) override;
171
172 // ---------- IEncoders declarations. Implementation in IEncodersImpl.cpp ----------
173
174#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
175 return_t getAxes(std::size_t & ax) override;
176#else
177 return_t getAxes(int * ax) override;
178#endif
179 return_t resetEncoder(int j) override;
180 return_t resetEncoders() override;
181 return_t setEncoder(int j, double val) override;
182 return_t setEncoders(const double * vals) override;
183 return_t getEncoder(int j, double * v) override;
184 return_t getEncoders(double * encs) override;
185 return_t getEncoderSpeed(int j, double * spd) override;
186 return_t getEncoderSpeeds(double * spds) override;
187 return_t getEncoderAcceleration(int j, double * spds) override;
188 return_t getEncoderAccelerations(double * accs) override;
189
190 // ---------- IEncodersTimed declarations. Implementation in IEncodersImpl.cpp ----------
191
192 return_t getEncoderTimed(int j, double * encs, double * time) override;
193 return_t getEncodersTimed(double * encs, double * times) override;
194
195 // --------- IImpedanceControl declarations. Implementation in IImpedanceControlImpl.cpp ---------
196
197 //return_t getAxes(int * ax) override;
198 return_t getImpedance(int j, double * stiffness, double * damping) override;
199 return_t setImpedance(int j, double stiffness, double damping) override;
200 return_t setImpedanceOffset(int j, double offset) override;
201 return_t getImpedanceOffset(int j, double * offset) override;
202 return_t getCurrentImpedanceLimit(int j, double * min_stiff, double * max_stiff, double * min_damp, double * max_damp) override;
203
204 // -----------IInteractionMode declarations. Implementation in IInteractionModeImpl.cpp --------------
205
206#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
207 return_t getInteractionMode(int axis, yarp::dev::InteractionModeEnum & mode) override;
208 return_t getInteractionModes(std::vector<yarp::dev::InteractionModeEnum> & modes) override;
209 return_t getInteractionModes(const std::vector<int> & joints, std::vector<yarp::dev::InteractionModeEnum> & modes) override;
210 return_t setInteractionMode(int axis, yarp::dev::InteractionModeEnum mode) override;
211 return_t setInteractionModes(const std::vector<yarp::dev::InteractionModeEnum> & modes) override;
212 return_t setInteractionModes(const std::vector<int> & joints, const std::vector<yarp::dev::InteractionModeEnum> & modes) override;
213#else
214 return_t getInteractionMode(int axis, yarp::dev::InteractionModeEnum * mode) override;
215 return_t getInteractionModes(yarp::dev::InteractionModeEnum * modes) override;
216 return_t getInteractionModes(int n_joints, int * joints, yarp::dev::InteractionModeEnum * modes) override;
217 return_t setInteractionMode(int axis, yarp::dev::InteractionModeEnum mode) override;
218 return_t setInteractionModes(yarp::dev::InteractionModeEnum * modes) override;
219 return_t setInteractionModes(int n_joints, int * joints, yarp::dev::InteractionModeEnum * modes) override;
220#endif
221
222#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
223 // --------- IJointBrake declarations. Implementation in IJointBrakeImpl.cpp ---------
224
225 return_t isJointBraked(int j, bool & braked) const override;
226 return_t setManualBrakeActive(int j, bool active) override;
227 return_t setAutoBrakeEnabled(int j, bool enabled) override;
228 return_t getAutoBrakeEnabled(int j, bool & enabled) const override;
229#endif
230
231 // --------- IJointFault declarations. Implementation in IJointFaultImpl.cpp ---------
232
233 return_t getLastJointFault(int j, int & fault, std::string & message) override;
234
235 // --------- IMotor declarations. Implementation in IMotorImpl.cpp ---------
236
237 return_t getNumberOfMotors(int * num) override;
238 return_t getTemperature(int m, double * val) override;
239 return_t getTemperatures(double * vals) override;
240 return_t getTemperatureLimit(int m, double * temp) override;
241 return_t setTemperatureLimit(int m, double temp) override;
242 return_t getGearboxRatio(int m, double * val) override;
243 return_t setGearboxRatio(int m, double val) override;
244
245 // --------- IMotorEncoders declarations. Implementation in IMotorEncodersImpl.cpp ---------
246
247 return_t getNumberOfMotorEncoders(int * num) override;
248 return_t resetMotorEncoder(int m) override;
249 return_t resetMotorEncoders() override;
250 return_t setMotorEncoderCountsPerRevolution(int m, double cpr) override;
251 return_t getMotorEncoderCountsPerRevolution(int m, double * cpr) override;
252 return_t setMotorEncoder(int m, double val) override;
253 return_t setMotorEncoders(const double * vals) override;
254 return_t getMotorEncoder(int m, double * v) override;
255 return_t getMotorEncoders(double * encs) override;
256 return_t getMotorEncoderTimed(int m, double * enc, double * stamp) override;
257 return_t getMotorEncodersTimed(double * encs, double * stamps) override;
258 return_t getMotorEncoderSpeed(int m, double * sp) override;
259 return_t getMotorEncoderSpeeds(double *spds) override;
260 return_t getMotorEncoderAcceleration(int m, double * acc) override;
261 return_t getMotorEncoderAccelerations(double * accs) override;
262
263 // --------- IPidControl declarations. Implementation in IPidControlImpl.cpp ---------
264
265#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
266 return_t getAvailablePids(int j, std::vector<yarp::dev::PidControlTypeEnum> & avail) override;
267#endif
268 return_t setPid(const yarp::dev::PidControlTypeEnum & pidtype, int j, const yarp::dev::Pid & pid) override;
269 return_t setPids(const yarp::dev::PidControlTypeEnum & pidtype, const yarp::dev::Pid * pids) override;
270 return_t setPidReference(const yarp::dev::PidControlTypeEnum & pidtype, int j, double ref) override;
271 return_t setPidReferences(const yarp::dev::PidControlTypeEnum & pidtype, const double * refs) override;
272 return_t setPidErrorLimit(const yarp::dev::PidControlTypeEnum & pidtype, int j, double limit) override;
273 return_t setPidErrorLimits(const yarp::dev::PidControlTypeEnum & pidtype, const double * limits) override;
274 return_t getPidError(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * err) override;
275 return_t getPidErrors(const yarp::dev::PidControlTypeEnum & pidtype, double * errs) override;
276 return_t getPidOutput(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * out) override;
277 return_t getPidOutputs(const yarp::dev::PidControlTypeEnum & pidtype, double * outs) override;
278 return_t getPid(const yarp::dev::PidControlTypeEnum & pidtype, int j, yarp::dev::Pid * pid) override;
279 return_t getPids(const yarp::dev::PidControlTypeEnum & pidtype, yarp::dev::Pid * pids) override;
280#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
281 return_t getPidOffset(const yarp::dev::PidControlTypeEnum & pidtype, int j, double & v) override;
282 return_t getPidFeedforward(const yarp::dev::PidControlTypeEnum & pidtype, int j, double & v) override;
283 return_t getPidExtraInfo(const yarp::dev::PidControlTypeEnum & pidtype, int j, yarp::dev::PidExtraInfo & info) override;
284 return_t getPidExtraInfos(const yarp::dev::PidControlTypeEnum & pidtype, std::vector<yarp::dev::PidExtraInfo> & info) override;
285#endif
286 return_t getPidReference(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * ref) override;
287 return_t getPidReferences(const yarp::dev::PidControlTypeEnum & pidtype, double * refs) override;
288 return_t getPidErrorLimit(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * limit) override;
289 return_t getPidErrorLimits(const yarp::dev::PidControlTypeEnum & pidtype, double * limits) override;
290 return_t resetPid(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
291 return_t disablePid(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
292 return_t enablePid(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
293 return_t setPidOffset(const yarp::dev::PidControlTypeEnum & pidtype, int j, double v) override;
294#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
295 return_t setPidFeedforward(const yarp::dev::PidControlTypeEnum & pidtype, int j, double v) override;
296 return_t isPidEnabled(const yarp::dev::PidControlTypeEnum & pidtype, int j, bool & enabled) override;
297#else
298 return_t isPidEnabled(const yarp::dev::PidControlTypeEnum & pidtype, int j, bool * enabled) override;
299#endif
300
301 // ------- IPositionControl declarations. Implementation in IPositionControlImpl.cpp -------
302
303 //return_t getAxes(std::size_t & ax) override;
304 return_t positionMove(int j, double ref) override;
305 return_t positionMove(const double * refs) override;
306 return_t positionMove(int n_joint, const int * joints, const double * refs) override;
307 return_t relativeMove(int j, double delta) override;
308 return_t relativeMove(const double * deltas) override;
309 return_t relativeMove(int n_joint, const int * joints, const double * deltas) override;
310#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
311 return_t checkMotionDone(int j, bool & flag) override;
312 return_t checkMotionDone(bool & flag) override;
313 return_t checkMotionDone(const std::vector<int> & joints, bool & flag) override;
314 return_t setTrajSpeed(int j, double sp) override;
315 return_t setTrajSpeeds(const double * spds) override;
316 return_t setTrajSpeeds(int n_joint, const int * joints, const double * spds) override;
317 return_t getTrajSpeed(int j, double * ref) override;
318 return_t getTrajSpeeds(double * spds) override;
319 return_t getTrajSpeeds(int n_joint, const int * joints, double * spds) override;
320 return_t setTrajAcceleration(int j, double acc) override;
321 return_t setTrajAccelerations(const double * accs) override;
322 return_t setTrajAccelerations(int n_joint, const int * joints, const double * accs) override;
323 return_t getTrajAcceleration(int j, double * acc) override;
324 return_t getTrajAccelerations(double * accs) override;
325 return_t getTrajAccelerations(int n_joint, const int * joints, double * accs) override;
326#else
327 return_t checkMotionDone(int j, bool * flag) override;
328 return_t checkMotionDone(bool * flag) override;
329 return_t checkMotionDone(int n_joint, const int * joints, bool * flags) override;
330 return_t setRefSpeed(int j, double sp) override;
331 return_t setRefSpeeds(const double * spds) override;
332 return_t setRefSpeeds(int n_joint, const int * joints, const double * spds) override;
333 return_t getRefSpeed(int j, double * ref) override;
334 return_t getRefSpeeds(double * spds) override;
335 return_t getRefSpeeds(int n_joint, const int * joints, double * spds) override;
336 return_t setRefAcceleration(int j, double acc) override;
337 return_t setRefAccelerations(const double * accs) override;
338 return_t setRefAccelerations(int n_joint, const int * joints, const double * accs) override;
339 return_t getRefAcceleration(int j, double * acc) override;
340 return_t getRefAccelerations(double * accs) override;
341 return_t getRefAccelerations(int n_joint, const int * joints, double * accs) override;
342#endif
343 return_t stop(int j) override;
344 return_t stop() override;
345 return_t stop(int n_joint, const int *joints) override;
346 return_t getTargetPosition(int joint, double * ref) override;
347 return_t getTargetPositions(double * refs) override;
348 return_t getTargetPositions(int n_joint, const int * joints, double * refs) override;
349
350 // ------- IPositionDirect declarations. Implementation in IPositionDirectImpl.cpp -------
351
352 //return_t getAxes(std::size_t & ax) override;
353 return_t setPosition(int j, double ref) override;
354 return_t setPositions(const double * refs) override;
355 return_t setPositions(int n_joint, const int * joints, const double * refs) override;
356 return_t getRefPosition(int joint, double * ref) override;
357 return_t getRefPositions(double * refs) override;
358 return_t getRefPositions(int n_joint, const int * joints, double * refs) override;
359
360 // --------- IPWMControl declarations. Implementation in IPWMControlImpl.cpp ---------
361
362 //return_t getNumberOfMotors(int * number) override;
363 return_t setRefDutyCycle(int m, double ref) override;
364 return_t setRefDutyCycles(const double * refs) override;
365 return_t getRefDutyCycle(int m, double * ref) override;
366 return_t getRefDutyCycles(double * refs) override;
367 return_t getDutyCycle(int m, double * val) override;
368 return_t getDutyCycles(double * vals) override;
369
370 // ----------- IRemoteVariables declarations. Implementation in IRemoteVariablesImpl.cpp --------------
371
372 return_t getRemoteVariable(std::string key, yarp::os::Bottle & val) override;
373 return_t setRemoteVariable(std::string key, const yarp::os::Bottle & val) override;
374 return_t getRemoteVariablesList(yarp::os::Bottle * listOfKeys) override;
375
376 // -------- ITorqueControl declarations. Implementation in ITorqueControlImpl.cpp --------
377
378 //return_t getAxes(std::size_t & ax) override;
379 return_t getRefTorque(int j, double * t) override;
380 return_t getRefTorques(double * t) override;
381 return_t setRefTorque(int j, double t) override;
382 return_t setRefTorques(const double * t) override;
383 return_t setRefTorques(int n_joint, const int * joints, const double * t) override;
384 return_t getMotorTorqueParams(int j, yarp::dev::MotorTorqueParameters * params) override;
385 return_t setMotorTorqueParams(int j, const yarp::dev::MotorTorqueParameters params) override;
386 return_t getTorque(int j, double * t) override;
387 return_t getTorques(double * t) override;
388 return_t getTorqueRange(int j, double * min, double * max) override;
389 return_t getTorqueRanges(double * min, double * max) override;
390
391 // --------- IVelocityControl declarations. Implementation in IVelocityControlImpl.cpp ---------
392
393 //return_t getAxes(std::size_t & ax) override;
394 return_t velocityMove(int j, double spd) override;
395 return_t velocityMove(const double * spds) override;
396 return_t velocityMove(int n_joint, const int * joints, const double * spds) override;
397#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
398 return_t getTargetVelocity(int joint, double * vel) override;
399 return_t getTargetVelocities(double * vels) override;
400 return_t getTargetVelocities(int n_joint, const int * joints, double * vels) override;
401#else
402 return_t getRefVelocity(int joint, double * vel) override;
403 return_t getRefVelocities(double * vels) override;
404 return_t getRefVelocities(int n_joint, const int * joints, double * vels) override;
405#endif
406
407 // ---------- IVelocityDirect declarations. Implementation in IVelocityDirectImpl.cpp ---------
408
409#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
410 return_t setRefVelocity(int jnt, double vel) override;
411 return_t setRefVelocity(const std::vector<double> & vels) override;
412 return_t setRefVelocity(const std::vector<int> & jnts, const std::vector<double> & vels) override;
413 return_t getRefVelocity(int jnt, double & vel) override;
414 return_t getRefVelocity(std::vector<double> & vels) override;
415 return_t getRefVelocity(const std::vector<int> & jnts, std::vector<double> & vels) override;
416#endif
417
418 // ---------- MULTIPLE ANALOG SENSORS INTERFACES ----------
419
420 // --------- IContactLoadCellArrays declarations. Implementation in IContactLoadCellArraysImpl.cpp ---------
421
422#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
423 yarp::dev::ReturnValue getNrOfContactLoadCellArrays(std::size_t & num) const override;
424 yarp::dev::MAS_status getContactLoadCellArrayStatus(std::size_t sens_index) const override;
425 yarp::dev::ReturnValue getContactLoadCellArrayName(std::size_t sens_index, std::string & name) const override;
426 yarp::dev::ReturnValue getContactLoadCellArrayMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
427 std::size_t getContactLoadCellArraySize(std::size_t sens_index) const override;
428#else
429 std::size_t getNrOfContactLoadCellArrays() const override;
430 yarp::dev::MAS_status getContactLoadCellArrayStatus(std::size_t sens_index) const override;
431 bool getContactLoadCellArrayName(std::size_t sens_index, std::string & name) const override;
432 bool getContactLoadCellArrayMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
433 std::size_t getContactLoadCellArraySize(std::size_t sens_index) const override;
434#endif
435
436 // --------- IEncoderArrays declarations. Implementation in IEncoderArraysImpl.cpp ---------
437
438#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
439 yarp::dev::ReturnValue getNrOfEncoderArrays(std::size_t & num) const override;
440 yarp::dev::MAS_status getEncoderArrayStatus(std::size_t sens_index) const override;
441 yarp::dev::ReturnValue getEncoderArrayName(std::size_t sens_index, std::string & name) const override;
442 yarp::dev::ReturnValue getEncoderArrayMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
443 std::size_t getEncoderArraySize(std::size_t sens_index) const override;
444#else
445 std::size_t getNrOfEncoderArrays() const override;
446 yarp::dev::MAS_status getEncoderArrayStatus(std::size_t sens_index) const override;
447 bool getEncoderArrayName(std::size_t sens_index, std::string & name) const override;
448 bool getEncoderArrayMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
449 std::size_t getEncoderArraySize(std::size_t sens_index) const override;
450#endif
451
452 // --------- IOrientationSensors declarations. Implementation in IOrientationSensorsImpl.cpp ---------
453
454#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
455 yarp::dev::ReturnValue getNrOfOrientationSensors(std::size_t & num) const override;
456 yarp::dev::MAS_status getOrientationSensorStatus(std::size_t sens_index) const override;
457 yarp::dev::ReturnValue getOrientationSensorName(std::size_t sens_index, std::string & name) const override;
458 yarp::dev::ReturnValue getOrientationSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
459 yarp::dev::ReturnValue getOrientationSensorMeasureAsRollPitchYaw(std::size_t sens_index, yarp::sig::Vector & rpy, double & timestamp) const override;
460#else
461 std::size_t getNrOfOrientationSensors() const override;
462 yarp::dev::MAS_status getOrientationSensorStatus(std::size_t sens_index) const override;
463 bool getOrientationSensorName(std::size_t sens_index, std::string & name) const override;
464 bool getOrientationSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
465 bool getOrientationSensorMeasureAsRollPitchYaw(std::size_t sens_index, yarp::sig::Vector & rpy, double & timestamp) const override;
466#endif
467
468 // --------- IPositionSensors declarations. Implementation in IPositionSensorsImpl.cpp ---------
469
470#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
471 yarp::dev::ReturnValue getNrOfPositionSensors(std::size_t & num) const override;
472 yarp::dev::MAS_status getPositionSensorStatus(std::size_t sens_index) const override;
473 yarp::dev::ReturnValue getPositionSensorName(std::size_t sens_index, std::string & name) const override;
474 yarp::dev::ReturnValue getPositionSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
475 yarp::dev::ReturnValue getPositionSensorMeasure(std::size_t sens_index, yarp::sig::Vector & xyz, double & timestamp) const override;
476#else
477 std::size_t getNrOfPositionSensors() const override;
478 yarp::dev::MAS_status getPositionSensorStatus(std::size_t sens_index) const override;
479 bool getPositionSensorName(std::size_t sens_index, std::string & name) const override;
480 bool getPositionSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
481 bool getPositionSensorMeasure(std::size_t sens_index, yarp::sig::Vector & xyz, double & timestamp) const override;
482#endif
483
484 // --------- ISixAxisForceTorqueSensors declarations. Implementation in ISixAxisForceTorqueSensorsImpl.cpp ---------
485
486#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
487 yarp::dev::ReturnValue getNrOfSixAxisForceTorqueSensors(std::size_t & num) const override;
488 yarp::dev::MAS_status getSixAxisForceTorqueSensorStatus(std::size_t sens_index) const override;
489 yarp::dev::ReturnValue getSixAxisForceTorqueSensorName(std::size_t sens_index, std::string & name) const override;
490 yarp::dev::ReturnValue getSixAxisForceTorqueSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
491 yarp::dev::ReturnValue getSixAxisForceTorqueSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
492#else
493 std::size_t getNrOfSixAxisForceTorqueSensors() const override;
494 yarp::dev::MAS_status getSixAxisForceTorqueSensorStatus(std::size_t sens_index) const override;
495 bool getSixAxisForceTorqueSensorName(std::size_t sens_index, std::string & name) const override;
496 bool getSixAxisForceTorqueSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
497 bool getSixAxisForceTorqueSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
498#endif
499
500 // --------- ISkinPatches declarations. Implementation in ISkinPatchesImpl.cpp ---------
501
502#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
503 yarp::dev::ReturnValue getNrOfSkinPatches(std::size_t & num) const override;
504 yarp::dev::MAS_status getSkinPatchStatus(std::size_t sens_index) const override;
505 yarp::dev::ReturnValue getSkinPatchName(std::size_t sens_index, std::string & name) const override;
506 yarp::dev::ReturnValue getSkinPatchMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
507 std::size_t getSkinPatchSize(std::size_t sens_index) const override;
508#else
509 std::size_t getNrOfSkinPatches() const override;
510 yarp::dev::MAS_status getSkinPatchStatus(std::size_t sens_index) const override;
511 bool getSkinPatchName(std::size_t sens_index, std::string & name) const override;
512 bool getSkinPatchMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
513 std::size_t getSkinPatchSize(std::size_t sens_index) const override;
514#endif
515
516 // --------- ITemperatureSensors declarations. Implementation in ITemperatureSensorsImpl.cpp ---------
517
518#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
519 yarp::dev::ReturnValue getNrOfTemperatureSensors(std::size_t & num) const override;
520 yarp::dev::MAS_status getTemperatureSensorStatus(std::size_t sens_index) const override;
521 yarp::dev::ReturnValue getTemperatureSensorName(std::size_t sens_index, std::string & name) const override;
522 yarp::dev::ReturnValue getTemperatureSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
523 yarp::dev::ReturnValue getTemperatureSensorMeasure(std::size_t sens_index, double & out, double & timestamp) const override;
524 yarp::dev::ReturnValue getTemperatureSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
525#else
526 std::size_t getNrOfTemperatureSensors() const override;
527 yarp::dev::MAS_status getTemperatureSensorStatus(std::size_t sens_index) const override;
528 bool getTemperatureSensorName(std::size_t sens_index, std::string & name) const override;
529 bool getTemperatureSensorFrameName(std::size_t sens_index, std::string & frameName) const override;
530 bool getTemperatureSensorMeasure(std::size_t sens_index, double & out, double & timestamp) const override;
531 bool getTemperatureSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
532#endif
533
534 // --------- IThreeAxisGyroscopes declarations. Implementation in IThreeAxisGyroscopesImpl.cpp ---------
535
536#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
537 yarp::dev::ReturnValue getNrOfThreeAxisGyroscopes(std::size_t & num) const override;
538 yarp::dev::MAS_status getThreeAxisGyroscopeStatus(std::size_t sens_index) const override;
539 yarp::dev::ReturnValue getThreeAxisGyroscopeName(std::size_t sens_index, std::string & name) const override;
540 yarp::dev::ReturnValue getThreeAxisGyroscopeFrameName(std::size_t sens_index, std::string & frameName) const override;
541 yarp::dev::ReturnValue getThreeAxisGyroscopeMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
542#else
543 std::size_t getNrOfThreeAxisGyroscopes() const override;
544 yarp::dev::MAS_status getThreeAxisGyroscopeStatus(std::size_t sens_index) const override;
545 bool getThreeAxisGyroscopeName(std::size_t sens_index, std::string & name) const override;
546 bool getThreeAxisGyroscopeFrameName(std::size_t sens_index, std::string & frameName) const override;
547 bool getThreeAxisGyroscopeMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
548#endif
549
550 // --------- IThreeAxisLinearAccelerometers declarations. Implementation in IThreeAxisLinearAccelerometersImpl.cpp ---------
551
552#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
553 yarp::dev::ReturnValue getNrOfThreeAxisLinearAccelerometers(std::size_t & num) const override;
554 yarp::dev::MAS_status getThreeAxisLinearAccelerometerStatus(std::size_t sens_index) const override;
555 yarp::dev::ReturnValue getThreeAxisLinearAccelerometerName(std::size_t sens_index, std::string & name) const override;
556 yarp::dev::ReturnValue getThreeAxisLinearAccelerometerFrameName(std::size_t sens_index, std::string & frameName) const override;
557 yarp::dev::ReturnValue getThreeAxisLinearAccelerometerMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
558#else
559 std::size_t getNrOfThreeAxisLinearAccelerometers() const override;
560 yarp::dev::MAS_status getThreeAxisLinearAccelerometerStatus(std::size_t sens_index) const override;
561 bool getThreeAxisLinearAccelerometerName(std::size_t sens_index, std::string & name) const override;
562 bool getThreeAxisLinearAccelerometerFrameName(std::size_t sens_index, std::string & frameName) const override;
563 bool getThreeAxisLinearAccelerometerMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
564#endif
565
566 // --------- IThreeAxisMagnetometers declarations. Implementation in IThreeAxisMagnetometersImpl.cpp ---------
567
568#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
569 yarp::dev::ReturnValue getNrOfThreeAxisMagnetometers(std::size_t & num) const override;
570 yarp::dev::MAS_status getThreeAxisMagnetometerStatus(std::size_t sens_index) const override;
571 yarp::dev::ReturnValue getThreeAxisMagnetometerName(std::size_t sens_index, std::string & name) const override;
572 yarp::dev::ReturnValue getThreeAxisMagnetometerFrameName(std::size_t sens_index, std::string & frameName) const override;
573 yarp::dev::ReturnValue getThreeAxisMagnetometerMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
574#else
575 std::size_t getNrOfThreeAxisMagnetometers() const override;
576 yarp::dev::MAS_status getThreeAxisMagnetometerStatus(std::size_t sens_index) const override;
577 bool getThreeAxisMagnetometerName(std::size_t sens_index, std::string & name) const override;
578 bool getThreeAxisMagnetometerFrameName(std::size_t sens_index, std::string & frameName) const override;
579 bool getThreeAxisMagnetometerMeasure(std::size_t sens_index, yarp::sig::Vector & out, double & timestamp) const override;
580#endif
581
582private:
583 roboticslab::DeviceMapper deviceMapper;
584
585 std::vector<yarp::dev::PolyDriver *> busDevices;
586 std::vector<yarp::dev::PolyDriver *> nodeDevices;
587 std::vector<roboticslab::SingleBusBroker *> brokers;
588
589 roboticslab::SyncPeriodicThread * syncThread {nullptr};
590};
591
592#endif // __CAN_BUS_BROKER_HPP__
Definition CanBusBroker_ParamsParser.h:43
CAN-oriented control board that implements all YARP motor interfaces.
Definition CanBusBroker.hpp:83
Exposes raw subdevice interface handles on a per-axis manner.
Definition DeviceMapper.hpp:69
Periodic SYNC signal emitter.
Definition SyncPeriodicThread.hpp:29