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 Streaming
44 {
45 NOT_SET = yarp::os::createVocab32('n','s','e','t'),
46 POSE = yarp::os::createVocab32('p','o','s','e'),
47 TWIST = yarp::os::createVocab32('t','w','s','t'),
48 WRENCH = yarp::os::createVocab32('w','r','n','c')
49 };
50
56 enum class Mode
57 {
58 NONE = yarp::os::createVocab32('n','c','t','l'),
59 MOVEJ = yarp::os::createVocab32('m','o','v','j'),
60 MOVEL = yarp::os::createVocab32('m','o','v','l'),
61 MOVEV = yarp::os::createVocab32('m','o','v','v'),
62 GCMP = yarp::os::createVocab32('g','c','m','p'),
63 FORCE = yarp::os::createVocab32('f','o','r','c')
64 };
65
71 enum class Actuator
72 {
73 NONE = yarp::os::createVocab32('a','c','n'),
74 CLOSE = yarp::os::createVocab32('a','c','c','g'),
75 OPEN = yarp::os::createVocab32('a','c','o','g'),
76 STOP = yarp::os::createVocab32('a','c','s','g'),
77 GENERIC = yarp::os::createVocab32('a','c','g')
78 };
79
85 enum class Config
86 {
87 GAIN = yarp::os::createVocab32('c','p','c','g'),
88 TRAJ_DURATION = yarp::os::createVocab32('c','p','t','d'),
89 TRAJ_REF_SPD = yarp::os::createVocab32('c','p','t','s'),
90 TRAJ_REF_ACC = yarp::os::createVocab32('c','p','t','a'),
91 CMC_PERIOD = yarp::os::createVocab32('c','p','c','p'),
92 FRAME = yarp::os::createVocab32('c','p','f'),
93 STREAMING_CMD = yarp::os::createVocab32('c','p','s','c')
94 };
95
102 {
103 std::vector<double> x;
105 double timestamp;
106 double duration;
107 float progress;
108 bool success;
109 };
110
112 virtual ~ICartesianControl() = default;
113
114 //--------------------- RPC commands ---------------------
115
134 virtual yarp::dev::ReturnValue getState(ControllerState & state) = 0;
135
148 virtual yarp::dev::ReturnValue solvePose(const std::vector<double> & xd, std::vector<double> & q) = 0;
149
162 virtual yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) = 0;
163
175 virtual yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) = 0;
176
188 virtual yarp::dev::ReturnValue moveVelocity(const std::vector<double> & xdotd) = 0;
189
197 virtual yarp::dev::ReturnValue gravityCompensation() = 0;
198
210 virtual yarp::dev::ReturnValue forceControl(const std::vector<double> & fd) = 0;
211
219 virtual yarp::dev::ReturnValue stopControl() = 0;
220
232 virtual yarp::dev::ReturnValue changeTool(const std::vector<double> & x) = 0;
233
243 virtual yarp::dev::ReturnValue actuateTool(Actuator command) = 0;
244
247 //--------------------- Streaming commands ---------------------
248
268 virtual void pose(const std::vector<double> & x) = 0;
269
279 virtual void twist(const std::vector<double> & xdot) = 0;
280
289 virtual void wrench(const std::vector<double> & w) = 0;
290
293 //--------------------- Configuration accessors ---------------------
294
304 using config_value_t = std::variant<double, yarp::conf::vocab32_t>;
305 using config_map_t = std::map<Config, config_value_t>;
306
317 virtual yarp::dev::ReturnValue setParameter(Config vocab, config_value_t value) = 0;
318
329 virtual yarp::dev::ReturnValue getParameter(Config vocab, config_value_t & value) = 0;
330
340 virtual yarp::dev::ReturnValue setParameters(const config_map_t & params) = 0;
341
351 virtual yarp::dev::ReturnValue getParameters(config_map_t & params) = 0;
352
355#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
356 [[deprecated("use `ICartesianControl::getState` instead")]]
357 virtual bool stat(std::vector<double> & x, int * state = nullptr, double * timestamp = nullptr)
358 {
359 ControllerState controllerState;
360 auto ret = getState(controllerState);
361 x = controllerState.x;
362 if (state != nullptr) *state = static_cast<int>(controllerState.mode);
363 if (timestamp != nullptr) *timestamp = controllerState.timestamp;
364 return ret;
365 }
366
367 [[deprecated("use `ICartesianControl::solvePose` instead")]]
368 virtual bool inv(const std::vector<double> & xd, std::vector<double> & q)
369 { return solvePose(xd, q); }
370
371 [[deprecated("use `ICartesianControl::moveJoint` instead")]]
372 virtual bool movj(const std::vector<double> & xd)
373 { return moveJoint(xd); }
374
375 [[deprecated("use `ICartesianControl::getState and moveJoint` instead")]]
376 virtual bool relj(const std::vector<double> & xd)
377 { return false; }
378
379 [[deprecated("use `ICartesianControl::moveLinear` instead")]]
380 virtual bool movl(const std::vector<double> & xd)
381 { return moveLinear(xd); }
382
383 [[deprecated("use `ICartesianControl::moveVelocity` instead")]]
384 virtual bool movv(const std::vector<double> & xdotd)
385 { return moveVelocity(xdotd); }
386
387 [[deprecated("use `ICartesianControl::gravityCompensation` instead")]]
388 virtual bool gcmp()
389 { return gravityCompensation(); }
390
391 [[deprecated("use `ICartesianControl::forceControl` instead")]]
392 virtual bool forc(const std::vector<double> & fd)
393 { return forceControl(fd); }
394
395 [[deprecated("use `ICartesianControl::getState` instead")]]
396 virtual bool wait(double timeout = 0.0)
397 { return false; }
398
399 [[deprecated("use `ICartesianControl::changeTool` instead")]]
400 virtual bool tool(const std::vector<double> & x)
401 { return changeTool(x); }
402
403 [[deprecated("use `ICartesianControl::Actuator` signature instead")]]
404 virtual bool act(int command)
405 { return actuateTool(static_cast<Actuator>(command)); }
406
407 [[deprecated("use `ICartesianControl::Config` signature instead")]]
408 virtual bool setParameter(int vocab, double value)
409 { return false; }
410
411 [[deprecated("use `ICartesianControl::Config` signature instead")]]
412 virtual bool getParameter(int vocab, double * value)
413 { return false; }
414
415 [[deprecated("use `ICartesianControl::Config` signature instead")]]
416 virtual bool setParameters(const std::map<int, double> & params)
417 { return false; }
418
419 [[deprecated("use `ICartesianControl::Config` signature instead")]]
420 virtual bool getParameters(std::map<int, double> & params)
421 { return false; }
422#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
423};
424
425} // namespace roboticslab
426
427#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
428[[deprecated("use `ICartesianControl::Vocabs::OK` instead")]]
429constexpr auto VOCAB_CC_OK = static_cast<int>(roboticslab::ICartesianControl::Vocabs::OK);
430
431[[deprecated("use `ICartesianControl::Vocabs::FAILED` instead")]]
432constexpr auto VOCAB_CC_FAILED = static_cast<int>(roboticslab::ICartesianControl::Vocabs::FAILED);
433
434[[deprecated("use `ICartesianControl::Vocabs::SET` instead")]]
435constexpr auto VOCAB_CC_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::SET);
436
437[[deprecated("use `ICartesianControl::Vocabs::GET` instead")]]
438constexpr auto VOCAB_CC_GET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::GET);
439
440[[deprecated("use `ICartesianControl::Vocabs::NOT_SET` instead")]]
441constexpr auto VOCAB_CC_NOT_SET = static_cast<int>(roboticslab::ICartesianControl::Vocabs::NOT_SET);
442
443[[deprecated("not used anymore")]]
444constexpr auto VOCAB_CC_STAT = 0;
445
446[[deprecated("not used anymore")]]
447constexpr auto VOCAB_CC_INV = 0;
448
449[[deprecated("not used anymore")]]
450constexpr auto VOCAB_CC_MOVJ = 0;
451
452[[deprecated("not used anymore")]]
453constexpr auto VOCAB_CC_RELJ = 0;
454
455[[deprecated("not used anymore")]]
456constexpr auto VOCAB_CC_MOVL = 0;
457
458[[deprecated("not used anymore")]]
459constexpr auto VOCAB_CC_MOVV = 0;
460
461[[deprecated("not used anymore")]]
462constexpr auto VOCAB_CC_GCMP = 0;
463
464[[deprecated("not used anymore")]]
465constexpr auto VOCAB_CC_FORC = 0;
466
467[[deprecated("not used anymore")]]
468constexpr auto VOCAB_CC_STOP = 0;
469
470[[deprecated("not used anymore")]]
471constexpr auto VOCAB_CC_WAIT = 0;
472
473[[deprecated("not used anymore")]]
474constexpr auto VOCAB_CC_TOOL = 0;
475
476[[deprecated("not used anymore")]]
477constexpr auto VOCAB_CC_ACT = 0;
478
479[[deprecated("use `ICartesianControl::Streaming::POSE` instead")]]
480constexpr auto VOCAB_CC_POSE = static_cast<int>(roboticslab::ICartesianControl::Streaming::POSE);
481
482[[deprecated("use `ICartesianControl::Streaming::TWIST` instead")]]
483constexpr auto VOCAB_CC_TWIST = static_cast<int>(roboticslab::ICartesianControl::Streaming::TWIST);
484
485[[deprecated("use `ICartesianControl::Streaming::WRENCH` instead")]]
486constexpr auto VOCAB_CC_WRENCH = static_cast<int>(roboticslab::ICartesianControl::Streaming::WRENCH);
487
488[[deprecated("use `ICartesianControl::State::NONE` instead")]]
489constexpr auto VOCAB_CC_NOT_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::NONE);
490
491[[deprecated("use `ICartesianControl::State::MOVEJ` instead")]]
492constexpr auto VOCAB_CC_MOVJ_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEJ);
493
494[[deprecated("use `ICartesianControl::State::MOVEL` instead")]]
495constexpr auto VOCAB_CC_MOVL_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEL);
496
497[[deprecated("use `ICartesianControl::State::MOVEV` instead")]]
498constexpr auto VOCAB_CC_MOVV_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::MOVEV);
499
500[[deprecated("use `ICartesianControl::State::GCMP` instead")]]
501constexpr auto VOCAB_CC_GCMP_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::GCMP);
502
503[[deprecated("use `ICartesianControl::State::FORCE` instead")]]
504constexpr auto VOCAB_CC_FORC_CONTROLLING = static_cast<int>(roboticslab::ICartesianControl::Mode::FORCE);
505
506[[deprecated("use `ICartesianControl::Actuator::NONE` instead")]]
507constexpr auto VOCAB_CC_ACTUATOR_NONE = static_cast<int>(roboticslab::ICartesianControl::Actuator::NONE);
508
509[[deprecated("use `ICartesianControl::Actuator::CLOSE` instead")]]
510constexpr auto VOCAB_CC_ACTUATOR_CLOSE_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::CLOSE);
511
512[[deprecated("use `ICartesianControl::Actuator::OPEN` instead")]]
513constexpr auto VOCAB_CC_ACTUATOR_OPEN_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::OPEN);
514
515[[deprecated("use `ICartesianControl::Actuator::STOP` instead")]]
516constexpr auto VOCAB_CC_ACTUATOR_STOP_GRIPPER = static_cast<int>(roboticslab::ICartesianControl::Actuator::STOP);
517
518[[deprecated("use `ICartesianControl::Actuator::GENERIC` instead")]]
519constexpr auto VOCAB_CC_ACTUATOR_GENERIC = static_cast<int>(roboticslab::ICartesianControl::Actuator::GENERIC);
520
521[[deprecated("unused")]]
522constexpr auto VOCAB_CC_CONFIG_PARAMS = 0;
523
524[[deprecated("use `ICartesianControl::Config::GAIN` instead")]]
525constexpr auto VOCAB_CC_CONFIG_GAIN = static_cast<int>(roboticslab::ICartesianControl::Config::GAIN);
526
527[[deprecated("use `ICartesianControl::Config::TRAJ_DURATION` instead")]]
528constexpr auto VOCAB_CC_CONFIG_TRAJ_DURATION = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_DURATION);
529
530[[deprecated("use `ICartesianControl::Config::TRAJ_REF_SPD` instead")]]
531constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_SPD = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_SPD);
532
533[[deprecated("use `ICartesianControl::Config::TRAJ_REF_ACC` instead")]]
534constexpr auto VOCAB_CC_CONFIG_TRAJ_REF_ACC = static_cast<int>(roboticslab::ICartesianControl::Config::TRAJ_REF_ACC);
535
536[[deprecated("use `ICartesianControl::Config::CMC_PERIOD` instead")]]
537constexpr auto VOCAB_CC_CONFIG_CMC_PERIOD = static_cast<int>(roboticslab::ICartesianControl::Config::CMC_PERIOD);
538
539[[deprecated("unused")]]
540constexpr auto VOCAB_CC_CONFIG_WAIT_PERIOD = 0;
541
542[[deprecated("use `ICartesianControl::Config::FRAME` instead")]]
543constexpr auto VOCAB_CC_CONFIG_FRAME = static_cast<int>(roboticslab::ICartesianControl::Config::FRAME);
544
545[[deprecated("use `ICartesianControl::Config::STREAMING_CMD` instead")]]
546constexpr auto VOCAB_CC_CONFIG_STREAMING_CMD = static_cast<int>(roboticslab::ICartesianControl::Config::STREAMING_CMD);
547#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
548
549#endif // __I_CARTESIAN_CONTROL__
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Streaming
Streaming vocabs.
Definition ICartesianControl.h:44
@ 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:57
@ 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:72
@ 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:86
@ 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.
virtual yarp::dev::ReturnValue solvePose(const std::vector< double > &xd, std::vector< double > &q)=0
Inverse kinematics.
virtual yarp::dev::ReturnValue getParameter(Config vocab, config_value_t &value)=0
Retrieve a configuration parameter.
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:102
float progress
Progress of the current trajectory, if any (0.0 to 1.0)
Definition ICartesianControl.h:107
Mode mode
Current controller mode.
Definition ICartesianControl.h:104
std::vector< double > x
Current pose: translation (3, meters) + rotation (3, radians, scaled axis-angle)
Definition ICartesianControl.h:103
double timestamp
Timestamp of the last received pose.
Definition ICartesianControl.h:105
double duration
Duration of the current trajectory, if any (seconds)
Definition ICartesianControl.h:106
bool success
Whether the last trajectory command was successful.
Definition ICartesianControl.h:108