kinematics-dynamics
Loading...
Searching...
No Matches
CartesianControlServer.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CARTESIAN_CONTROL_SERVER_HPP__
4#define __CARTESIAN_CONTROL_SERVER_HPP__
5
6#include <vector>
7
8#include <yarp/os/Bottle.h>
9#include <yarp/os/BufferedPort.h>
10#include <yarp/os/PeriodicThread.h>
11#include <yarp/os/RpcServer.h>
12#include <yarp/os/TypedReaderCallback.h>
13
14#include <yarp/dev/Drivers.h>
15#include <yarp/dev/WrapperSingle.h>
16
17#include "ICartesianControl.h"
18#include "CartesianControlMsgs.h"
19#include "KinematicRepresentation.hpp"
20#include "CartesianControlServer_ParamsParser.h"
21
29namespace roboticslab
30{
31 class RpcResponder;
32 class RpcTransformResponder;
33 class StreamResponder;
34}
35
40class CartesianControlServer : public yarp::dev::DeviceDriver,
41 public yarp::dev::WrapperSingle,
42 public yarp::os::PeriodicThread,
44{
45public:
46 CartesianControlServer() : yarp::os::PeriodicThread(1.0)
47 {}
48
49 // -------- DeviceDriver declarations. Implementation in DeviceDriverImpl.cpp --------
50 bool open(yarp::os::Searchable & config) override;
51 bool close() override;
52
53 // -------- IWrapper declarations. Implementation in IWrapperImpl.cpp --------
54 bool attach(yarp::dev::PolyDriver * poly) override;
55 bool detach() override;
56
57 // -------- PeriodicThread declarations. Implementation in PeriodicThreadImpl.cpp --------
58 void run() override;
59
60protected:
61 yarp::os::RpcServer rpcServer, rpcTransformServer;
62 yarp::os::BufferedPort<yarp::os::Bottle> fkOutPort, commandPort;
63
64 roboticslab::ICartesianControl * iCartesianControl {nullptr};
65
66 roboticslab::RpcResponder * rpcResponder {nullptr};
67 roboticslab::RpcResponder * rpcTransformResponder {nullptr};
68 roboticslab::StreamResponder * streamResponder {nullptr};
69};
70
71namespace roboticslab
72{
73
79{
80public:
81 virtual ~ResponderBase() = 0;
82
83 void setHandle(ICartesianControl * _iCartesianControl)
84 { iCartesianControl = _iCartesianControl; }
85
86 void unsetHandle()
87 { iCartesianControl = nullptr; }
88
89protected:
90 ICartesianControl * iCartesianControl {nullptr};
91};
92
93inline ResponderBase::~ResponderBase() {}
94
99class RpcResponder : public CartesianControlMsgs,
100 public ResponderBase
101{
102public:
103 return_get_state getState() override;
104 return_solve_pose solvePose(const std::vector<double> & xd) override;
105 yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) override;
106 yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) override;
107 yarp::dev::ReturnValue moveVelocity(const std::vector<double> & xdotd) override;
108 yarp::dev::ReturnValue gravityCompensation() override;
109 yarp::dev::ReturnValue forceControl(const std::vector<double> & fd) override;
110 yarp::dev::ReturnValue stopControl() override;
111 yarp::dev::ReturnValue changeTool(const std::vector<double> & x) override;
112 yarp::dev::ReturnValue actuateTool(const roboticslab::ICartesianControl::Actuator command) override;
113 yarp::dev::ReturnValue setParameter(const roboticslab::ICartesianControl::Config vocab, const double value) override;
114 return_get_parameter getParameter(const roboticslab::ICartesianControl::Config vocab) override;
115 yarp::dev::ReturnValue setParameters(const std::map<roboticslab::ICartesianControl::Config, double> & params) override;
116 return_get_parameters getParameters() override;
117
118private:
119 using ResponderBase::iCartesianControl;
120};
121
127{
128public:
132 : coord(coord),
133 orient(orient),
134 units(units)
135 {}
136
137 return_get_state getState() override;
138 return_solve_pose solvePose(const std::vector<double> & xd) override;
139 yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) override;
140 yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) override;
141 yarp::dev::ReturnValue changeTool(const std::vector<double> & x) override;
142
143private:
144 bool transformIncomingData(const std::vector<double> & vin, std::vector<double> & vout);
145 bool transformOutgoingData(const std::vector<double> & vin, std::vector<double> & vout);
146
150};
151
156class StreamResponder : public yarp::os::TypedReaderCallback<yarp::os::Bottle>,
157 public ResponderBase
158{
159public:
160 void onRead(yarp::os::Bottle & b) override;
161
162private:
163 using ConsumerFun = void (ICartesianControl::*)(const std::vector<double> &);
164 void handleConsumerCmdMsg(const yarp::os::Bottle & in, ConsumerFun cmd);
165};
166
167} // namespace roboticslab
168
169#endif // __CARTESIAN_CONTROL_SERVER_HPP__
Definition CartesianControlServer_ParamsParser.h:46
The CartesianControlServer class implements ICartesianControl server side.
Definition CartesianControlServer.hpp:44
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:90
Config
Controller configuration vocabs.
Definition ICartesianControl.h:104
Base class for all responders.
Definition CartesianControlServer.hpp:79
Responds to RPC command messages.
Definition CartesianControlServer.hpp:101
Responds to RPC command messages, transforms incoming data.
Definition CartesianControlServer.hpp:127
Responds to streaming command messages.
Definition CartesianControlServer.hpp:158
coordinate_system
Lists available translational representations.
Definition KinematicRepresentation.hpp:27
orientation_system
Lists available rotational representations.
Definition KinematicRepresentation.hpp:36
angular_units
Lists recognized angular units.
Definition KinematicRepresentation.hpp:48
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6