3#ifndef __BASIC_CARTESIAN_CONTROL_HPP__
4#define __BASIC_CARTESIAN_CONTROL_HPP__
12#include <yarp/conf/version.h>
14#include <yarp/os/PeriodicThread.h>
16#include <yarp/dev/DeviceDriver.h>
17#include <yarp/dev/PolyDriver.h>
18#include <yarp/dev/ControlBoardInterfaces.h>
19#include <yarp/dev/IPreciselyTimed.h>
21#include <kdl/trajectory.hpp>
23#include "ICartesianSolver.h"
24#include "ICartesianControl.h"
25#include "BasicCartesianControl_ParamsParser.h"
107 public yarp::os::PeriodicThread,
119 yarp::dev::ReturnValue
solvePose(
const std::vector<double> & xd, std::vector<double> & q)
override;
120 yarp::dev::ReturnValue
moveJoint(
const std::vector<double> & xd)
override;
121 yarp::dev::ReturnValue
moveLinear(
const std::vector<double> & xd)
override;
122 yarp::dev::ReturnValue
moveVelocity(
const std::vector<double> & xdotd)
override;
124 yarp::dev::ReturnValue
forceControl(
const std::vector<double> &
fd)
override;
126 yarp::dev::ReturnValue
changeTool(
const std::vector<double> & x)
override;
130 void pose(
const std::vector<double> & x)
override;
131 void twist(
const std::vector<double> & xdot)
override;
132 void wrench(
const std::vector<double> & w)
override;
137 yarp::dev::ReturnValue
setParameters(
const roboticslab::ICartesianControl::config_map_t & params)
override;
138 yarp::dev::ReturnValue
getParameters(roboticslab::ICartesianControl::config_map_t & params)
override;
144 bool open(yarp::os::Searchable & config)
override;
145 bool close()
override;
151 template <
typename Fn>
156 {
if (handler) handler(); }
158 void suppress()
const
159 { handler =
nullptr; }
162 mutable std::function<void()> handler;
165 double getTimestamp();
168 bool checkJointLimits(
const std::vector<double> & q);
169 bool checkJointLimits(
const std::vector<double> & q,
const std::vector<double> & qdot);
170 bool checkJointVelocities(
const std::vector<double> & qdot);
171 bool doFailFastChecks(
const std::vector<double> & initialQ);
172#if YARP_VERSION_COMPARE(>=, 4,0,0)
173 bool checkControlModes(yarp::dev::ControlModeEnum mode);
174 bool setControlModes(yarp::dev::SelectableControlModeEnum mode);
176 bool checkControlModes(
int mode);
177 bool setControlModes(
int mode);
180 bool computeIsocronousSpeeds(
const std::vector<double> & q,
const std::vector<double> & qd, std::vector<double> & qdot);
182 void handleMovj(
const std::vector<double> & q,
const StateWatcher & watcher);
183 void handleMovelVel(
const std::vector<double> & q,
const StateWatcher & watcher);
184 void handleMovelPosd(
const std::vector<double> & q,
const StateWatcher & watcher);
185 void handleMovv(
const std::vector<double> & q,
const StateWatcher & watcher);
186 void handleGcmp(
const std::vector<double> & q,
const StateWatcher & watcher);
187 void handleForc(
const std::vector<double> & q,
const std::vector<double> & qdot,
const std::vector<double> & qdotdot,
const StateWatcher & watcher);
189 yarp::dev::PolyDriver solverDevice;
192 yarp::dev::PolyDriver robotDevice;
193 yarp::dev::IControlMode * iControlMode {
nullptr};
194 yarp::dev::IEncoders * iEncoders {
nullptr};
195 yarp::dev::IPositionControl * iPositionControl {
nullptr};
196 yarp::dev::IPositionDirect * iPositionDirect {
nullptr};
197 yarp::dev::IPreciselyTimed * iPreciselyTimed {
nullptr};
198 yarp::dev::ITorqueControl * iTorqueControl {
nullptr};
199 yarp::dev::IVelocityControl * iVelocityControl {
nullptr};
203#if YARP_VERSION_COMPARE(>=, 4,0,0)
204 std::size_t numJoints {0};
218 std::vector<double>
fd;
220 int encoderErrors {0};
221 double trajectoryStartTime {0.0};
223 std::atomic<double> maxTrajectoryDuration {0.0};
224 std::atomic<bool> cmcSuccess {
true};
225 std::atomic<float> cmcProgress {1.0f};
227 std::vector<double> qMin, qMax;
228 std::vector<double> qdotMin, qdotMax;
229 std::vector<double> qRefSpeeds;
Definition BasicCartesianControl.hpp:149
Definition BasicCartesianControl_ParamsParser.h:51
The BasicCartesianControl class implements ICartesianControl.
Definition BasicCartesianControl.hpp:110
void wrench(const std::vector< double > &w) override
Exert force.
Definition ICartesianControlImpl.cpp:682
yarp::dev::ReturnValue actuateTool(roboticslab::ICartesianControl::Actuator command) override
Actuate tool.
Definition ICartesianControlImpl.cpp:562
yarp::dev::ReturnValue getState(roboticslab::ICartesianControl::ControllerState &state) override
Current state and position.
Definition ICartesianControlImpl.cpp:29
yarp::dev::ReturnValue moveLinear(const std::vector< double > &xd) override
Linear move to target position.
Definition ICartesianControlImpl.cpp:214
yarp::dev::ReturnValue moveJoint(const std::vector< double > &xd) override
Move in joint space.
Definition ICartesianControlImpl.cpp:93
yarp::dev::ReturnValue setParameters(const roboticslab::ICartesianControl::config_map_t ¶ms) override
Set multiple configuration parameters.
Definition ICartesianControlImpl.cpp:931
yarp::dev::ReturnValue forceControl(const std::vector< double > &fd) override
Force control.
Definition ICartesianControlImpl.cpp:457
std::vector< double > vmoStored
Definition BasicCartesianControl.hpp:212
yarp::dev::ReturnValue getParameters(roboticslab::ICartesianControl::config_map_t ¶ms) override
Retrieve multiple configuration parameters.
Definition ICartesianControlImpl.cpp:960
yarp::dev::ReturnValue getParameter(roboticslab::ICartesianControl::Config vocab, roboticslab::ICartesianControl::config_value_t &value) override
Retrieve a configuration parameter.
Definition ICartesianControlImpl.cpp:891
yarp::dev::ReturnValue changeTool(const std::vector< double > &x) override
Change tool.
Definition ICartesianControlImpl.cpp:535
void twist(const std::vector< double > &xdot) override
Instantaneous velocity steps.
Definition ICartesianControlImpl.cpp:630
yarp::dev::ReturnValue solvePose(const std::vector< double > &xd, std::vector< double > &q) override
Inverse kinematics.
Definition ICartesianControlImpl.cpp:64
void pose(const std::vector< double > &x) override
Achieve pose.
Definition ICartesianControlImpl.cpp:574
std::vector< std::unique_ptr< KDL::Trajectory > > trajectories
Definition BasicCartesianControl.hpp:215
yarp::dev::ReturnValue setParameter(roboticslab::ICartesianControl::Config vocab, roboticslab::ICartesianControl::config_value_t value) override
Set a configuration parameter.
Definition ICartesianControlImpl.cpp:752
yarp::dev::ReturnValue stopControl() override
Stop control.
Definition ICartesianControlImpl.cpp:506
yarp::dev::ReturnValue gravityCompensation() override
Gravity compensation.
Definition ICartesianControlImpl.cpp:424
std::vector< double > fd
Definition BasicCartesianControl.hpp:218
yarp::dev::ReturnValue moveVelocity(const std::vector< double > &xdotd) override
Linear move with given velocity.
Definition ICartesianControlImpl.cpp:335
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Streaming
Streaming vocabs.
Definition ICartesianControl.h:44
@ NOT_SET
Streaming command not set.
Mode
Controller mode vocabs.
Definition ICartesianControl.h:57
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:72
Config
Controller configuration vocabs.
Definition ICartesianControl.h:86
Abstract base class for a cartesian solver.
Definition ICartesianSolver.h:19
Frame
Lists supported reference frames.
Definition ICartesianSolver.h:23
Controller state structure.
Definition ICartesianControl.h:102