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
13#include <yarp/dev/Drivers.h>
14#include <yarp/dev/WrapperSingle.h>
15
16#include "ICartesianControl.h"
17#include "KinematicRepresentation.hpp"
18#include "CartesianControlServer_ParamsParser.h"
19
27namespace roboticslab
28{
29 class RpcResponder;
30 class RpcTransformResponder;
31 class StreamResponder;
32}
33
38class CartesianControlServer : public yarp::dev::DeviceDriver,
39 public yarp::dev::WrapperSingle,
40 public yarp::os::PeriodicThread,
42{
43public:
44 CartesianControlServer() : yarp::os::PeriodicThread(1.0)
45 {}
46
47 // -------- DeviceDriver declarations. Implementation in IDeviceImpl.cpp --------
48 bool open(yarp::os::Searchable & config) override;
49 bool close() override;
50
51 // -------- IWrapper declarations. Implementation in IWrapperImpl.cpp --------
52 bool attach(yarp::dev::PolyDriver * poly) override;
53 bool detach() override;
54
55 // -------- PeriodicThread declarations. Implementation in PeriodicThreadImpl.cpp --------
56 void run() override;
57
58protected:
59 yarp::os::RpcServer rpcServer, rpcTransformServer;
60 yarp::os::BufferedPort<yarp::os::Bottle> fkOutPort, commandPort;
61
62 roboticslab::ICartesianControl * iCartesianControl {nullptr};
63
64 roboticslab::RpcResponder * rpcResponder {nullptr};
65 roboticslab::RpcResponder * rpcTransformResponder {nullptr};
66 roboticslab::StreamResponder * streamResponder {nullptr};
67};
68
69namespace roboticslab
70{
71
76class RpcResponder : public yarp::dev::DeviceResponder
77{
78public:
80 {
81 // shadows DeviceResponder::makeUsage(), which was already called by the base constructor
82 makeUsage();
83 }
84
85 void setHandle(ICartesianControl * _iCartesianControl)
86 { iCartesianControl = _iCartesianControl; }
87
88 void unsetHandle()
89 { iCartesianControl = nullptr; }
90
91 bool respond(const yarp::os::Bottle & in, yarp::os::Bottle & out) override;
92 void makeUsage();
93
94protected:
95 virtual bool transformIncomingData(std::vector<double> & vin)
96 { return true; }
97
98 virtual bool transformOutgoingData(std::vector<double> & vout)
99 { return true; }
100
101private:
102 using RunnableFun = bool (ICartesianControl::*)();
103 using ConsumerFun = bool (ICartesianControl::*)(const std::vector<double> &);
104 using FunctionFun = bool (ICartesianControl::*)(const std::vector<double> &, std::vector<double> &);
105
106 bool handleStatMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out);
107 bool handleWaitMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out);
108 bool handleActMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out);
109
110 bool handleRunnableCmdMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out, RunnableFun cmd);
111 bool handleConsumerCmdMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out, ConsumerFun cmd);
112 bool handleFunctionCmdMsg(const yarp::os::Bottle & in, yarp::os::Bottle & out, FunctionFun cmd);
113
114 bool handleParameterSetter(const yarp::os::Bottle & in, yarp::os::Bottle & out);
115 bool handleParameterGetter(const yarp::os::Bottle & in, yarp::os::Bottle & out);
116
117 bool handleParameterSetterGroup(const yarp::os::Bottle & in, yarp::os::Bottle & out);
118 bool handleParameterGetterGroup(const yarp::os::Bottle & in, yarp::os::Bottle & out);
119
120 ICartesianControl * iCartesianControl;
121};
122
128{
129public:
133 : coord(coord),
134 orient(orient),
135 units(units)
136 {}
137
138private:
139 bool transformIncomingData(std::vector<double> & vin) override;
140 bool transformOutgoingData(std::vector<double> & vout) override;
141
145};
146
151class StreamResponder : public yarp::os::TypedReaderCallback<yarp::os::Bottle>
152{
153public:
154 void setHandle(ICartesianControl * _iCartesianControl)
155 { iCartesianControl = _iCartesianControl;}
156
157 void unsetHandle()
158 { iCartesianControl = nullptr; }
159
160 void onRead(yarp::os::Bottle & b) override;
161
162private:
163 using ConsumerFun = void (ICartesianControl::*)(const std::vector<double> &);
164 using BiConsumerFun = void (ICartesianControl::*)(const std::vector<double> &, double);
165
166 void handleConsumerCmdMsg(const yarp::os::Bottle & in, ConsumerFun cmd);
167 void handleBiConsumerCmdMsg(const yarp::os::Bottle & in, BiConsumerFun cmd);
168
169 ICartesianControl * iCartesianControl {nullptr};
170};
171
172} // namespace roboticslab
173
174#endif // __CARTESIAN_CONTROL_SERVER_HPP__
Contains roboticslab::ICartesianControl and related vocabs.
Definition CartesianControlServer_ParamsParser.h:46
The CartesianControlServer class implements ICartesianControl server side.
Definition CartesianControlServer.hpp:42
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:145
Responds to RPC command messages.
Definition CartesianControlServer.hpp:77
Responds to RPC command messages, transforms incoming data.
Definition CartesianControlServer.hpp:128
Responds to streaming command messages.
Definition CartesianControlServer.hpp:152
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