19#ifndef __SERVERCARTESIANCONTROLLER_H__
20#define __SERVERCARTESIANCONTROLLER_H__
23#include <condition_variable>
30#include <yarp/os/all.h>
31#include <yarp/dev/all.h>
32#include <yarp/sig/all.h>
59 bool read(yarp::os::ConnectionReader &connection);
70 void onRead(yarp::os::Bottle &command);
85 void reset(
const yarp::sig::Vector &x0);
86 yarp::sig::Vector
integrate(
const yarp::sig::Vector &vel);
105 public yarp::dev::IMultipleWrapper,
106 public yarp::dev::ICartesianControl,
107 public yarp::os::PeriodicThread,
144 std::deque<DriverDescriptor>
lDsc;
145 std::deque<yarp::dev::IControlMode*>
lMod;
146 std::deque<yarp::dev::IEncoders*>
lEnc;
147 std::deque<yarp::dev::IEncodersTimed*>
lEnt;
148 std::deque<yarp::dev::IPidControl*>
lPid;
149 std::deque<yarp::dev::IControlLimits*>
lLim;
150 std::deque<yarp::dev::IVelocityControl*>
lVel;
151 std::deque<yarp::dev::IPositionDirect*>
lPos;
152 std::deque<yarp::dev::IPositionControl*>
lStp;
184 yarp::sig::Vector
fb;
185 yarp::sig::Vector
q0;
219 std::map<std::string,yarp::dev::CartesianEvent*>
eventsMap;
233 bool respond(
const yarp::os::Bottle &command, yarp::os::Bottle &reply);
240 void stopLimb(
const bool execStopPosition=
true);
241 bool goTo(
unsigned int _ctrlPose,
const yarp::sig::Vector &xd,
const double t,
const bool latchToken=
false);
243 void notifyEvent(
const std::string &event,
const double checkPoint=-1.0);
273 bool open(yarp::os::Searchable &config);
279 bool attachAll(
const yarp::dev::PolyDriverList &
p);
288 bool getPose(yarp::sig::Vector &
x, yarp::sig::Vector &o, yarp::os::Stamp *stamp=NULL);
289 bool getPose(
const int axis, yarp::sig::Vector &
x, yarp::sig::Vector &o, yarp::os::Stamp *stamp=NULL);
290 bool goToPose(
const yarp::sig::Vector &xd,
const yarp::sig::Vector &od,
const double t=0.0);
291 bool goToPosition(
const yarp::sig::Vector &xd,
const double t=0.0);
292 bool goToPoseSync(
const yarp::sig::Vector &xd,
const yarp::sig::Vector &od,
const double t=0.0);
294 bool getDesired(yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat);
295 bool askForPose(
const yarp::sig::Vector &xd,
const yarp::sig::Vector &od, yarp::sig::Vector &xdhat,
296 yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat);
297 bool askForPose(
const yarp::sig::Vector &
q0,
const yarp::sig::Vector &xd,
const yarp::sig::Vector &od,
298 yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat);
299 bool askForPosition(
const yarp::sig::Vector &xd, yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat,
300 yarp::sig::Vector &qdhat);
301 bool askForPosition(
const yarp::sig::Vector &
q0,
const yarp::sig::Vector &xd, yarp::sig::Vector &xdhat,
302 yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat);
303 bool getDOF(yarp::sig::Vector &curDof);
304 bool setDOF(
const yarp::sig::Vector &newDof, yarp::sig::Vector &curDof);
305 bool getRestPos(yarp::sig::Vector &curRestPos);
306 bool setRestPos(
const yarp::sig::Vector &newRestPos, yarp::sig::Vector &curRestPos);
308 bool setRestWeights(
const yarp::sig::Vector &newRestWeights, yarp::sig::Vector &curRestWeights);
309 bool getLimits(
const int axis,
double *min,
double *max);
310 bool setLimits(
const int axis,
const double min,
const double max);
317 bool setTaskVelocities(
const yarp::sig::Vector &xdot,
const yarp::sig::Vector &odot);
318 bool attachTipFrame(
const yarp::sig::Vector &
x,
const yarp::sig::Vector &o);
319 bool getTipFrame(yarp::sig::Vector &
x, yarp::sig::Vector &o);
322 bool waitMotionDone(
const double period=0.1,
const double timeout=0.0);
327 bool getInfo(yarp::os::Bottle &info);
330 bool tweakSet(
const yarp::os::Bottle &options);
331 bool tweakGet(yarp::os::Bottle &options);
ServerCartesianController * server
void onRead(yarp::os::Bottle &command)
ServerCartesianController * server
bool read(yarp::os::ConnectionReader &connection)
servercartesiancontroller : implements the server part of the Cartesian Interface.
bool tweakSet(const yarp::os::Bottle &options)
yarp::os::BufferedPort< yarp::os::Bottle > portEvent
bool setTrackingMode(const bool f)
iCub::iKin::MultiRefMinJerkCtrl * ctrl
iCub::iKin::iKinLimb * limbState
double txTokenLatchedStopControl
bool deleteContexts(yarp::os::Bottle *contextIdList)
yarp::os::Property plantModelProperties
std::deque< yarp::dev::IVelocityControl * > lVel
yarp::os::Bottle sendCtrlCmdSingleJointPosition()
yarp::os::Bottle listMotionOngoingEvents()
ServerCartesianController(yarp::os::Searchable &config)
virtual ~ServerCartesianController()
yarp::os::BufferedPort< yarp::sig::Vector > portState
void notifyEvent(const std::string &event, const double checkPoint=-1.0)
std::deque< yarp::dev::IPositionControl * > lStp
yarp::os::Bottle sendCtrlCmdMultipleJointsVelocity()
bool askForPosition(const yarp::sig::Vector &xd, yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat)
std::map< int, Context > contextMap
bool getDOF(yarp::sig::Vector &curDof)
yarp::os::Bottle sendCtrlCmdMultipleJointsPosition()
yarp::os::RpcClient portSlvRpc
bool getPose(const int axis, yarp::sig::Vector &x, yarp::sig::Vector &o, yarp::os::Stamp *stamp=NULL)
std::deque< DriverDescriptor > lDsc
bool getRestWeights(yarp::sig::Vector &curRestWeights)
bool setTrajTimeHelper(const double t)
yarp::os::Stamp debugInfo
double txTokenLatchedGoToRpc
yarp::os::BufferedPort< yarp::os::Bottle > portDebugInfo
yarp::sig::Vector xdot_set
CartesianCtrlRpcProcessor * rpcProcessor
bool getTipFrame(yarp::sig::Vector &x, yarp::sig::Vector &o)
bool getTrajTime(double *t)
bool goToPosition(const yarp::sig::Vector &xd, const double t=0.0)
bool attachAll(const yarp::dev::PolyDriverList &p)
void motionOngoingEventsHandling()
std::deque< yarp::dev::IEncodersTimed * > lEnt
iCub::iKin::iKinChain * chainState
bool setLimits(const int axis, const double min, const double max)
double getFeedback(yarp::sig::Vector &_fb)
bool multipleJointsControlEnabled
bool checkMotionDone(bool *f)
bool open(yarp::os::Searchable &config)
bool setTrackingModeHelper(const bool f)
yarp::os::Bottle sendCtrlCmdSingleJointVelocity()
bool getReferenceMode(bool *f)
bool getPosePriority(std::string &p)
bool getInTargetTol(double *tol)
bool askForPose(const yarp::sig::Vector &q0, const yarp::sig::Vector &xd, const yarp::sig::Vector &od, yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat)
bool setRestWeights(const yarp::sig::Vector &newRestWeights, yarp::sig::Vector &curRestWeights)
yarp::os::Bottle(ServerCartesianController::* sendCtrlCmd)()
std::multiset< double > motionOngoingEventsCurrent
bool attachTipFrame(const yarp::sig::Vector &x, const yarp::sig::Vector &o)
yarp::os::BufferedPort< yarp::os::Bottle > portSlvOut
bool setTrajTime(const double t)
bool getTask2ndOptions(yarp::os::Value &v)
std::deque< yarp::dev::IControlMode * > lMod
bool registerEvent(yarp::dev::CartesianEvent &event)
bool getLimits(const int axis, double *min, double *max)
bool unregisterMotionOngoingEvent(const double checkPoint)
yarp::os::RpcServer portRpc
std::deque< yarp::dev::IControlLimits * > lLim
void setJointsCtrlMode(const std::vector< int > &jointsToSet)
bool tweakGet(yarp::os::Bottle &options)
bool waitMotionDone(const double period=0.1, const double timeout=0.0)
bool setTask2ndOptions(const yarp::os::Value &v)
bool setInTargetTolHelper(const double tol)
bool respond(const yarp::os::Bottle &command, yarp::os::Bottle &reply)
bool getSolverConvergenceOptions(yarp::os::Bottle &options)
bool setPosePriority(const std::string &p)
bool askForPose(const yarp::sig::Vector &xd, const yarp::sig::Vector &od, yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat)
bool getTaskVelocities(yarp::sig::Vector &xdot, yarp::sig::Vector &odot)
int taskRefVelPeriodFactor
bool goToPoseSync(const yarp::sig::Vector &xd, const yarp::sig::Vector &od, const double t=0.0)
bool askForPosition(const yarp::sig::Vector &q0, const yarp::sig::Vector &xd, yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat)
bool getInfo(yarp::os::Bottle &info)
bool setSolverConvergenceOptions(const yarp::os::Bottle &options)
iCub::iKin::iKinLimb * limbPlan
TaskRefVelTargetGenerator * taskRefVelTargetGen
bool goToPose(const yarp::sig::Vector &xd, const yarp::sig::Vector &od, const double t=0.0)
std::map< std::string, yarp::dev::CartesianEvent * > eventsMap
bool unregisterEvent(yarp::dev::CartesianEvent &event)
bool goTo(unsigned int _ctrlPose, const yarp::sig::Vector &xd, const double t, const bool latchToken=false)
bool areJointsHealthyAndSet(std::vector< int > &jointsToSet)
void motionOngoingEventsFlush()
yarp::os::BufferedPort< yarp::os::Bottle > portSlvIn
bool setTaskVelocities(const yarp::sig::Vector &xdot, const yarp::sig::Vector &odot)
std::multiset< double > motionOngoingEvents
bool goToPositionSync(const yarp::sig::Vector &xd, const double t=0.0)
CartesianCtrlCommandPort * portCmd
bool setRestPos(const yarp::sig::Vector &newRestPos, yarp::sig::Vector &curRestPos)
iCub::iKin::iKinChain * chainPlan
bool storeContext(int *id)
ServerCartesianController()
bool restoreContext(const int id)
bool getTrackingMode(bool *f)
std::deque< yarp::dev::IPositionDirect * > lPos
bool setReferenceMode(const bool f)
std::deque< yarp::dev::IEncoders * > lEnc
yarp::os::Stamp eventInfo
void stopLimb(const bool execStopPosition=true)
yarp::dev::PolyDriverList drivers
std::condition_variable cv_syncEvent
bool setInTargetTol(const double tol)
bool deleteContext(const int id)
bool setDOF(const yarp::sig::Vector &newDof, yarp::sig::Vector &curDof)
bool getRestPos(yarp::sig::Vector &curRestPos)
bool getPose(yarp::sig::Vector &x, yarp::sig::Vector &o, yarp::os::Stamp *stamp=NULL)
bool getDesired(yarp::sig::Vector &xdhat, yarp::sig::Vector &odhat, yarp::sig::Vector &qdhat)
bool getJointsVelocities(yarp::sig::Vector &qdot)
SmithPredictor smithPredictor
bool registerMotionOngoingEvent(const double checkPoint)
std::deque< yarp::dev::IPidControl * > lPid
iCub::ctrl::Integrator * I
void reset(const yarp::sig::Vector &x0)
yarp::sig::Vector integrate(const yarp::sig::Vector &vel)
virtual ~TaskRefVelTargetGenerator()
A class for defining a saturated integrator based on Tustin formula: .
Helper class providing useful methods to deal with Cartesian Solver options.
A class derived from iKinCtrl implementing the multi-referential approach.
A Base class for defining a Serial Link Chain.
A class for defining generic Limb.
yarp::sig::Vector minAbsVels
yarp::os::Bottle solverConvergence
yarp::sig::Vector restPos
yarp::sig::Vector restWeights