iCub-main
iKinSlv.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2018 Istituto Italiano di Tecnologia (IIT)
3  * Copyright (C) 2006-2010 RobotCub Consortium
4  * All rights reserved.
5  *
6  * This software may be modified and distributed under the terms
7  * of the BSD-3-Clause license. See the accompanying LICENSE file for
8  * details.
9 */
10 
237 #ifndef __IKINSLV_H__
238 #define __IKINSLV_H__
239 
240 #include <mutex>
241 #include <condition_variable>
242 #include <string>
243 #include <deque>
244 
245 #include <yarp/os/BufferedPort.h>
246 #include <yarp/os/PeriodicThread.h>
247 #include <yarp/sig/Vector.h>
248 #include <yarp/sig/Matrix.h>
249 
250 #include <yarp/dev/ControlBoardInterfaces.h>
251 #include <yarp/dev/PolyDriver.h>
252 
253 #include <iCub/iKin/iKinHlp.h>
254 #include <iCub/iKin/iKinIpOpt.h>
255 
256 
257 namespace iCub
258 {
259 
260 namespace iKin
261 {
262 
263 class CartesianSolver;
264 
265 class RpcProcessor : public yarp::os::PortReader
266 {
267 protected:
269 
270  virtual bool read(yarp::os::ConnectionReader &connection);
271 
272 public:
273  RpcProcessor(CartesianSolver *_slv) : slv(_slv) { }
274 };
275 
276 
277 class InputPort : public yarp::os::BufferedPort<yarp::os::Bottle>
278 {
279 protected:
281 
282  std::mutex mtx;
283 
284  bool contMode;
285  bool isNew;
286  size_t maxLen;
287  int pose;
288 
289  double token;
290  double *pToken;
291 
292  yarp::sig::Vector dof;
293  yarp::sig::Vector xd;
294 
295  virtual void onRead(yarp::os::Bottle &b);
296 
297 public:
298  InputPort(CartesianSolver *_slv);
299 
300  int &get_pose() { return pose; }
301  bool &get_contMode() { return contMode; }
302  double *get_tokenPtr() { return pToken; }
303  yarp::sig::Vector get_dof();
304  yarp::sig::Vector get_xd();
305 
306  void set_dof(const yarp::sig::Vector &_dof);
307  void reset_xd(const yarp::sig::Vector &_xd);
308  bool isNewDataEvent();
309  bool handleTarget(yarp::os::Bottle *b);
310  bool handleDOF(yarp::os::Bottle *b);
311  bool handlePose(const int newPose);
312  bool handleMode(const int newMode);
313 };
314 
315 
317 {
318 protected:
320 
321 public:
322  SolverCallback(CartesianSolver *_slv) : slv(_slv) { }
323 
324  virtual void exec(const yarp::sig::Vector &xd, const yarp::sig::Vector &q);
325 };
326 
327 
329 {
333  std::deque<yarp::os::Property> prp;
334  std::deque<bool> rvs;
335  int num;
336 };
337 
338 
344 class CartesianSolver : public yarp::os::PeriodicThread,
345  protected CartesianHelper
346 {
347 protected:
349  std::deque<yarp::dev::PolyDriver*> drv;
350  std::deque<yarp::dev::IControlLimits*> lim;
351  std::deque<yarp::dev::IEncoders*> enc;
352  std::deque<int> jnt;
353  std::deque<int*> rmp;
354 
357 
359  yarp::os::Port *rpcPort;
361  yarp::os::BufferedPort<yarp::os::Bottle> *outPort;
362  std::mutex mtx;
363 
366  unsigned int period;
367  unsigned int ctrlPose;
368  bool fullDOF;
371  bool closing;
372  bool closed;
374  bool verbosity;
379  double token;
380  double *pToken;
381 
382  yarp::sig::Matrix hwLimits;
383  yarp::sig::Matrix swLimits;
384 
385  yarp::sig::Vector unctrlJointsOld;
386  yarp::sig::Vector dof;
387 
388  yarp::sig::Vector restJntPos;
389  yarp::sig::Vector restWeights;
390 
391  yarp::sig::Vector xd_2ndTask;
392  yarp::sig::Vector w_2ndTask;
393 
394  yarp::sig::Vector qd_3rdTask;
395  yarp::sig::Vector w_3rdTask;
396  yarp::sig::Vector idx_3rdTask;
397 
398  std::mutex mtx_dofEvent;
399  std::condition_variable cv_dofEvent;
400 
401  virtual PartDescriptor *getPartDesc(yarp::os::Searchable &options)=0;
402  virtual yarp::sig::Vector solve(yarp::sig::Vector &xd);
403 
404  virtual yarp::sig::Vector &encodeDOF();
405  virtual bool decodeDOF(const yarp::sig::Vector &_dof);
406 
407  virtual bool handleJointsRestPosition(const yarp::os::Bottle *options,
408  yarp::os::Bottle *reply=NULL);
409  virtual bool handleJointsRestWeights(const yarp::os::Bottle *options,
410  yarp::os::Bottle *reply=NULL);
411 
412  yarp::dev::PolyDriver *waitPart(const yarp::os::Property &partOpt);
413 
414  bool isNewDOF(const yarp::sig::Vector &_dof);
415  bool changeDOF(const yarp::sig::Vector &_dof);
416 
417  bool alignJointsBounds();
418  bool setLimits(int axis, double min, double max);
420  void latchUncontrolledJoints(yarp::sig::Vector &joints);
421  void getFeedback(const bool wait=false);
422  void initPos();
423  void lock();
424  void unlock();
425 
426  void waitDOFHandling();
427  void postDOFHandling();
428  void fillDOFInfo(yarp::os::Bottle &reply);
429  void send(const yarp::sig::Vector &xd, const yarp::sig::Vector &x, const yarp::sig::Vector &q, double *tok);
430  void printInfo(const std::string &typ, const yarp::sig::Vector &xd, const yarp::sig::Vector &x,
431  const yarp::sig::Vector &q, const double t);
432 
433  virtual void prepareJointsRestTask();
434  virtual void respond(const yarp::os::Bottle &command, yarp::os::Bottle &reply);
435  virtual bool threadInit();
436  virtual void afterStart(bool);
437  virtual void run();
438  virtual void threadRelease();
439 
440  friend class RpcProcessor;
441  friend class InputPort;
442  friend class SolverCallback;
443 
444 public:
459  CartesianSolver(const std::string &_slvName);
460 
531  virtual bool open(yarp::os::Searchable &options);
532 
537  virtual void interrupt();
538 
542  virtual void close();
543 
549  virtual bool isClosed() const { return closed; }
550 
559  virtual bool &getTimeoutFlag() { return timeout_detected; }
560 
564  virtual void suspend();
565 
569  virtual void resume();
570 
574  virtual ~CartesianSolver();
575 };
576 
577 
585 {
586 protected:
587  virtual PartDescriptor *getPartDesc(yarp::os::Searchable &options);
588  virtual bool decodeDOF(const yarp::sig::Vector &_dof);
589 
590 public:
598  iCubArmCartesianSolver(const std::string &_slvName="armCartSolver") : CartesianSolver(_slvName) { }
599 
600  virtual bool open(yarp::os::Searchable &options);
601 };
602 
603 
611 {
612 protected:
613  virtual PartDescriptor *getPartDesc(yarp::os::Searchable &options);
614 
615 public:
623  iCubLegCartesianSolver(const std::string &_slvName="legCartSolver") : CartesianSolver(_slvName) { }
624 };
625 
626 }
627 
628 }
629 
630 #endif
631 
632 
633 
iCub::iKin::CartesianSolver::isNewDOF
bool isNewDOF(const yarp::sig::Vector &_dof)
Definition: iKinSlv.cpp:1254
iCub::iKin::CartesianSolver::printInfo
void printInfo(const std::string &typ, const yarp::sig::Vector &xd, const yarp::sig::Vector &x, const yarp::sig::Vector &q, const double t)
Definition: iKinSlv.cpp:1144
iCub::iKin::CartesianSolver::mtx
std::mutex mtx
Definition: iKinSlv.h:362
iCub::iKin::CartesianSolver::unctrlJointsOld
yarp::sig::Vector unctrlJointsOld
Definition: iKinSlv.h:385
iCub::iKin::CartesianSolver::type
std::string type
Definition: iKinSlv.h:365
iCub::iKin::CartesianSolver::handleJointsRestWeights
virtual bool handleJointsRestWeights(const yarp::os::Bottle *options, yarp::os::Bottle *reply=NULL)
Definition: iKinSlv.cpp:1226
iCub
This file contains the definition of unique IDs for the body parts and the skin parts of the robot.
Definition: emotionInterface.h:17
iCub::iKin::CartesianSolver::suspend
virtual void suspend()
Suspend the solver's main loop.
Definition: iKinSlv.cpp:1617
iCub::iKin::CartesianSolver::send
void send(const yarp::sig::Vector &xd, const yarp::sig::Vector &x, const yarp::sig::Vector &q, double *tok)
Definition: iKinSlv.cpp:1126
iCub::iKin::CartesianSolver::cmdProcessor
RpcProcessor * cmdProcessor
Definition: iKinSlv.h:358
iCub::iKin::iKinLinIneqConstr
Definition: iKinIpOpt.h:69
iCub::iKin::InputPort::get_tokenPtr
double * get_tokenPtr()
Definition: iKinSlv.h:302
iCub::iKin::iCubArmCartesianSolver::getPartDesc
virtual PartDescriptor * getPartDesc(yarp::os::Searchable &options)
Definition: iKinSlv.cpp:1761
iCub::iKin::CartesianSolver::interrupting
bool interrupting
Definition: iKinSlv.h:373
iCub::iKin::InputPort::isNewDataEvent
bool isNewDataEvent()
Definition: iKinSlv.cpp:112
iCub::iKin::iCubLegCartesianSolver
Definition: iKinSlv.h:610
iCub::iKin::iCubArmCartesianSolver::decodeDOF
virtual bool decodeDOF(const yarp::sig::Vector &_dof)
Definition: iKinSlv.cpp:1831
iCub::iKin::CartesianSolver::waitDOFHandling
void waitDOFHandling()
Definition: iKinSlv.cpp:492
iCub::iKin::CartesianSolver::getTimeoutFlag
virtual bool & getTimeoutFlag()
To be called to check whether communication timeout has been detected.
Definition: iKinSlv.h:559
iCub::iKin::CartesianHelper
Definition: iKinHlp.h:47
iCub::iKin::CartesianSolver::qd_3rdTask
yarp::sig::Vector qd_3rdTask
Definition: iKinSlv.h:394
iCub::iKin::CartesianSolver::postDOFHandling
void postDOFHandling()
Definition: iKinSlv.cpp:500
iCub::iKin::iKinChain
Definition: iKinFwd.h:354
iCub::iKin::CartesianSolver::alignJointsBounds
bool alignJointsBounds()
Definition: iKinSlv.cpp:340
iCub::iKin::CartesianSolver::respond
virtual void respond(const yarp::os::Bottle &command, yarp::os::Bottle &reply)
Definition: iKinSlv.cpp:515
iCub::iKin::SolverCallback::exec
virtual void exec(const yarp::sig::Vector &xd, const yarp::sig::Vector &q)
Defines the callback body to be called at each iteration.
Definition: iKinSlv.cpp:260
iCub::iKin::iKinIpOptMin
Definition: iKinIpOpt.h:198
iCub::iKin::CartesianSolver::w_2ndTask
yarp::sig::Vector w_2ndTask
Definition: iKinSlv.h:392
iCub::iKin::CartesianSolver::waitPart
yarp::dev::PolyDriver * waitPart(const yarp::os::Property &partOpt)
Definition: iKinSlv.cpp:301
iCub::iKin::CartesianSolver::slvName
std::string slvName
Definition: iKinSlv.h:364
iCub::iKin::InputPort::get_xd
yarp::sig::Vector get_xd()
Definition: iKinSlv.cpp:94
iCub::iKin::iKinIterateCallback
Definition: iKinIpOpt.h:43
iCub::iKin::CartesianSolver::initPos
void initPos()
Definition: iKinSlv.cpp:466
iCub::iKin::CartesianSolver
Definition: iKinSlv.h:344
iCub::iKin::PartDescriptor::prp
std::deque< yarp::os::Property > prp
Definition: iKinSlv.h:333
strain::dsp::fsc::min
const FSC min
Definition: strain.h:49
iCub::iKin::CartesianSolver::interrupt
virtual void interrupt()
Interrupt the open() method waiting for motor parts to be ready.
Definition: iKinSlv.cpp:1525
iCub::iKin::CartesianSolver::unctrlJointsNum
int unctrlJointsNum
Definition: iKinSlv.h:377
iCub::iKin::InputPort::reset_xd
void reset_xd(const yarp::sig::Vector &_xd)
Definition: iKinSlv.cpp:103
iCub::iKin::CartesianSolver::getFeedback
void getFeedback(const bool wait=false)
Definition: iKinSlv.cpp:425
iCub::iKin::InputPort::xd
yarp::sig::Vector xd
Definition: iKinSlv.h:293
iCub::iKin::InputPort::pose
int pose
Definition: iKinSlv.h:287
iCub::iKin::iCubArmCartesianSolver::open
virtual bool open(yarp::os::Searchable &options)
Configure the solver and start it up.
Definition: iKinSlv.cpp:1813
iCub::iKin::InputPort::handlePose
bool handlePose(const int newPose)
Definition: iKinSlv.cpp:162
iCub::iKin::InputPort::maxLen
size_t maxLen
Definition: iKinSlv.h:286
iCub::iKin::CartesianSolver::fillDOFInfo
void fillDOFInfo(yarp::os::Bottle &reply)
Definition: iKinSlv.cpp:507
iCub::iKin::CartesianSolver::jnt
std::deque< int > jnt
Definition: iKinSlv.h:352
iCub::iKin::CartesianSolver::fullDOF
bool fullDOF
Definition: iKinSlv.h:368
iCub::iKin::CartesianSolver::inPort
InputPort * inPort
Definition: iKinSlv.h:360
iCub::iKin::CartesianSolver::closed
bool closed
Definition: iKinSlv.h:372
iCub::iKin::CartesianSolver::lock
void lock()
Definition: iKinSlv.cpp:478
iCub::iKin::CartesianSolver::xd_2ndTask
yarp::sig::Vector xd_2ndTask
Definition: iKinSlv.h:391
iCub::iKin::CartesianSolver::swLimits
yarp::sig::Matrix swLimits
Definition: iKinSlv.h:383
strain::dsp::fsc::max
const FSC max
Definition: strain.h:48
iCub::iKin::CartesianSolver::mtx_dofEvent
std::mutex mtx_dofEvent
Definition: iKinSlv.h:398
iCub::iKin::iKinLimb
Definition: iKinFwd.h:873
iCub::iKin::CartesianSolver::contModeOld
bool contModeOld
Definition: iKinSlv.h:369
iCub::iKin::CartesianSolver::period
unsigned int period
Definition: iKinSlv.h:366
iCub::iKin::InputPort
Definition: iKinSlv.h:277
iCub::iKin::CartesianSolver::timeout_detected
bool timeout_detected
Definition: iKinSlv.h:375
iCub::iKin::InputPort::get_contMode
bool & get_contMode()
Definition: iKinSlv.h:301
iCub::iKin::CartesianSolver::rmp
std::deque< int * > rmp
Definition: iKinSlv.h:353
iCub::iKin::SolverCallback::SolverCallback
SolverCallback(CartesianSolver *_slv)
Definition: iKinSlv.h:322
iKinIpOpt.h
iCub::iKin::CartesianSolver::drv
std::deque< yarp::dev::PolyDriver * > drv
Definition: iKinSlv.h:349
iKinHlp.h
iCub::iKin::CartesianSolver::configured
bool configured
Definition: iKinSlv.h:370
iCub::iKin::iCubArmCartesianSolver::iCubArmCartesianSolver
iCubArmCartesianSolver(const std::string &_slvName="armCartSolver")
Constructor.
Definition: iKinSlv.h:598
iCub::iKin::CartesianSolver::handleJointsRestPosition
virtual bool handleJointsRestPosition(const yarp::os::Bottle *options, yarp::os::Bottle *reply=NULL)
Definition: iKinSlv.cpp:1195
iCub::iKin::InputPort::slv
CartesianSolver * slv
Definition: iKinSlv.h:280
iCub::iKin::PartDescriptor::chn
iKinChain * chn
Definition: iKinSlv.h:331
iCub::iKin::InputPort::dof
yarp::sig::Vector dof
Definition: iKinSlv.h:292
iCub::iKin::InputPort::get_pose
int & get_pose()
Definition: iKinSlv.h:300
iCub::iKin::InputPort::contMode
bool contMode
Definition: iKinSlv.h:284
iCub::iKin::iCubLegCartesianSolver::iCubLegCartesianSolver
iCubLegCartesianSolver(const std::string &_slvName="legCartSolver")
Constructor.
Definition: iKinSlv.h:623
iCub::iKin::InputPort::get_dof
yarp::sig::Vector get_dof()
Definition: iKinSlv.cpp:85
iCub::iKin::InputPort::onRead
virtual void onRead(yarp::os::Bottle &b)
Definition: iKinSlv.cpp:208
iCub::iKin::CartesianSolver::idx_3rdTask
yarp::sig::Vector idx_3rdTask
Definition: iKinSlv.h:396
iCub::iKin::SolverCallback
Definition: iKinSlv.h:316
iCub::iKin::CartesianSolver::run
virtual void run()
Definition: iKinSlv.cpp:1644
iCub::iKin::CartesianSolver::ctrlPose
unsigned int ctrlPose
Definition: iKinSlv.h:367
iCub::iKin::CartesianSolver::rpcPort
yarp::os::Port * rpcPort
Definition: iKinSlv.h:359
x
x
Definition: compute_ekf_sym.m:21
iCub::iKin::CartesianSolver::verbosity
bool verbosity
Definition: iKinSlv.h:374
iCub::iKin::CartesianSolver::closing
bool closing
Definition: iKinSlv.h:371
iCub::iKin::InputPort::handleMode
bool handleMode(const int newMode)
Definition: iKinSlv.cpp:186
iCub::iKin::CartesianSolver::maxPartJoints
int maxPartJoints
Definition: iKinSlv.h:376
iCub::iKin::PartDescriptor::lmb
iKinLimb * lmb
Definition: iKinSlv.h:330
string
string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS}") include_directories($
Definition: CMakeLists.txt:9
iCub::iKin::RpcProcessor::RpcProcessor
RpcProcessor(CartesianSolver *_slv)
Definition: iKinSlv.h:273
iCub::iKin::CartesianSolver::prepareJointsRestTask
virtual void prepareJointsRestTask()
Definition: iKinSlv.cpp:1489
iCub::iKin::CartesianSolver::lim
std::deque< yarp::dev::IControlLimits * > lim
Definition: iKinSlv.h:350
iCub::iKin::CartesianSolver::clb
SolverCallback * clb
Definition: iKinSlv.h:356
iCub::iKin::CartesianSolver::restWeights
yarp::sig::Vector restWeights
Definition: iKinSlv.h:389
iCub::iKin::CartesianSolver::cv_dofEvent
std::condition_variable cv_dofEvent
Definition: iKinSlv.h:399
iCub::iKin::CartesianSolver::threadInit
virtual bool threadInit()
Definition: iKinSlv.cpp:1595
iCub::iKin::InputPort::mtx
std::mutex mtx
Definition: iKinSlv.h:282
iCub::iKin::InputPort::set_dof
void set_dof(const yarp::sig::Vector &_dof)
Definition: iKinSlv.cpp:77
iCub::iKin::InputPort::pToken
double * pToken
Definition: iKinSlv.h:290
iCub::iKin::InputPort::token
double token
Definition: iKinSlv.h:289
iCub::iKin::CartesianSolver::slv
iKinIpOptMin * slv
Definition: iKinSlv.h:355
iCub::iKin::CartesianSolver::solve
virtual yarp::sig::Vector solve(yarp::sig::Vector &xd)
Definition: iKinSlv.cpp:1515
iCub::iKin::PartDescriptor
Definition: iKinSlv.h:328
iCub::iKin::CartesianSolver::getPartDesc
virtual PartDescriptor * getPartDesc(yarp::os::Searchable &options)=0
iCub::iKin::InputPort::isNew
bool isNew
Definition: iKinSlv.h:285
iCub::iKin::CartesianSolver::changeDOF
bool changeDOF(const yarp::sig::Vector &_dof)
Definition: iKinSlv.cpp:1458
iCub::iKin::CartesianSolver::w_3rdTask
yarp::sig::Vector w_3rdTask
Definition: iKinSlv.h:395
iCub::iKin::CartesianSolver::decodeDOF
virtual bool decodeDOF(const yarp::sig::Vector &_dof)
Definition: iKinSlv.cpp:1175
iCub::iKin::iCubArmCartesianSolver
Definition: iKinSlv.h:584
iCub::iKin::CartesianSolver::close
virtual void close()
Stop the solver and dispose it.
Definition: iKinSlv.cpp:1532
iCub::iKin::CartesianSolver::threadRelease
virtual void threadRelease()
Definition: iKinSlv.cpp:1742
iCub::iKin::RpcProcessor::read
virtual bool read(yarp::os::ConnectionReader &connection)
iCub::iKin::CartesianSolver::~CartesianSolver
virtual ~CartesianSolver()
Default destructor.
Definition: iKinSlv.cpp:1749
iCub::iKin::CartesianSolver::outPort
yarp::os::BufferedPort< yarp::os::Bottle > * outPort
Definition: iKinSlv.h:361
iCub::iKin::CartesianSolver::prt
PartDescriptor * prt
Definition: iKinSlv.h:348
iCub::iKin::SolverCallback::slv
CartesianSolver * slv
Definition: iKinSlv.h:319
iCub::iKin::RpcProcessor
Definition: iKinSlv.h:265
iCub::iKin::CartesianSolver::resume
virtual void resume()
Resume the solver's main loop.
Definition: iKinSlv.cpp:1630
iCub::iKin::iCubLegCartesianSolver::getPartDesc
virtual PartDescriptor * getPartDesc(yarp::os::Searchable &options)
Definition: iKinSlv.cpp:1857
iCub::iKin::CartesianSolver::isClosed
virtual bool isClosed() const
To be called to check whether the solver has received a [quit] request.
Definition: iKinSlv.h:549
iCub::iKin::CartesianSolver::CartesianSolver
CartesianSolver(const std::string &_slvName)
Constructor.
Definition: iKinSlv.cpp:267
iCub::iKin::CartesianSolver::hwLimits
yarp::sig::Matrix hwLimits
Definition: iKinSlv.h:382
iCub::iKin::CartesianSolver::dof
yarp::sig::Vector dof
Definition: iKinSlv.h:386
iCub::iKin::CartesianSolver::setLimits
bool setLimits(int axis, double min, double max)
Definition: iKinSlv.cpp:375
iCub::iKin::CartesianSolver::countUncontrolledJoints
void countUncontrolledJoints()
Definition: iKinSlv.cpp:401
iCub::iKin::CartesianSolver::unlock
void unlock()
Definition: iKinSlv.cpp:485
iCub::iKin::CartesianSolver::pToken
double * pToken
Definition: iKinSlv.h:380
iCub::iKin::CartesianSolver::enc
std::deque< yarp::dev::IEncoders * > enc
Definition: iKinSlv.h:351
iCub::iKin::CartesianSolver::token
double token
Definition: iKinSlv.h:379
iCub::iKin::CartesianSolver::ping_robot_tmo
double ping_robot_tmo
Definition: iKinSlv.h:378
iCub::iKin::PartDescriptor::num
int num
Definition: iKinSlv.h:335
iCub::iKin::RpcProcessor::slv
CartesianSolver * slv
Definition: iKinSlv.h:268
iCub::iKin::CartesianSolver::restJntPos
yarp::sig::Vector restJntPos
Definition: iKinSlv.h:388
iCub::iKin::InputPort::InputPort
InputPort(CartesianSolver *_slv)
Definition: iKinSlv.cpp:60
iCub::iKin::PartDescriptor::rvs
std::deque< bool > rvs
Definition: iKinSlv.h:334
iCub::iKin::CartesianSolver::encodeDOF
virtual yarp::sig::Vector & encodeDOF()
Definition: iKinSlv.cpp:1160
iCub::iKin::CartesianSolver::afterStart
virtual void afterStart(bool)
Definition: iKinSlv.cpp:1607
iCub::iKin::CartesianSolver::open
virtual bool open(yarp::os::Searchable &options)
Configure the solver and start it up.
Definition: iKinSlv.cpp:1270
iCub::iKin::PartDescriptor::cns
iKinLinIneqConstr * cns
Definition: iKinSlv.h:332
iCub::iKin::InputPort::handleDOF
bool handleDOF(yarp::os::Bottle *b)
Definition: iKinSlv.cpp:141
iCub::iKin::CartesianSolver::latchUncontrolledJoints
void latchUncontrolledJoints(yarp::sig::Vector &joints)
Definition: iKinSlv.cpp:408
iCub::iKin::InputPort::handleTarget
bool handleTarget(yarp::os::Bottle *b)
Definition: iKinSlv.cpp:125