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 <map>
7#include <variant>
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
322 using config_value_t = std::variant<double, yarp::conf::vocab32_t>;
323 using config_map_t = std::map<Config, config_value_t>;
324
335 virtual yarp::dev::ReturnValue setParameter(Config vocab, config_value_t value) = 0;
336
347 virtual yarp::dev::ReturnValue getParameter(Config vocab, config_value_t * value) = 0;
348
358 virtual yarp::dev::ReturnValue setParameters(const config_map_t & params) = 0;
359
369 virtual yarp::dev::ReturnValue getParameters(config_map_t & params) = 0;
370
373#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
374 [[deprecated("use `ICartesianControl::getState` instead")]]
375 virtual bool stat(std::vector<double> & x, int * state = nullptr, double * timestamp = nullptr)
376 {
377 ControllerState controllerState;
378 auto ret = getState(controllerState);
379 x = controllerState.x;
380 if (state != nullptr) *state = static_cast<int>(controllerState.mode);
381 if (timestamp != nullptr) *timestamp = controllerState.timestamp;
382 return ret;
383 }
384
385 [[deprecated("use `ICartesianControl::solvePose` instead")]]
386 virtual bool inv(const std::vector<double> & xd, std::vector<double> & q)
387 { return solvePose(xd, q); }
388
389 [[deprecated("use `ICartesianControl::moveJoint` instead")]]
390 virtual bool movj(const std::vector<double> & xd)
391 { return moveJoint(xd); }
392
393 [[deprecated("use `ICartesianControl::getState and moveJoint` instead")]]
394 virtual bool relj(const std::vector<double> & xd)
395 { return false; }
396
397 [[deprecated("use `ICartesianControl::moveLinear` instead")]]
398 virtual bool movl(const std::vector<double> & xd)
399 { return moveLinear(xd); }
400
401 [[deprecated("use `ICartesianControl::moveVelocity` instead")]]
402 virtual bool movv(const std::vector<double> & xdotd)
403 { return moveVelocity(xdotd); }
404
405 [[deprecated("use `ICartesianControl::gravityCompensation` instead")]]
406 virtual bool gcmp()
407 { return gravityCompensation(); }
408
409 [[deprecated("use `ICartesianControl::forceControl` instead")]]
410 virtual bool forc(const std::vector<double> & fd)
411 { return forceControl(fd); }
412
413 [[deprecated("use `ICartesianControl::getState` instead")]]
414 virtual bool wait(double timeout = 0.0)
415 { return false; }
416
417 [[deprecated("use `ICartesianControl::changeTool` instead")]]
418 virtual bool tool(const std::vector<double> & x)
419 { return changeTool(x); }
420
421 [[deprecated("use `ICartesianControl::Actuator` signature instead")]]
422 virtual bool act(int command)
423 { return actuateTool(static_cast<Actuator>(command)); }
424
425 [[deprecated("use `ICartesianControl::Config` signature instead")]]
426 virtual bool setParameter(int vocab, double value)
427 { return false; }
428
429 [[deprecated("use `ICartesianControl::Config` signature instead")]]
430 virtual bool getParameter(int vocab, double * value)
431 { return false; }
432
433 [[deprecated("use `ICartesianControl::Config` signature instead")]]
434 virtual bool setParameters(const std::map<int, double> & params)
435 { return false; }
436
437 [[deprecated("use `ICartesianControl::Config` signature instead")]]
438 virtual bool getParameters(std::map<int, double> & params)
439 { return false; }
440#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
441};
442
443} // namespace roboticslab
444
445#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
446[[deprecated("use `ICartesianControl::Vocabs::OK` instead")]]
447constexpr auto VOCAB_CC_OK = static_cast<int>(roboticslab::ICartesianControl::Vocabs::OK);
448
449[[deprecated("use `ICartesianControl::Vocabs::FAILED` instead")]]
450constexpr auto VOCAB_CC_FAILED = static_cast<int>(roboticslab::ICartesianControl::Vocabs::FAILED);
451
452[[deprecated("use `ICartesianControl::Vocabs::SET` instead")]]
453constexpr auto VOCAB_CC_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::SET);
454
455[[deprecated("use `ICartesianControl::Vocabs::GET` instead")]]
456constexpr auto VOCAB_CC_GET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::GET);
457
458[[deprecated("use `ICartesianControl::Vocabs::NOT_SET` instead")]]
459constexpr auto VOCAB_CC_NOT_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::NOT_SET);
460
461[[deprecated("use `ICartesianControl::RPC::STATE` instead")]]
462constexpr auto VOCAB_CC_STAT = static_cast<int>(roboticslab::ICartesianControl::RPC::STATE);
463
464[[deprecated("use `ICartesianControl::RPC::INV` instead")]]
465constexpr auto VOCAB_CC_INV = static_cast<int>(roboticslab::ICartesianControl::RPC::INV);
466
467[[deprecated("use `ICartesianControl::RPC::MOVEJ` instead")]]
468constexpr auto VOCAB_CC_MOVJ = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEJ);
469
470[[deprecated("use `ICartesianControl::RPC::MOVJ` instead")]]
471constexpr auto VOCAB_CC_RELJ = 0;
472
473[[deprecated("use `ICartesianControl::RPC::MOVEL` instead")]]
474constexpr auto VOCAB_CC_MOVL = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEL);
475
476[[deprecated("use `ICartesianControl::RPC::MOVEV` instead")]]
477constexpr auto VOCAB_CC_MOVV = static_cast<int>(roboticslab::ICartesianControl::RPC::MOVEV);
478
479[[deprecated("use `ICartesianControl::RPC::GCMP` instead")]]
480constexpr auto VOCAB_CC_GCMP = static_cast<int>(roboticslab::ICartesianControl::RPC::GCMP);
481
482[[deprecated("use `ICartesianControl::RPC::FORCE` instead")]]
483constexpr auto VOCAB_CC_FORC = static_cast<int>(roboticslab::ICartesianControl::RPC::FORCE);
484
485[[deprecated("use `ICartesianControl::RPC::STOP` instead")]]
486constexpr auto VOCAB_CC_STOP = static_cast<int>(roboticslab::ICartesianControl::RPC::STOP);
487
488[[deprecated("use `ICartesianControl::RPC::STATE` instead")]]
489constexpr auto VOCAB_CC_WAIT = 0;
490
491[[deprecated("use `ICartesianControl::RPC::TOOL` instead")]]
492constexpr auto VOCAB_CC_TOOL = static_cast<int>(roboticslab::ICartesianControl::RPC::TOOL);
493
494[[deprecated("use `ICartesianControl::RPC::ACT` instead")]]
495constexpr auto VOCAB_CC_ACT = static_cast<int>(roboticslab::ICartesianControl::RPC::ACT);
496
497[[deprecated("use `ICartesianControl::Streaming::POSE` instead")]]
498constexpr auto VOCAB_CC_POSE = static_cast<int>(roboticslab::ICartesianControl::Streaming::POSE);
499
500[[deprecated("use `ICartesianControl::Streaming::TWIST` instead")]]
501constexpr auto VOCAB_CC_TWIST = static_cast<int>(roboticslab::ICartesianControl::Streaming::TWIST);
502
503[[deprecated("use `ICartesianControl::Streaming::WRENCH` instead")]]
504constexpr auto VOCAB_CC_WRENCH = static_cast<int>(roboticslab::ICartesianControl::Streaming::WRENCH);
505
506[[deprecated("use `ICartesianControl::State::NONE` instead")]]
507constexpr auto VOCAB_CC_NOT_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::NONE);
508
509[[deprecated("use `ICartesianControl::State::MOVEJ` instead")]]
510constexpr auto VOCAB_CC_MOVJ_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEJ);
511
512[[deprecated("use `ICartesianControl::State::MOVEL` instead")]]
513constexpr auto VOCAB_CC_MOVL_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEL);
514
515[[deprecated("use `ICartesianControl::State::MOVEV` instead")]]
516constexpr auto VOCAB_CC_MOVV_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEV);
517
518[[deprecated("use `ICartesianControl::State::GCMP` instead")]]
519constexpr auto VOCAB_CC_GCMP_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::GCMP);
520
521[[deprecated("use `ICartesianControl::State::FORCE` instead")]]
522constexpr auto VOCAB_CC_FORC_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::FORCE);
523
524[[deprecated("use `ICartesianControl::Actuator::NONE` instead")]]
525constexpr auto VOCAB_CC_ACTUATOR_NONE = static_cast<int>(roboticslab::ICartesianControl::Actuator::NONE);
526
527[[deprecated("use `ICartesianControl::Actuator::CLOSE` instead")]]
528constexpr auto VOCAB_CC_ACTUATOR_CLOSE_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::CLOSE);
529
530[[deprecated("use `ICartesianControl::Actuator::OPEN` instead")]]
531constexpr auto VOCAB_CC_ACTUATOR_OPEN_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::OPEN);
532
533[[deprecated("use `ICartesianControl::Actuator::STOP` instead")]]
534constexpr auto VOCAB_CC_ACTUATOR_STOP_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::STOP);
535
536[[deprecated("use `ICartesianControl::Actuator::GENERIC` instead")]]
537constexpr auto VOCAB_CC_ACTUATOR_GENERIC = static_cast<int>(roboticslab::ICartesianControl::Actuator::GENERIC);
538
539[[deprecated("unused")]]
540constexpr auto VOCAB_CC_CONFIG_PARAMS = 0;
541
542[[deprecated("use `ICartesianControl::Config::GAIN` instead")]]
543constexpr auto VOCAB_CC_CONFIG_GAIN = static_cast<int>(roboticslab::ICartesianControl::Config::GAIN);
544
545[[deprecated("use `ICartesianControl::Config::TRAJ_DURATION` instead")]]
546constexpr auto VOCAB_CC_CONFIG_TRAJ_DURATION = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_DURATION);
547
548[[deprecated("use `ICartesianControl::Config::TRAJ_REF_SPD` instead")]]
549constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_SPD = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_SPD);
550
551[[deprecated("use `ICartesianControl::Config::TRAJ_REF_ACC` instead")]]
552constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_ACC = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_ACC);
553
554[[deprecated("use `ICartesianControl::Config::CMC_PERIOD` instead")]]
555constexpr auto VOCAB_CC_CONFIG_CMC_PERIOD = static_cast<int>(roboticslab::ICartesianControl::Config::CMC_PERIOD);
556
557[[deprecated("unused")]]
558constexpr auto VOCAB_CC_CONFIG_WAIT_PERIOD = 0;
559
560[[deprecated("use `ICartesianControl::Config::FRAME` instead")]]
561constexpr auto VOCAB_CC_CONFIG_FRAME = static_cast<int>(roboticslab::ICartesianControl::Config::FRAME);
562
563[[deprecated("use `ICartesianControl::Config::STREAMING_CMD` instead")]]
564constexpr auto VOCAB_CC_CONFIG_STREAMING_CMD = static_cast<int>(roboticslab::ICartesianControl::Config::STREAMING_CMD);
565#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
566
567#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 setParameters(const config_map_t &params)=0
Set multiple configuration parameters.
virtual yarp::dev::ReturnValue gravityCompensation()=0
Gravity compensation.
virtual yarp::dev::ReturnValue getParameters(config_map_t &params)=0
Retrieve multiple configuration parameters.
virtual yarp::dev::ReturnValue setParameter(Config vocab, config_value_t value)=0
Set a configuration parameter.
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.
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 getParameter(Config vocab, config_value_t *value)=0
Retrieve a configuration parameter.
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 actuateTool(Actuator command)=0
Actuate tool.
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