cisst-saw
Loading...
Searching...
No Matches
robManipulator.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/* ex: set filetype=cpp softtabstop=2 shiftwidth=2 tabstop=2 cindent expandtab: */
3
4/*
5 Author(s): Simon Leonard
6 Created on: 2009-11-11
7
8 (C) Copyright 2008-2024 Johns Hopkins University (JHU), All Rights Reserved.
9
10--- begin cisst license - do not edit ---
11
12This software is provided "as is" under an open source license, with
13no warranty. The complete license can be found in license.txt and
14http://www.cisst.org/cisst/license.txt.
15
16--- end cisst license ---
17*/
18
19#ifndef _robManipulator_h
20#define _robManipulator_h
21
22#include <string>
23#include <vector>
24
26#include <cisstRobot/robLink.h>
27
28#if CISST_HAS_JSON
29#include <json/json.h>
30#endif
31
33
35
36 protected:
37
39 typedef std::vector<robManipulator*> ToolsType;
41
42 public:
43
45
46 std::string mLastError;
47
49
54
56
59 double** Jn;
60
62
65 double** Js;
66
68 std::vector<robLink> links;
69
70
72
76 virtual robManipulator::Errno LoadRobot(const std::string & linkfile);
77
78 virtual robManipulator::Errno LoadRobot(std::istream & ifs);
79
80#if CISST_HAS_JSON
82 virtual robManipulator::Errno LoadRobot(const Json::Value & config);
83#endif
84
85 robManipulator::Errno LoadRobot(std::vector<robKinematics *> KinParms);
86
88
92 void JacobianBody( const vctDynamicVector<double>& q ) const;
93
95 // Returns true if successful; false otherwise (e.g., J is wrong size)
98
99
101
107
109 // Returns true if successful; false otherwise (e.g., J is wrong size)
111 vctDynamicMatrix<double>& J) const;
112
114
126 const vctDynamicVector<double>& qd,
127 const vctDynamicVector<double>& qdd,
128 const vctFixedSizeVector<double,6>& f,//=vctFixedSizeVector<double,6>(0.0),
129 double g = 9.81) const;
130
133 const vctDynamicVector<double>& qd,
134 const vctDynamicVector<double>& qdd,
135 const vctFixedSizeVector<double,6>& f,//=vctFixedSizeVector<double,6>(0.0),
136 double g = 9.81) const;
137
140 const vctDynamicVector<double>& qd,
141 const vctDynamicVector<double>& qdd,
142 const vctFixedSizeVector<double,6>& f,//=vctFixedSizeVector<double,6>(0.0),
143 const vct3 & g) const;
144
146
155 const vctDynamicVector<double>& qd,
156 double g = 9.81 ) const;
157
160 const vctDynamicVector<double>& qd,
161 double g = 9.81 ) const;
162
165 const vctDynamicVector<double>& qd,
166 const vct3 & g) const;
167
169
173 /*
174 vctFixedSizeVector<double,6>
175 Acceleration( const vctDynamicVector<double>& q,
176 const vctDynamicVector<double>& qd,
177 const vctDynamicVector<double>& qdd ) const;
178 */
180
187 const vctDynamicVector<double>& qd ) const;
188
189
191
195 void JSinertia(double** A, const vctDynamicVector<double>& q ) const;
196
198
199
201
205 void OSinertia(double Ac[6][6], const vctDynamicVector<double>& q) const;
206
209 const vctFrame4x4<double>& Rt2 ) const;
210
211 void
213 vctFixedSizeMatrix<double,4,4>& delRt ) const;
214
215public:
216
217 enum LinkID{ L0, L1, L2, L3, L4, L5, L6, L7, L8, L9, LN };
218
220
222
228 robManipulator( const std::string& robotfilename,
230
231 robManipulator( const std::vector<robKinematics *> linkParms,
233
236
238 virtual void
240 const vctDynamicVector<double> & upperLimits);
241
243 virtual void
245 vctDynamicVectorRef<double> upperLimits) const;
246
248 virtual void
250
252 virtual void
253 GetJointNames(std::vector<std::string> & names) const;
254
256 virtual void
257 GetJointTypes(std::vector<cmnJointType> & types) const;
258
260
266 virtual
268 ForwardKinematics( const vctDynamicVector<double>& q, int N = -1 ) const;
269
271
282 virtual
285 const vctFrame4x4<double>& Rts,
286 double tolerance=1e-12,
287 size_t Niteration=1000,
288 double LAMBDA=0.001 );
289
290
291 virtual
294 const vctFrm3& Rts,
295 double tolerance=1e-12,
296 size_t Niteration=1000 );
297
300
302
311 virtual
314 const vctDynamicVector<double>& qd,
315 const vctDynamicVector<double>& qdd ) const;
316
318
331 virtual
334 const vctDynamicVector<double>& qd,
335 const vctFixedSizeVector<double,6>& vdwd ) const;
336
337
339
346 virtual
349 double epsilon = 1e-6 ) const;
350
352 virtual void PrintKinematics( std::ostream& os ) const;
353
355 virtual void Attach( robManipulator* tool );
356
357 void DeleteTools(void);
358
360
365 virtual
367 Truncate(const size_t linksToKeep);
368
370 inline const std::string & LastError(void) const {
371 return mLastError;
372 }
373
377 bool ClampJointValueAndUpdateError(const size_t jointIndex,
378 double & value,
379 const double & tolerance = 1e-6);
380};
381
382#endif // _robManipulator_h
virtual robManipulator::Errno InverseKinematics(vctDynamicVector< double > &q, const vctFrame4x4< double > &Rts, double tolerance=1e-12, size_t Niteration=1000, double LAMBDA=0.001)
Evaluate the inverse kinematics.
bool JacobianBody(const vctDynamicVector< double > &q, vctDynamicMatrix< double > &J) const
Evaluate the body Jacobian and return it in the dynamic matrix J.
bool JacobianSpatial(const vctDynamicVector< double > &q, vctDynamicMatrix< double > &J) const
Evaluate the spatial Jacobian and return it in the dynamic matrix J.
vctDynamicVector< double > CCG_MDH(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vct3 &g) const
void JacobianBody(const vctDynamicVector< double > &q) const
Evaluate the body Jacobian.
std::string mLastError
Definition robManipulator.h:46
vctDynamicVector< double > CCG_MDH(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, double g=9.81) const
std::vector< robLink > links
A vector of links.
Definition robManipulator.h:68
virtual void SetJointLimits(const vctDynamicVector< double > &lowerLimits, const vctDynamicVector< double > &upperLimits)
vctDynamicMatrix< double > JSinertia(const vctDynamicVector< double > &q) const
vctDynamicVector< double > RNE_MDH(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vctDynamicVector< double > &qdd, const vctFixedSizeVector< double, 6 > &f, double g=9.81) const
virtual vctFrame4x4< double > ForwardKinematics(const vctDynamicVector< double > &q, int N=-1) const
Evaluate the forward kinematics.
void JacobianSpatial(const vctDynamicVector< double > &q) const
Evaluate the spatial Jacobian.
double ** Js
Spatial Jacobian.
Definition robManipulator.h:65
virtual void PrintKinematics(std::ostream &os) const
Print the kinematics parameters to the specified output stream.
robManipulator::Errno LoadRobot(std::vector< robKinematics * > KinParms)
virtual robManipulator::Errno LoadRobot(std::istream &ifs)
virtual void GetJointNames(std::vector< std::string > &names) const
vctDynamicVector< double > CCG(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, double g=9.81) const
Coriolis/centrifugal and gravity.
vctDynamicVector< double > RNE(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vctDynamicVector< double > &qdd, const vctFixedSizeVector< double, 6 > &f, double g=9.81) const
Recursive Newton-Euler altorithm.
Errno
Definition robManipulator.h:44
@ ESUCCESS
Definition robManipulator.h:44
@ EFAILURE
Definition robManipulator.h:44
vctDynamicVector< double > RNE_MDH(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vctDynamicVector< double > &qdd, const vctFixedSizeVector< double, 6 > &f, const vct3 &g) const
void DeleteTools(void)
std::vector< robManipulator * > ToolsType
A vector of tools.
Definition robManipulator.h:39
robManipulator(const std::vector< robKinematics * > linkParms, const vctFrame4x4< double > &Rtw0=vctFrame4x4< double >())
vctFixedSizeVector< double, 6 > BiasAcceleration(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd) const
End-effector accelerations.
double ** Jn
Body Jacobian.
Definition robManipulator.h:59
ToolsType tools
Definition robManipulator.h:40
virtual robManipulator::Errno Truncate(const size_t linksToKeep)
Remove all links expect n first ones.
virtual vctDynamicVector< double > InverseDynamics(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vctDynamicVector< double > &qdd) const
Inverse dynamics in joint space.
virtual vctDynamicVector< double > InverseDynamics(const vctDynamicVector< double > &q, const vctDynamicVector< double > &qd, const vctFixedSizeVector< double, 6 > &vdwd) const
Inverse dynamics in operation space.
void OSinertia(double Ac[6][6], const vctDynamicVector< double > &q) const
Compute the 6x6 manipulator inertia matrix in operation space.
vctFrame4x4< double > Rtw0
Position and orientation of the first link.
Definition robManipulator.h:53
virtual void GetJointTypes(std::vector< cmnJointType > &types) const
virtual ~robManipulator()
Manipulator destructor.
virtual void NormalizeAngles(vctDynamicVector< double > &q)
Normalize angles to -pi to pi.
bool ClampJointValueAndUpdateError(const size_t jointIndex, double &value, const double &tolerance=1e-6)
robManipulator(const vctFrame4x4< double > &Rtw0=vctFrame4x4< double >())
LinkID
Definition robManipulator.h:217
@ L7
Definition robManipulator.h:217
@ L1
Definition robManipulator.h:217
@ L8
Definition robManipulator.h:217
@ L6
Definition robManipulator.h:217
@ L0
Definition robManipulator.h:217
@ L5
Definition robManipulator.h:217
@ L2
Definition robManipulator.h:217
@ L4
Definition robManipulator.h:217
@ L9
Definition robManipulator.h:217
@ LN
Definition robManipulator.h:217
@ L3
Definition robManipulator.h:217
void JSinertia(double **A, const vctDynamicVector< double > &q) const
Compute the NxN manipulator inertia matrix.
virtual robManipulator::Errno InverseKinematics(vctDynamicVector< double > &q, const vctFrm3 &Rts, double tolerance=1e-12, size_t Niteration=1000)
virtual void Attach(robManipulator *tool)
Attach a tool.
virtual void GetFTMaximums(vctDynamicVectorRef< double > ftMaximums) const
robManipulator(const std::string &robotfilename, const vctFrame4x4< double > &Rtw0=vctFrame4x4< double >())
Manipulator generic constructor.
virtual vctDynamicMatrix< double > JacobianKinematicsIdentification(const vctDynamicVector< double > &q, double epsilon=1e-6) const
Compute Jacobian for kinematics identification.
virtual robManipulator::Errno LoadRobot(const std::string &linkfile)
Load the kinematics and the dynamics of the robot.
void AddIdentificationColumn(vctDynamicMatrix< double > &J, vctFixedSizeMatrix< double, 4, 4 > &delRt) const
vctFixedSizeMatrix< double, 4, 4 > SE3Difference(const vctFrame4x4< double > &Rt1, const vctFrame4x4< double > &Rt2) const
const std::string & LastError(void) const
Definition robManipulator.h:370
virtual void GetJointLimits(vctDynamicVectorRef< double > lowerLimits, vctDynamicVectorRef< double > upperLimits) const
Definition vctForwardDeclarations.h:157
Definition vctForwardDeclarations.h:131
Dynamic vector referencing existing memory.
Definition vctDynamicVectorRef.h:78
Implementation of a fixed-size matrix using template metaprogramming.
Definition vctFixedSizeMatrix.h:54
Implementation of a fixed-size vector using template metaprogramming.
Definition vctFixedSizeVector.h:54
Template base class for a 4x4 frame.
Definition vctFrame4x4.h:51
#define CISST_EXPORT
Definition cmnExportMacros.h:50
vctFixedSizeVector< double, 3 > vct3
Definition vctFixedSizeVectorTypes.h:46
Typedef for different transformations.
vctFrameBase< vctRot3 > vctFrm3
Definition vctTransformationTypes.h:137