kinematics-dynamics
Loading...
Searching...
No Matches
CartesianControlClient.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CARTESIAN_CONTROL_CLIENT_HPP__
4#define __CARTESIAN_CONTROL_CLIENT_HPP__
5
6#include <mutex>
7#include <vector>
8
9#include <yarp/os/Bottle.h>
10#include <yarp/os/BufferedPort.h>
11#include <yarp/os/PortReaderBuffer.h>
12#include <yarp/os/RpcClient.h>
13
14#include <yarp/dev/Drivers.h>
15
16#include "ICartesianControl.h"
17#include "CartesianControlMsgs.h"
18#include "CartesianControlClient_ParamsParser.h"
19
27 namespace roboticslab
28 {
29
34class FkStreamResponder : public yarp::os::TypedReaderCallback<yarp::os::Bottle>
35{
36public:
37 void onRead(yarp::os::Bottle & b) override;
38 bool getLastStateData(ICartesianControl::ControllerState & state, const double timeout);
39
40private:
41 double localArrivalTime {0.0};
42 int mode {0};
43 double timestamp {0.0};
44 double duration {0.0};
45 float progress {0.0f};
46 bool success {false};
47 std::vector<double> x;
48 mutable std::mutex mtx;
49};
50
51} // namespace roboticslab
52
57class CartesianControlClient : public yarp::dev::DeviceDriver,
60{
61public:
62 // -- ICartesianControl declarations. Implementation in ICartesianControlImpl.cpp --
63
64 // RPC commands
65 yarp::dev::ReturnValue getState(roboticslab::ICartesianControl::ControllerState & state) override;
66 yarp::dev::ReturnValue solvePose(const std::vector<double> & xd, std::vector<double> & q) override;
67 yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) override;
68 yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) override;
69 yarp::dev::ReturnValue moveVelocity(const std::vector<double> & xdotd) override;
70 yarp::dev::ReturnValue gravityCompensation() override;
71 yarp::dev::ReturnValue forceControl(const std::vector<double> & fd) override;
72 yarp::dev::ReturnValue stopControl() override;
73 yarp::dev::ReturnValue changeTool(const std::vector<double> & x) override;
74 yarp::dev::ReturnValue actuateTool(roboticslab::ICartesianControl::Actuator command) override;
75
76 // streaming commands
77 void pose(const std::vector<double> & x) override;
78 void twist(const std::vector<double> & xdot) override;
79 void wrench(const std::vector<double> & w) override;
80
81 // configuration getters/setters
82 yarp::dev::ReturnValue setParameter(roboticslab::ICartesianControl::Config vocab, double value) override;
83 yarp::dev::ReturnValue getParameter(roboticslab::ICartesianControl::Config vocab, double * value) override;
84 yarp::dev::ReturnValue setParameters(const std::map<roboticslab::ICartesianControl::Config, double> & params) override;
85 yarp::dev::ReturnValue getParameters(std::map<roboticslab::ICartesianControl::Config, double> & params) override;
86
87 // -------- DeviceDriver declarations. Implementation in IDeviceImpl.cpp --------
88 bool open(yarp::os::Searchable & config) override;
89 bool close() override;
90
91private:
92 void handleStreamingConsumerCmd(roboticslab::ICartesianControl::Streaming vocab, const std::vector<double> & in);
93
94 yarp::os::RpcClient rpcClient;
95 yarp::os::BufferedPort<yarp::os::Bottle> fkInPort;
96 yarp::os::BufferedPort<yarp::os::Bottle> commandPort;
97
98 roboticslab::CartesianControlMsgs rpcSender;
99 roboticslab::FkStreamResponder fkStreamResponder;
100};
101
102#endif // __CARTESIAN_CONTROL_CLIENT_HPP__
Definition CartesianControlClient_ParamsParser.h:44
The CartesianControlClient class implements ICartesianControl client side.
Definition CartesianControlClient.hpp:60
yarp::dev::ReturnValue forceControl(const std::vector< double > &fd) override
Force control.
Definition ICartesianControlImpl.cpp:94
void pose(const std::vector< double > &x) override
Achieve pose.
Definition ICartesianControlImpl.cpp:122
yarp::dev::ReturnValue actuateTool(roboticslab::ICartesianControl::Actuator command) override
Actuate tool.
Definition ICartesianControlImpl.cpp:115
yarp::dev::ReturnValue stopControl() override
Stop control.
Definition ICartesianControlImpl.cpp:101
yarp::dev::ReturnValue moveVelocity(const std::vector< double > &xdotd) override
Linear move with given velocity.
Definition ICartesianControlImpl.cpp:80
yarp::dev::ReturnValue moveLinear(const std::vector< double > &xd) override
Linear move to target position.
Definition ICartesianControlImpl.cpp:73
void twist(const std::vector< double > &xdot) override
Instantaneous velocity steps.
Definition ICartesianControlImpl.cpp:129
yarp::dev::ReturnValue solvePose(const std::vector< double > &xd, std::vector< double > &q) override
Inverse kinematics.
Definition ICartesianControlImpl.cpp:57
yarp::dev::ReturnValue changeTool(const std::vector< double > &x) override
Change tool.
Definition ICartesianControlImpl.cpp:108
void wrench(const std::vector< double > &w) override
Exert force.
Definition ICartesianControlImpl.cpp:136
yarp::dev::ReturnValue getState(roboticslab::ICartesianControl::ControllerState &state) override
Current state and position.
Definition ICartesianControlImpl.cpp:30
yarp::dev::ReturnValue moveJoint(const std::vector< double > &xd) override
Move in joint space.
Definition ICartesianControlImpl.cpp:66
yarp::dev::ReturnValue getParameter(roboticslab::ICartesianControl::Config vocab, double *value) override
Retrieve a configuration parameter.
Definition ICartesianControlImpl.cpp:150
yarp::dev::ReturnValue gravityCompensation() override
Gravity compensation.
Definition ICartesianControlImpl.cpp:87
yarp::dev::ReturnValue setParameter(roboticslab::ICartesianControl::Config vocab, double value) override
Set a configuration parameter.
Definition ICartesianControlImpl.cpp:143
Responds to streaming FK messages.
Definition CartesianControlClient.hpp:35
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Streaming
Streaming vocabs.
Definition ICartesianControl.h:63
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:90
Config
Controller configuration vocabs.
Definition ICartesianControl.h:104
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6
Controller state structure.
Definition ICartesianControl.h:120