kinematics-dynamics
Loading...
Searching...
No Matches
ICartesianControl.h
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __I_CARTESIAN_CONTROL__
4#define __I_CARTESIAN_CONTROL__
5
6#include <algorithm> // std::all_of
7#include <map>
8#include <vector>
9
10#include <yarp/os/Vocab.h>
11#include <yarp/dev/ReturnValue.h>
12
13#include <ICartesianSolver.h>
14
15namespace roboticslab
16{
17
22{
23public:
29 enum class Vocabs
30 {
31 OK = yarp::os::createVocab32('o','k'),
32 FAILED = yarp::os::createVocab32('f','a','i','l'),
33 SET = yarp::os::createVocab32('s','e','t'),
34 GET = yarp::os::createVocab32('g','e','t'),
35 NOT_SET = yarp::os::createVocab32('n','s','e','t')
36 };
37
43 enum class RPC
44 {
45 STATE = yarp::os::createVocab32('s','t','a','t'),
46 INV = yarp::os::createVocab32('i','n','v'),
47 MOVEJ = yarp::os::createVocab32('m','o','v','j'),
48 MOVEL = yarp::os::createVocab32('m','o','v','l'),
49 MOVEV = yarp::os::createVocab32('m','o','v','v'),
50 GCMP = yarp::os::createVocab32('g','c','m','p'),
51 FORCE = yarp::os::createVocab32('f','o','r','c'),
52 STOP = yarp::os::createVocab32('s','t','o','p'),
53 TOOL = yarp::os::createVocab32('t','o','o','l'),
54 ACT = yarp::os::createVocab32('a','c','t')
55 };
56
62 enum class Streaming
63 {
64 POSE = yarp::os::createVocab32('p','o','s','e'),
65 TWIST = yarp::os::createVocab32('t','w','s','t'),
66 WRENCH = yarp::os::createVocab32('w','r','n','c')
67 };
68
74 enum class Mode
75 {
76 NONE = yarp::os::createVocab32('n','c','t','l'),
77 MOVEJ = yarp::os::createVocab32('m','o','v','j'),
78 MOVEL = yarp::os::createVocab32('m','o','v','l'),
79 MOVEV = yarp::os::createVocab32('m','o','v','v'),
80 GCMP = yarp::os::createVocab32('g','c','m','p'),
81 FORCE = yarp::os::createVocab32('f','o','r','c')
82 };
83
89 enum class Actuator
90 {
91 NONE = yarp::os::createVocab32('a','c','n'),
92 CLOSE = yarp::os::createVocab32('a','c','c','g'),
93 OPEN = yarp::os::createVocab32('a','c','o','g'),
94 STOP = yarp::os::createVocab32('a','c','s','g'),
95 GENERIC = yarp::os::createVocab32('a','c','g')
96 };
97
103 enum class Config
104 {
105 GAIN = yarp::os::createVocab32('c','p','c','g'),
106 TRAJ_DURATION = yarp::os::createVocab32('c','p','t','d'),
107 TRAJ_REF_SPD = yarp::os::createVocab32('c','p','t','s'),
108 TRAJ_REF_ACC = yarp::os::createVocab32('c','p','t','a'),
109 CMC_PERIOD = yarp::os::createVocab32('c','p','c','p'),
110 FRAME = yarp::os::createVocab32('c','p','f'),
111 STREAMING_CMD = yarp::os::createVocab32('c','p','s','c')
112 };
113
120 {
121 std::vector<double> x;
123 double timestamp;
124 double duration;
125 float progress;
126 bool success;
127 };
128
130 virtual ~ICartesianControl() = default;
131
132 //--------------------- RPC commands ---------------------
133
152 virtual yarp::dev::ReturnValue getState(ControllerState & state) = 0;
153
166 virtual yarp::dev::ReturnValue solvePose(const std::vector<double> & xd, std::vector<double> & q) = 0;
167
180 virtual yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) = 0;
181
193 virtual yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) = 0;
194
206 virtual yarp::dev::ReturnValue moveVelocity(const std::vector<double> & xdotd) = 0;
207
215 virtual yarp::dev::ReturnValue gravityCompensation() = 0;
216
228 virtual yarp::dev::ReturnValue forceControl(const std::vector<double> & fd) = 0;
229
237 virtual yarp::dev::ReturnValue stopControl() = 0;
238
250 virtual yarp::dev::ReturnValue changeTool(const std::vector<double> & x) = 0;
251
261 virtual yarp::dev::ReturnValue actuateTool(Actuator command) = 0;
262
265 //--------------------- Streaming commands ---------------------
266
286 virtual void pose(const std::vector<double> & x) = 0;
287
297 virtual void twist(const std::vector<double> & xdot) = 0;
298
307 virtual void wrench(const std::vector<double> & w) = 0;
308
311 //--------------------- Configuration accessors ---------------------
312
332 virtual yarp::dev::ReturnValue setParameter(Config vocab, double value) = 0;
333
344 virtual yarp::dev::ReturnValue getParameter(Config vocab, double * value) = 0;
345
355 virtual yarp::dev::ReturnValue setParameters(const std::map<Config, double> & params) = 0;
356
366 virtual yarp::dev::ReturnValue getParameters(std::map<Config, double> & params) = 0;
367
370#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
371 [[deprecated("use `ICartesianControl::getState` instead")]]
372 virtual bool stat(std::vector<double> & x, int * state = nullptr, double * timestamp = nullptr)
373 {
374 ControllerState controllerState;
375 auto ret = getState(controllerState);
376 x = controllerState.x;
377 if (state != nullptr) *state = static_cast<int>(controllerState.mode);
378 if (timestamp != nullptr) *timestamp = controllerState.timestamp;
379 return ret;
380 }
381
382 [[deprecated("use `ICartesianControl::solvePose` instead")]]
383 virtual bool inv(const std::vector<double> & xd, std::vector<double> & q)
384 { return solvePose(xd, q); }
385
386 [[deprecated("use `ICartesianControl::moveJoint` instead")]]
387 virtual bool movj(const std::vector<double> & xd)
388 { return moveJoint(xd); }
389
390 [[deprecated("use `ICartesianControl::getState and moveJoint` instead")]]
391 virtual bool relj(const std::vector<double> & xd)
392 { return false; }
393
394 [[deprecated("use `ICartesianControl::moveLinear` instead")]]
395 virtual bool movl(const std::vector<double> & xd)
396 { return moveLinear(xd); }
397
398 [[deprecated("use `ICartesianControl::moveVelocity` instead")]]
399 virtual bool movv(const std::vector<double> & xdotd)
400 { return moveVelocity(xdotd); }
401
402 [[deprecated("use `ICartesianControl::gravityCompensation` instead")]]
403 virtual bool gcmp()
404 { return gravityCompensation(); }
405
406 [[deprecated("use `ICartesianControl::forceControl` instead")]]
407 virtual bool forc(const std::vector<double> & fd)
408 { return forceControl(fd); }
409
410 [[deprecated("use `ICartesianControl::getState` instead")]]
411 virtual bool wait(double timeout = 0.0)
412 { return false; }
413
414 [[deprecated("use `ICartesianControl::changeTool` instead")]]
415 virtual bool tool(const std::vector<double> & x)
416 { return changeTool(x); }
417
418 [[deprecated("use `ICartesianControl::Actuator` signature instead")]]
419 virtual bool act(int command)
420 { return actuateTool(static_cast<Actuator>(command)); }
421
422 [[deprecated("use `ICartesianControl::Config` signature instead")]]
423 virtual bool setParameter(int vocab, double value)
424 { return setParameter(static_cast<Config>(vocab), value); }
425
426 [[deprecated("use `ICartesianControl::Config` signature instead")]]
427 virtual bool getParameter(int vocab, double * value)
428 { return getParameter(static_cast<Config>(vocab), value); }
429
430 [[deprecated("use `ICartesianControl::Config` signature instead")]]
431 virtual bool setParameters(const std::map<int, double> & params)
432 { return std::all_of(params.begin(), params.end(), [this](const auto & kv) { return setParameter(static_cast<Config>(kv.first), kv.second); }); }
433
434 [[deprecated("use `ICartesianControl::Config` signature instead")]]
435 virtual bool getParameters(std::map<int, double> & params)
436 { return std::all_of(params.begin(), params.end(), [this](auto & kv) { return getParameter(static_cast<Config>(kv.first), &kv.second); }); }
437#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
438};
439
440} // namespace roboticslab
441
442
443#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
444[[deprecated("use `ICartesianControl::Vocabs::OK` instead")]]
445constexpr auto VOCAB_CC_OK = static_cast<int>(roboticslab::ICartesianControl::Vocabs::OK);
446
447[[deprecated("use `ICartesianControl::Vocabs::FAILED` instead")]]
448constexpr auto VOCAB_CC_FAILED = static_cast<int>(roboticslab::ICartesianControl::Vocabs::FAILED);
449
450[[deprecated("use `ICartesianControl::Vocabs::SET` instead")]]
451constexpr auto VOCAB_CC_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::SET);
452
453[[deprecated("use `ICartesianControl::Vocabs::GET` instead")]]
454constexpr auto VOCAB_CC_GET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::GET);
455
456[[deprecated("use `ICartesianControl::Vocabs::NOT_SET` instead")]]
457constexpr auto VOCAB_CC_NOT_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::NOT_SET);
458
459[[deprecated("use `ICartesianControl::RPC::STATE` instead")]]
460constexpr auto VOCAB_CC_STAT = static_cast<int>(roboticslab::ICartesianControl::RPC::STATE);
461
462[[deprecated("use `ICartesianControl::RPC::INV` instead")]]
463constexpr auto VOCAB_CC_INV = static_cast<int>(roboticslab::ICartesianControl::RPC::INV);
464
465[[deprecated("use `ICartesianControl::RPC::MOVEJ` instead")]]
466constexpr auto VOCAB_CC_MOVJ = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEJ);
467
468[[deprecated("use `ICartesianControl::RPC::MOVJ` instead")]]
469constexpr auto VOCAB_CC_RELJ = 0;
470
471[[deprecated("use `ICartesianControl::RPC::MOVEL` instead")]]
472constexpr auto VOCAB_CC_MOVL = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEL);
473
474[[deprecated("use `ICartesianControl::RPC::MOVEV` instead")]]
475constexpr auto VOCAB_CC_MOVV = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEV);
476
477[[deprecated("use `ICartesianControl::RPC::GCMP` instead")]]
478constexpr auto VOCAB_CC_GCMP = static_cast<int>(roboticslab::ICartesianControl::RPC::GCMP);
479
480[[deprecated("use `ICartesianControl::RPC::FORCE` instead")]]
481constexpr auto VOCAB_CC_FORC = static_cast<int>(roboticslab::ICartesianControl::RPC::FORCE);
482
483[[deprecated("use `ICartesianControl::RPC::STOP` instead")]]
484constexpr auto VOCAB_CC_STOP = static_cast<int>(roboticslab::ICartesianControl::RPC::STOP);
485
486[[deprecated("use `ICartesianControl::RPC::STATE` instead")]]
487constexpr auto VOCAB_CC_WAIT = 0;
488
489[[deprecated("use `ICartesianControl::RPC::TOOL` instead")]]
490constexpr auto VOCAB_CC_TOOL = static_cast<int>(roboticslab::ICartesianControl::RPC::TOOL);
491
492[[deprecated("use `ICartesianControl::RPC::ACT` instead")]]
493constexpr auto VOCAB_CC_ACT = static_cast<int>(roboticslab::ICartesianControl::RPC::ACT);
494
495[[deprecated("use `ICartesianControl::Streaming::POSE` instead")]]
496constexpr auto VOCAB_CC_POSE = static_cast<int>(roboticslab::ICartesianControl::Streaming::POSE);
497
498[[deprecated("use `ICartesianControl::Streaming::TWIST` instead")]]
499constexpr auto VOCAB_CC_TWIST = static_cast<int>(roboticslab::ICartesianControl::Streaming::TWIST);
500
501[[deprecated("use `ICartesianControl::Streaming::WRENCH` instead")]]
502constexpr auto VOCAB_CC_WRENCH = static_cast<int>(roboticslab::ICartesianControl::Streaming::WRENCH);
503
504[[deprecated("use `ICartesianControl::State::NONE` instead")]]
505constexpr auto VOCAB_CC_NOT_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::NONE);
506
507[[deprecated("use `ICartesianControl::State::MOVEJ` instead")]]
508constexpr auto VOCAB_CC_MOVJ_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEJ);
509
510[[deprecated("use `ICartesianControl::State::MOVEL` instead")]]
511constexpr auto VOCAB_CC_MOVL_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEL);
512
513[[deprecated("use `ICartesianControl::State::MOVEV` instead")]]
514constexpr auto VOCAB_CC_MOVV_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEV);
515
516[[deprecated("use `ICartesianControl::State::GCMP` instead")]]
517constexpr auto VOCAB_CC_GCMP_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::GCMP);
518
519[[deprecated("use `ICartesianControl::State::FORCE` instead")]]
520constexpr auto VOCAB_CC_FORC_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::FORCE);
521
522[[deprecated("use `ICartesianControl::Actuator::NONE` instead")]]
523constexpr auto VOCAB_CC_ACTUATOR_NONE = static_cast<int>(roboticslab::ICartesianControl::Actuator::NONE);
524
525[[deprecated("use `ICartesianControl::Actuator::CLOSE` instead")]]
526constexpr auto VOCAB_CC_ACTUATOR_CLOSE_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::CLOSE);
527
528[[deprecated("use `ICartesianControl::Actuator::OPEN` instead")]]
529constexpr auto VOCAB_CC_ACTUATOR_OPEN_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::OPEN);
530
531[[deprecated("use `ICartesianControl::Actuator::STOP` instead")]]
532constexpr auto VOCAB_CC_ACTUATOR_STOP_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::STOP);
533
534[[deprecated("use `ICartesianControl::Actuator::GENERIC` instead")]]
535constexpr auto VOCAB_CC_ACTUATOR_GENERIC = static_cast<int>(roboticslab::ICartesianControl::Actuator::GENERIC);
536
537[[deprecated("unused")]]
538constexpr auto VOCAB_CC_CONFIG_PARAMS = 0;
539
540[[deprecated("use `ICartesianControl::Config::GAIN` instead")]]
541constexpr auto VOCAB_CC_CONFIG_GAIN = static_cast<int>(roboticslab::ICartesianControl::Config::GAIN);
542
543[[deprecated("use `ICartesianControl::Config::TRAJ_DURATION` instead")]]
544constexpr auto VOCAB_CC_CONFIG_TRAJ_DURATION = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_DURATION);
545
546[[deprecated("use `ICartesianControl::Config::TRAJ_REF_SPD` instead")]]
547constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_SPD = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_SPD);
548
549[[deprecated("use `ICartesianControl::Config::TRAJ_REF_ACC` instead")]]
550constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_ACC = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_ACC);
551
552[[deprecated("use `ICartesianControl::Config::CMC_PERIOD` instead")]]
553constexpr auto VOCAB_CC_CONFIG_CMC_PERIOD = static_cast<int>(roboticslab::ICartesianControl::Config::CMC_PERIOD);
554
555[[deprecated("unused")]]
556constexpr auto VOCAB_CC_CONFIG_WAIT_PERIOD = 0;
557
558[[deprecated("use `ICartesianControl::Config::FRAME` instead")]]
559constexpr auto VOCAB_CC_CONFIG_FRAME = static_cast<int>(roboticslab::ICartesianControl::Config::FRAME);
560
561[[deprecated("use `ICartesianControl::Config::STREAMING_CMD` instead")]]
562constexpr auto VOCAB_CC_CONFIG_STREAMING_CMD = static_cast<int>(roboticslab::ICartesianControl::Config::STREAMING_CMD);
563#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
564
565#endif // __I_CARTESIAN_CONTROL__
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Streaming
Streaming vocabs.
Definition ICartesianControl.h:63
@ TWIST
Instantaneous velocity steps.
virtual ~ICartesianControl()=default
Destructor.
virtual yarp::dev::ReturnValue moveJoint(const std::vector< double > &xd)=0
Move in joint space.
virtual yarp::dev::ReturnValue forceControl(const std::vector< double > &fd)=0
Force control.
virtual yarp::dev::ReturnValue moveVelocity(const std::vector< double > &xdotd)=0
Linear move with given velocity.
virtual yarp::dev::ReturnValue getParameters(std::map< Config, double > &params)=0
Retrieve multiple configuration parameters.
virtual yarp::dev::ReturnValue gravityCompensation()=0
Gravity compensation.
virtual yarp::dev::ReturnValue getState(ControllerState &state)=0
Current state and position.
Mode
Controller mode vocabs.
Definition ICartesianControl.h:75
@ FORCE
Executing FORCE command.
@ MOVEL
Executing MOVEL command.
@ GCMP
Executing GCMP command.
@ MOVEJ
Executing MOVEJ command.
@ MOVEV
Executing MOVEV command.
virtual yarp::dev::ReturnValue setParameter(Config vocab, double value)=0
Set a configuration parameter.
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:90
@ NONE
No actuator or no action.
Vocabs
General-purpose vocabs.
Definition ICartesianControl.h:30
virtual void twist(const std::vector< double > &xdot)=0
Instantaneous velocity steps.
Config
Controller configuration vocabs.
Definition ICartesianControl.h:104
@ STREAMING_CMD
Preset streaming command.
@ TRAJ_REF_ACC
Trajectory reference acceleration [m/s^2].
@ TRAJ_REF_SPD
Trajectory reference speed [m/s].
@ TRAJ_DURATION
Trajectory duration [s].
virtual yarp::dev::ReturnValue stopControl()=0
Stop control.
virtual yarp::dev::ReturnValue changeTool(const std::vector< double > &x)=0
Change tool.
virtual void pose(const std::vector< double > &x)=0
Achieve pose.
virtual yarp::dev::ReturnValue moveLinear(const std::vector< double > &xd)=0
Linear move to target position.
virtual void wrench(const std::vector< double > &w)=0
Exert force.
RPC
RPC vocabs.
Definition ICartesianControl.h:44
@ STATE
Current state and position.
@ MOVEL
Linear move to target position.
@ MOVEJ
Move in joint space, absolute coordinates.
@ MOVEV
Linear move with given velocity.
virtual yarp::dev::ReturnValue solvePose(const std::vector< double > &xd, std::vector< double > &q)=0
Inverse kinematics.
virtual yarp::dev::ReturnValue getParameter(Config vocab, double *value)=0
Retrieve a configuration parameter.
virtual yarp::dev::ReturnValue actuateTool(Actuator command)=0
Actuate tool.
virtual yarp::dev::ReturnValue setParameters(const std::map< Config, double > &params)=0
Set multiple configuration parameters.
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6
Controller state structure.
Definition ICartesianControl.h:120
float progress
Progress of the current trajectory, if any (0.0 to 1.0)
Definition ICartesianControl.h:125
Mode mode
Current controller mode.
Definition ICartesianControl.h:122
std::vector< double > x
Current pose: translation (3, meters) + rotation (3, radians, scaled axis-angle)
Definition ICartesianControl.h:121
double timestamp
Timestamp of the last received pose.
Definition ICartesianControl.h:123
double duration
Duration of the current trajectory, if any (seconds)
Definition ICartesianControl.h:124
bool success
Whether the last trajectory command was successful.
Definition ICartesianControl.h:126