TaskSpaceVMP.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package RobotAPI::ArmarXObjects::DMPController
17  * @author zhou ( you dot zhou at kit dot edu )
18  * @date 2018
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <boost/shared_ptr.hpp>
26 
27 #include <Ice/Handle.h>
28 
29 #include <VirtualRobot/VirtualRobot.h>
30 
31 #include <dmp/representation/trajectory.h>
32 
33 namespace DMP
34 {
36 }
37 
38 namespace armarx
39 {
41 }
42 
44 {
45 
47  {
48  float goDist = 80;
49  float backDist = 50;
50  float maxValue = 100;
51  float slop = 1000;
52  float Kpos = 1;
53  float Dpos = 2;
54  float Kori = 1;
55  float Dori = 0;
56  float mm2radi = 10;
57  };
58 
60  {
61  int DMPKernelSize = 50;
62  std::string DMPMode = "Linear";
63  std::string DMPStyle = "Discrete";
64  float DMPAmplitude = 1;
65  float oriAmplitude = 1;
66  float motionTimeDuration = 10;
68  };
69 
70  struct DebugInfo
71  {
72  double canVal;
73  double mpcFactor;
74  double poseError;
75  double posiError;
76  double oriError;
77  };
78 
79  /**
80  * @defgroup Library-TaskSpaceDMPController TaskSpaceDMPController
81  * @ingroup Library-RobotUnit-NJointControllers
82  * A description of the library TaskSpaceDMPController.
83  *
84  * @class TaskSpaceDMPController
85  * @ingroup Library-TaskSpaceDMPController
86  * @brief Brief description of class TaskSpaceDMPController.
87  *
88  * Detailed description of class TaskSpaceDMPController.
89  */
91  {
92  public:
93  TaskSpaceDMPController(std::string name,
95  bool isPhaseStopControl = true);
96 
97  std::string getName();
98 
99 
100  void flow(double deltaT, const Eigen::Matrix4f& currentPose, const Eigen::VectorXf& twist);
101  double flow(double canVal,
102  double deltaT,
103  const Eigen::Matrix4f& currentPose,
104  const Eigen::VectorXf& twist);
105 
106  Eigen::VectorXf getTargetVelocity();
107  std::vector<double> getTargetPose();
110 
111  void learnDMPFromFiles(const std::vector<std::string>& fileNames,
112  const std::vector<double>& ratios);
113  void learnDMPFromFiles(const std::vector<std::string>& fileNames);
114 
115  void learnDMPFromSampledTrajectory(const DMP::Vec<DMP::SampledTrajectoryV2>& trajs);
116  void learnDMPFromTrajectory(const TrajectoryPtr& traj);
117 
118  void loadDMPFromXML(const std::string& dmpXML);
119  void loadDMPFromString(const std::string& dmpStr);
120 
121  void saveDMPToXML(const std::string& dmpXML);
122  std::string saveDMPToString();
123 
124  void setViaPose(double canVal, const Eigen::Matrix4f& viaPose);
125  void setViaPose(double canVal, const std::vector<double>& viaPoseWithQuaternion);
126 
127  void removeAllViaPoints();
128  void prepareExecution(const Eigen::Matrix4f& currentPose, const Eigen::Matrix4f& goalPose);
129  void prepareExecution(const std::vector<double>& currentPoseVec,
130  const std::vector<double>& goalPoseVec);
131 
132  void setSpeed(double times);
133  void setAmplitude(double amp);
134 
135  void setGoalPose(const Eigen::Matrix4f& goalPose);
136  void setGoalPoseVec(const std::vector<double> goalPoseVec);
137 
138  void learnDMPFromSampledTrajectory(const DMP::Vec<DMP::SampledTrajectoryV2>& trajs,
139  const std::vector<double>& ratios);
140  void setRatios(const std::vector<double>& ratios);
141 
143  std::vector<double> eigen4f2vec(const Eigen::Matrix4f& pose);
144 
146 
147  void pauseController();
148  void resumeController();
149 
150  void setWeights(const std::vector<std::vector<double>>& weights);
151  void setTranslWeights(const std::vector<std::vector<double>>& weights);
152  void setRotWeights(const std::vector<std::vector<double>>& weights);
153 
154  DMP::DVec2d getWeights();
155  DMP::DVec2d getTranslWeights();
156  DMP::DVec2d getRotWeights();
157 
158  double canVal;
160  std::string dmpName;
163 
164  private:
165  double tau;
166  DMP::DVec goalPoseVec;
167 
168  Eigen::VectorXf targetVel;
169  DMP::DVec targetPoseVec;
170 
171  DMP::Vec<DMP::DMPState> currentState;
172  bool paused;
173 
174 
175  bool isDisturbance;
176 
177 
178  void getError(const Eigen::Matrix4f& pose,
179  Eigen::Vector3f& position,
180  Eigen::Quaterniond& quaternion,
181  double& posiError,
182  double& oriError);
183 
184  Eigen::Quaterniond oldDMPAngularVelocity;
185  };
186 
187  using TaskSpaceDMPControllerPtr = std::shared_ptr<TaskSpaceDMPController>;
188 
189 } // namespace armarx::control::deprecated_njoint_mp_controller::tsvmp
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo::canVal
double canVal
Definition: TaskSpaceVMP.h:72
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::Kori
float Kori
Definition: TaskSpaceVMP.h:54
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setWeights
void setWeights(const std::vector< std::vector< double >> &weights)
Definition: TaskSpaceVMP.cpp:625
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setGoalPose
void setGoalPose(const Eigen::Matrix4f &goalPose)
Definition: TaskSpaceVMP.cpp:595
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::debugData
DebugInfo debugData
Definition: TaskSpaceVMP.h:142
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::Dpos
float Dpos
Definition: TaskSpaceVMP.h:53
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::DMPKernelSize
int DMPKernelSize
Definition: TaskSpaceVMP.h:61
boost::shared_ptr< class UMITSMP >
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::oriAmplitude
float oriAmplitude
Definition: TaskSpaceVMP.h:65
DMP
Definition: NJointTaskSpaceAdaptiveDMPController.h:24
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::resumeController
void resumeController()
Definition: TaskSpaceVMP.cpp:619
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getRotWeights
DMP::DVec2d getRotWeights()
Definition: TaskSpaceVMP.cpp:671
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setGoalPoseVec
void setGoalPoseVec(const std::vector< double > goalPoseVec)
Definition: TaskSpaceVMP.cpp:601
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setViaPose
void setViaPose(double canVal, const Eigen::Matrix4f &viaPose)
Definition: TaskSpaceVMP.cpp:385
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig
Definition: TaskSpaceVMP.h:59
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::phaseStopParas
PhaseStopParams phaseStopParas
Definition: TaskSpaceVMP.h:67
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::goDist
float goDist
Definition: TaskSpaceVMP.h:48
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getTargetVelocity
Eigen::VectorXf getTargetVelocity()
Definition: TaskSpaceVMP.cpp:557
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::motionTimeDuration
float motionTimeDuration
Definition: TaskSpaceVMP.h:66
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::removeAllViaPoints
void removeAllViaPoints()
Definition: TaskSpaceVMP.cpp:403
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::backDist
float backDist
Definition: TaskSpaceVMP.h:49
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setAmplitude
void setAmplitude(double amp)
Definition: TaskSpaceVMP.cpp:452
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setTranslWeights
void setTranslWeights(const std::vector< std::vector< double >> &weights)
Definition: TaskSpaceVMP.cpp:631
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::maxValue
float maxValue
Definition: TaskSpaceVMP.h:50
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getTranslWeights
DMP::DVec2d getTranslWeights()
Definition: TaskSpaceVMP.cpp:659
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::config
TaskSpaceDMPControllerConfig config
Definition: TaskSpaceVMP.h:162
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::Dori
float Dori
Definition: TaskSpaceVMP.h:55
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo::poseError
double poseError
Definition: TaskSpaceVMP.h:74
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::isPhaseStopControl
bool isPhaseStopControl
Definition: TaskSpaceVMP.h:159
armarx::control::common::mp::DVec
Ice::DoubleSeq DVec
Definition: MP.h:47
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo
Definition: TaskSpaceVMP.h:70
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::saveDMPToString
std::string saveDMPToString()
Definition: TaskSpaceVMP.cpp:352
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::learnDMPFromSampledTrajectory
void learnDMPFromSampledTrajectory(const DMP::Vec< DMP::SampledTrajectoryV2 > &trajs)
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo::posiError
double posiError
Definition: TaskSpaceVMP.h:75
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getName
std::string getName()
Definition: TaskSpaceVMP.cpp:551
armarx::control::deprecated_njoint_mp_controller::tsvmp
Definition: NJointTaskSpaceImpedanceDMPController.h:27
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::DMPAmplitude
float DMPAmplitude
Definition: TaskSpaceVMP.h:64
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams
Definition: TaskSpaceVMP.h:46
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::prepareExecution
void prepareExecution(const Eigen::Matrix4f &currentPose, const Eigen::Matrix4f &goalPose)
Definition: TaskSpaceVMP.cpp:409
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::slop
float slop
Definition: TaskSpaceVMP.h:51
armarx::TrajectoryPtr
IceInternal::Handle< Trajectory > TrajectoryPtr
Definition: Trajectory.h:52
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::Kpos
float Kpos
Definition: TaskSpaceVMP.h:52
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::loadDMPFromXML
void loadDMPFromXML(const std::string &dmpXML)
Definition: TaskSpaceVMP.cpp:361
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo::oriError
double oriError
Definition: TaskSpaceVMP.h:76
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getDMP
DMP::UMITSMPPtr getDMP()
Definition: TaskSpaceVMP.cpp:607
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getIntegratedPoseMat
Eigen::Matrix4f getIntegratedPoseMat()
Definition: TaskSpaceVMP.cpp:581
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::saveDMPToXML
void saveDMPToXML(const std::string &dmpXML)
Definition: TaskSpaceVMP.cpp:373
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerPtr
std::shared_ptr< TaskSpaceDMPController > TaskSpaceDMPControllerPtr
Definition: NJointTaskSpaceImpedanceDMPController.h:31
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::TaskSpaceDMPController
TaskSpaceDMPController(std::string name, const TaskSpaceDMPControllerConfig &config, bool isPhaseStopControl=true)
Definition: TaskSpaceVMP.cpp:519
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getWeights
DMP::DVec2d getWeights()
Definition: TaskSpaceVMP.cpp:653
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::DMPStyle
std::string DMPStyle
Definition: TaskSpaceVMP.h:63
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getTargetPoseMat
Eigen::Matrix4f getTargetPoseMat()
Definition: TaskSpaceVMP.cpp:569
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerConfig::DMPMode
std::string DMPMode
Definition: TaskSpaceVMP.h:62
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::learnDMPFromFiles
void learnDMPFromFiles(const std::vector< std::string > &fileNames, const std::vector< double > &ratios)
Definition: TaskSpaceVMP.cpp:241
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setRotWeights
void setRotWeights(const std::vector< std::vector< double >> &weights)
Definition: TaskSpaceVMP.cpp:642
Eigen::Quaterniond
Quaternion< double, 0 > Quaterniond
Definition: EigenForwardDeclarations.h:62
armarx::control::deprecated_njoint_mp_controller::tsvmp::PhaseStopParams::mm2radi
float mm2radi
Definition: TaskSpaceVMP.h:56
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::flow
void flow(double deltaT, const Eigen::Matrix4f &currentPose, const Eigen::VectorXf &twist)
Definition: TaskSpaceVMP.cpp:47
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setSpeed
void setSpeed(double times)
Definition: TaskSpaceVMP.cpp:441
armarx::control::deprecated_njoint_mp_controller::tsvmp::DebugInfo::mpcFactor
double mpcFactor
Definition: TaskSpaceVMP.h:73
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::loadDMPFromString
void loadDMPFromString(const std::string &dmpStr)
Definition: TaskSpaceVMP.cpp:341
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::pauseController
void pauseController()
Definition: TaskSpaceVMP.cpp:613
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::dmpName
std::string dmpName
Definition: TaskSpaceVMP.h:160
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::canVal
double canVal
Definition: TaskSpaceVMP.h:158
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController
Brief description of class TaskSpaceDMPController.
Definition: TaskSpaceVMP.h:90
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::eigen4f2vec
std::vector< double > eigen4f2vec(const Eigen::Matrix4f &pose)
Definition: TaskSpaceVMP.cpp:462
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::getTargetPose
std::vector< double > getTargetPose()
Definition: TaskSpaceVMP.cpp:563
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::learnDMPFromTrajectory
void learnDMPFromTrajectory(const TrajectoryPtr &traj)
Definition: TaskSpaceVMP.cpp:318
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::setRatios
void setRatios(const std::vector< double > &ratios)
Definition: TaskSpaceVMP.cpp:312
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController::dmpPtr
DMP::UMITSMPPtr dmpPtr
Definition: TaskSpaceVMP.h:161