yarp-devices
Loading...
Searching...
No Matches
TechnosoftIposExternal.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __TECHNOSOFT_IPOS_EXTERNAL_HPP__
4#define __TECHNOSOFT_IPOS_EXTERNAL_HPP__
5
6#include <atomic>
7#include <mutex>
8
9#include "TechnosoftIposBase.hpp"
10#include "TrapezoidalTrajectory.hpp"
11
12namespace roboticslab
13{
14
20{
21public:
22 using TechnosoftIposBase::TechnosoftIposBase;
23
24 // --------- DeviceDriver declarations. Implementation in DeviceDriverImpl.cpp ---------
25
26 bool open(yarp::os::Searchable & config) override;
27 bool close() override;
28
29 // --------- ICanBusSharer declarations. Implementation in ICanBusSharerImpl.cpp ---------
30
31 bool initialize() override;
32 bool synchronize(double timestamp) override;
33
34 // --------- IControlModeRaw declarations. Implementation in IControlModeRawImpl.cpp ---------
35
36#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
37 return_t getAvailableControlModesRaw(int j, std::vector<yarp::dev::SelectableControlModeEnum> & avail) override;
38 return_t getControlModeRaw(int j, yarp::dev::ControlModeEnum & mode) override;
39 return_t setControlModeRaw(int j, yarp::dev::SelectableControlModeEnum mode) override;
40#else
41 return_t getControlModeRaw(int j, int * mode) override;
42 return_t setControlModeRaw(int j, int mode) override;
43#endif
44
45 // ---------- IImpedanceControlRaw declarations. Implementation in IImpedanceControlRawImpl.cpp ----------
46
47 return_t getImpedanceRaw(int j, double * stiffness, double * damping) override;
48 return_t setImpedanceRaw(int j, double stiffness, double damping) override;
49 return_t setImpedanceOffsetRaw(int j, double offset) override;
50 return_t getImpedanceOffsetRaw(int j, double * offset) override;
51 return_t getCurrentImpedanceLimitRaw(int j, double * min_stiff, double * max_stiff, double * min_damp, double * max_damp) override;
52
53 // ---------- IInteractionModeRaw declarations. Implementation in IInteractionModeRawImpl.cpp ----------
54
55#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
56 return_t getInteractionModeRaw(int axis, yarp::dev::InteractionModeEnum & mode) override;
57#else
58 return_t getInteractionModeRaw(int axis, yarp::dev::InteractionModeEnum * mode) override;
59#endif
60 return_t setInteractionModeRaw(int axis, yarp::dev::InteractionModeEnum mode) override;
61
62 // --------- IPidControlRaw declarations. Implementation in IPidControlRawImpl.cpp ---------
63
64#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
65 return_t getAvailablePidsRaw(int j, std::vector<yarp::dev::PidControlTypeEnum> & avail) override;
66#endif
67 return_t setPidRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, const yarp::dev::Pid & pid) override;
68 return_t setPidReferenceRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double ref) override;
69 return_t setPidErrorLimitRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double limit) override;
70 return_t getPidErrorRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * err) override;
71 return_t getPidOutputRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * out) override;
72 return_t getPidRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, yarp::dev::Pid * pid) override;
73#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
74 return_t getPidOffsetRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double & v) override;
75 return_t getPidFeedforwardRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double & v) override;
76 return_t getPidExtraInfoRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, yarp::dev::PidExtraInfo & info) override;
77 return_t getPidExtraInfosRaw(const yarp::dev::PidControlTypeEnum & pidtype, std::vector<yarp::dev::PidExtraInfo> & info) override;
78#endif
79 return_t getPidReferenceRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * ref) override;
80 return_t getPidErrorLimitRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double * limit) override;
81 return_t resetPidRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
82 return_t disablePidRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
83 return_t enablePidRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j) override;
84 return_t setPidOffsetRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double v) override;
85#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
86 return_t setPidFeedforwardRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, double v) override;
87 return_t isPidEnabledRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, bool & enabled) override;
88#else
89 return_t isPidEnabledRaw(const yarp::dev::PidControlTypeEnum & pidtype, int j, bool * enabled) override;
90#endif
91
92 // ------- IPositionControlRaw declarations. Implementation in IPositionControlRawImpl.cpp -------
93
94 return_t positionMoveRaw(int j, double ref) override;
95 return_t relativeMoveRaw(int j, double delta) override;
96#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
97 return_t checkMotionDoneRaw(int j, bool & flag) override;
98 return_t setTrajSpeedRaw(int j, double sp) override;
99 return_t setTrajAccelerationRaw(int j, double acc) override;
100 return_t getTrajSpeedRaw(int j, double * ref) override;
101 return_t getTrajAccelerationRaw(int j, double * acc) override;
102#else
103 return_t checkMotionDoneRaw(int j, bool * flag) override;
104 return_t setRefSpeedRaw(int j, double sp) override;
105 return_t setRefAccelerationRaw(int j, double acc) override;
106 return_t getRefSpeedRaw(int j, double * ref) override;
107 return_t getRefAccelerationRaw(int j, double * acc) override;
108#endif
109 return_t stopRaw(int j) override;
110 return_t getTargetPositionRaw(int joint, double * ref) override;
111
112 // ------- IPositionDirectRaw declarations. Implementation in IPositionDirectRawImpl.cpp -------
113
114 return_t setPositionRaw(int j, double ref) override;
115 return_t getRefPositionRaw(int joint, double * ref) override;
116
117 // ------- IRemoteVariablesRaw declarations. Implementation in IRemoteVariablesRawImpl.cpp -------
118
119 return_t getRemoteVariableRaw(std::string key, yarp::os::Bottle & val) override;
120 return_t setRemoteVariableRaw(std::string key, const yarp::os::Bottle & val) override;
121 return_t getRemoteVariablesListRaw(yarp::os::Bottle * listOfKeys) override;
122
123 // --------- IVelocityControlRaw declarations. Implementation in IVelocityControlRawImpl.cpp ---------
124
125 return_t velocityMoveRaw(int j, double sp) override;
126#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
127 return_t getTargetVelocityRaw(int joint, double * vel) override;
128#else
129 return_t getRefVelocityRaw(int joint, double * vel) override;
130#endif
131
132private:
133 void interpretModesOfOperation(std::int8_t modesOfOperation) override;
134 void onPositionLimitTriggered() override;
135 void reset() override;
136
137 yarp::conf::vocab32_t initialInteractionMode {0};
138 std::atomic<yarp::dev::InteractionModeEnum> actualInteractionMode {yarp::dev::InteractionModeEnum::VOCAB_IM_UNKNOWN};
139
140 std::mutex pidMutex;
141
142 yarp::dev::Pid * activePid {nullptr};
143 yarp::dev::Pid positionPid;
144 yarp::dev::Pid impedancePid;
145
146 double positionReference {0.0};
147 double errorLimit {0.0};
148 double proportionalError {0.0};
149 double integralError {0.0};
150
151 TrapezoidalTrajectory trajectory;
152
153 std::atomic<bool> enableCsv {false};
154};
155
156} // namespace roboticslab
157
158#endif // __TECHNOSOFT_IPOS_EXTERNAL_HPP__
Base class for all proxied TechnosoftIpos implementations.
Definition TechnosoftIposBase.hpp:79
A TechnosoftIposBase implementation using an external (TEO board) PID.
Definition TechnosoftIposExternal.hpp:20
bool synchronize(double timestamp) override
Perform synchronized action on CAN master's request.
Definition ICanBusSharerImpl.cpp:17
bool initialize() override
Perform CAN node initialization.
Definition ICanBusSharerImpl.cpp:9
Definition TrapezoidalTrajectory.hpp:17
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6