kinematics-dynamics
Loading...
Searching...
No Matches
KdlSolver.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __KDL_SOLVER_HPP__
4#define __KDL_SOLVER_HPP__
5
6#include <mutex>
7
8#include <yarp/dev/DeviceDriver.h>
9
10#include <kdl/chain.hpp>
11#include <kdl/chainfksolver.hpp>
12#include <kdl/chainiksolver.hpp>
13#include <kdl/chainidsolver.hpp>
14
15#include "ICartesianSolver.h"
16#include "KdlSolver_ParamsParser.h"
17#include "LogComponent.hpp"
18
30class KdlSolver : public yarp::dev::DeviceDriver,
33{
34public:
35 // -- ICartesianSolver declarations. Implementation in ICartesianSolverImpl.cpp --
36
37 // Get number of joints for which the solver has been configured.
38 yarp::dev::ReturnValue getNumJoints(std::size_t & numJoints) override;
39
40 // Get number of TCPs for which the solver has been configured.
41 yarp::dev::ReturnValue getNumTcps(std::size_t & numTcps) override;
42
43 // Append an additional link.
44 yarp::dev::ReturnValue appendLink(const std::vector<double> & x) override;
45
46 // Restore original kinematic chain.
47 yarp::dev::ReturnValue restoreOriginalChain() override;
48
49 // Change reference frame.
50 yarp::dev::ReturnValue changeOrigin(const std::vector<double> & x_old_obj, const std::vector<double> & x_new_old, std::vector<double> & x_new_obj) override;
51
52 // Perform forward kinematics.
53 yarp::dev::ReturnValue forwardKinematics(const std::vector<double> & q, std::vector<double> & x) override;
54
55 // Obtain difference between supplied pose inputs.
56 yarp::dev::ReturnValue poseDiff(const std::vector<double> & xLhs, const std::vector<double> & xRhs, std::vector<double> & xOut) override;
57
58 // Perform inverse kinematics.
59 yarp::dev::ReturnValue inverseKinematics(const std::vector<double> & xd, const std::vector<double> & qGuess, std::vector<double> & q, Frame frame) override;
60
61 // Perform differential inverse kinematics.
62 yarp::dev::ReturnValue diffInverseKinematics(const std::vector<double> & q, const std::vector<double> & xdot, std::vector<double> & qdot, Frame frame) override;
63
64 // Perform inverse dynamics.
65 yarp::dev::ReturnValue inverseDynamics(const std::vector<double> & q, std::vector<double> & t) override;
66
67 // Perform inverse dynamics.
68 yarp::dev::ReturnValue inverseDynamics(const std::vector<double> & q, const std::vector<double> & qdot, const std::vector<double> & qdotdot,
69 const std::vector<double> & ftip, std::vector<double> & t, Frame frame) override;
70
71 // -------- DeviceDriver declarations. Implementation in IDeviceImpl.cpp --------
72
73 bool open(yarp::os::Searchable & config) override;
74 bool close() override;
75
76private:
77 inline const yarp::os::LogComponent & logc() const
78 { return !m_quiet ? KDLS() : KDLS_QUIET(); }
79
80 mutable std::mutex mtx;
81
82 KDL::Chain chain;
83 KDL::Chain originalChain;
84
85 KDL::ChainFkSolverPos * fkSolverPos {nullptr};
86 KDL::ChainIkSolverPos * ikSolverPos {nullptr};
87 KDL::ChainIkSolverVel * ikSolverVel {nullptr};
88 KDL::ChainIdSolver * idSolver {nullptr};
89};
90
91#endif // __KDL_SOLVER_HPP__
Definition KdlSolver_ParamsParser.h:57
The KdlSolver class implements ICartesianSolver.
Definition KdlSolver.hpp:33
yarp::dev::ReturnValue getNumJoints(std::size_t &numJoints) override
Get number of joints for which the solver has been configured.
Definition ICartesianSolverImpl.cpp:19
yarp::dev::ReturnValue restoreOriginalChain() override
Restore original kinematic chain.
Definition ICartesianSolverImpl.cpp:53
yarp::dev::ReturnValue inverseKinematics(const std::vector< double > &xd, const std::vector< double > &qGuess, std::vector< double > &q, Frame frame) override
Perform inverse kinematics.
Definition ICartesianSolverImpl.cpp:118
yarp::dev::ReturnValue inverseDynamics(const std::vector< double > &q, std::vector< double > &t) override
Perform inverse dynamics.
Definition ICartesianSolverImpl.cpp:227
yarp::dev::ReturnValue getNumTcps(std::size_t &numTcps) override
Get number of TCPs for which the solver has been configured.
Definition ICartesianSolverImpl.cpp:27
yarp::dev::ReturnValue poseDiff(const std::vector< double > &xLhs, const std::vector< double > &xRhs, std::vector< double > &xOut) override
Obtain difference between supplied pose inputs.
Definition ICartesianSolverImpl.cpp:105
yarp::dev::ReturnValue diffInverseKinematics(const std::vector< double > &q, const std::vector< double > &xdot, std::vector< double > &qdot, Frame frame) override
Perform differential inverse kinematics.
Definition ICartesianSolverImpl.cpp:171
yarp::dev::ReturnValue appendLink(const std::vector< double > &x) override
Append an additional link.
Definition ICartesianSolverImpl.cpp:35
yarp::dev::ReturnValue changeOrigin(const std::vector< double > &x_old_obj, const std::vector< double > &x_new_old, std::vector< double > &x_new_obj) override
Change origin in which a pose is expressed.
Definition ICartesianSolverImpl.cpp:69
yarp::dev::ReturnValue forwardKinematics(const std::vector< double > &q, std::vector< double > &x) override
Perform forward kinematics.
Definition ICartesianSolverImpl.cpp:82
Abstract base class for a cartesian solver.
Definition ICartesianSolver.h:19
Frame
Lists supported reference frames.
Definition ICartesianSolver.h:23