kinematics-dynamics
Loading...
Searching...
No Matches
ICartesianSolver.h
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __I_CARTESIAN_SOLVER__
4#define __I_CARTESIAN_SOLVER__
5
6#include <vector>
7
8#include <yarp/os/Vocab.h>
9
10#include <yarp/dev/ReturnValue.h>
11
12namespace roboticslab
13{
14
19{
20public:
22 enum class Frame
23 {
24 BASE = yarp::os::createVocab32('c','p','f','b'),
25 TCP = yarp::os::createVocab32('c','p','f','t')
26 };
27
29 virtual ~ICartesianSolver() = default;
30
36 virtual yarp::dev::ReturnValue getNumJoints(std::size_t & numJoints) = 0;
37
43 virtual yarp::dev::ReturnValue getNumTcps(std::size_t & numTcps) = 0;
44
54 virtual yarp::dev::ReturnValue appendLink(const std::vector<double> & x) = 0;
55
61 virtual yarp::dev::ReturnValue restoreOriginalChain() = 0;
62
78 virtual yarp::dev::ReturnValue changeOrigin(const std::vector<double> & x_old_obj,
79 const std::vector<double> & x_new_old,
80 std::vector<double> & x_new_obj) = 0;
81
92 virtual yarp::dev::ReturnValue forwardKinematics(const std::vector<double> & q, std::vector<double> & x) = 0;
93
112 virtual yarp::dev::ReturnValue poseDiff(const std::vector<double> & xLhs, const std::vector<double> & xRhs, std::vector<double> & xOut) = 0;
113
126 virtual yarp::dev::ReturnValue inverseKinematics(const std::vector<double> & xd, const std::vector<double> & qGuess, std::vector<double> & q,
127 Frame frame = Frame::BASE) = 0;
128
141 virtual yarp::dev::ReturnValue diffInverseKinematics(const std::vector<double> & q, const std::vector<double> & xdot, std::vector<double> & qdot,
142 Frame frame = Frame::BASE) = 0;
143
156 virtual yarp::dev::ReturnValue inverseDynamics(const std::vector<double> & q, std::vector<double> & t) = 0;
157
174 virtual yarp::dev::ReturnValue inverseDynamics(const std::vector<double> & q, const std::vector<double> & qdot, const std::vector<double> & qdotdot,
175 const std::vector<double> & ftip, std::vector<double> & t, Frame frame = Frame::BASE) = 0;
176
177
178#ifndef SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
179 enum reference_frame
180 {
181 BASE_FRAME [[deprecated("use `ICartesianSolver::Frame::Base` instead")]] = static_cast<int>(Frame::BASE),
182 TCP_FRAME [[deprecated("use `ICartesianSolver::Frame::TCP` instead")]] = static_cast<int>(Frame::TCP)
183 };
184
185 [[deprecated("use `ICartesianSolver::Frame` signature instead")]]
186 virtual bool invKin(const std::vector<double> & xd, const std::vector<double> & qGuess, std::vector<double> & q, reference_frame frame = static_cast<reference_frame>(Frame::BASE))
187 { return inverseKinematics(xd, qGuess, q, static_cast<Frame>(frame)); }
188
189 [[deprecated("use `ICartesianSolver::Frame` signature instead")]]
190 virtual bool diffInvKin(const std::vector<double> & q, const std::vector<double> & xdot, std::vector<double> & qdot, reference_frame frame = static_cast<reference_frame>(Frame::BASE))
191 { return diffInverseKinematics(q, xdot, qdot, static_cast<Frame>(frame)); }
192
193 [[deprecated("use `ICartesianSolver::Frame` signature instead")]]
194 virtual bool invDyn(const std::vector<double> & q, const std::vector<double> & qdot, const std::vector<double> & qdotdot,
195 const std::vector<double> & ftip, std::vector<double> & t, reference_frame frame = static_cast<reference_frame>(Frame::BASE))
196 { return inverseDynamics(q, qdot, qdotdot, ftip, t, static_cast<Frame>(frame)); }
197#endif // SWIG_PREPROCESSOR_SHOULD_SKIP_THIS
198};
199
200} // namespace roboticslab
201
202#endif // __I_CARTESIAN_SOLVER__
Abstract base class for a cartesian solver.
Definition ICartesianSolver.h:19
virtual yarp::dev::ReturnValue getNumJoints(std::size_t &numJoints)=0
Get number of joints for which the solver has been configured.
virtual yarp::dev::ReturnValue getNumTcps(std::size_t &numTcps)=0
Get number of TCPs for which the solver has been configured.
virtual yarp::dev::ReturnValue diffInverseKinematics(const std::vector< double > &q, const std::vector< double > &xdot, std::vector< double > &qdot, Frame frame=Frame::BASE)=0
Perform differential inverse kinematics.
virtual ~ICartesianSolver()=default
Destructor.
virtual yarp::dev::ReturnValue appendLink(const std::vector< double > &x)=0
Append an additional link.
virtual yarp::dev::ReturnValue restoreOriginalChain()=0
Restore original kinematic chain.
virtual yarp::dev::ReturnValue inverseKinematics(const std::vector< double > &xd, const std::vector< double > &qGuess, std::vector< double > &q, Frame frame=Frame::BASE)=0
Perform inverse kinematics.
virtual yarp::dev::ReturnValue changeOrigin(const std::vector< double > &x_old_obj, const std::vector< double > &x_new_old, std::vector< double > &x_new_obj)=0
Change origin in which a pose is expressed.
virtual yarp::dev::ReturnValue inverseDynamics(const std::vector< double > &q, const std::vector< double > &qdot, const std::vector< double > &qdotdot, const std::vector< double > &ftip, std::vector< double > &t, Frame frame=Frame::BASE)=0
Perform inverse dynamics.
virtual yarp::dev::ReturnValue forwardKinematics(const std::vector< double > &q, std::vector< double > &x)=0
Perform forward kinematics.
virtual yarp::dev::ReturnValue poseDiff(const std::vector< double > &xLhs, const std::vector< double > &xRhs, std::vector< double > &xOut)=0
Obtain difference between supplied pose inputs.
Frame
Lists supported reference frames.
Definition ICartesianSolver.h:23
@ TCP
End-effector frame (TCP)
virtual yarp::dev::ReturnValue inverseDynamics(const std::vector< double > &q, std::vector< double > &t)=0
Perform inverse dynamics.
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6