GraspTrajectory.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author Simon Ottenhaus (simon dot ottenhaus at kit dot edu)
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #pragma once
25 
26 
27 #include <map>
28 #include <vector>
29 
30 #include <Eigen/Core>
31 
36 #include <ArmarXCore/interface/serialization/Eigen.h>
37 
40 
41 #include <RobotAPI/interface/units/GraspCandidateProviderInterface.h>
44 
45 namespace armarx
46 {
47  typedef std::shared_ptr<class GraspTrajectory> GraspTrajectoryPtr;
48 
50  {
51  public:
52  class Keypoint;
53  typedef std::shared_ptr<Keypoint> KeypointPtr;
54 
55  class Keypoint
56  {
57  public:
59  Eigen::VectorXf handJointsTarget;
60  float dt;
61  Eigen::Vector3f feedForwardPosVelocity;
62  Eigen::Vector3f feedForwardOriVelocity;
64 
65  Keypoint(const Eigen::Matrix4f& tcpTarget, const Eigen::VectorXf& handJointsTarget);
67  const Eigen::VectorXf& handJointsTarget,
68  float dt,
69  const Eigen::Vector3f& feedForwardPosVelocity,
70  const Eigen::Vector3f& feedForwardOriVelocity,
71  const Eigen::VectorXf& feedForwardHandJointsVelocity);
72  Eigen::Vector3f getTargetPosition() const;
75  void updateVelocities(const KeypointPtr& prev, float dt);
76  };
77 
78  struct Length
79  {
80  float pos = 0;
81  float ori = 0;
82  };
83 
84 
85  public:
86  GraspTrajectory(const Eigen::Matrix4f& tcpStart, const Eigen::VectorXf& handJointsStart);
87 
88  void addKeypoint(const Eigen::Matrix4f& tcpTarget,
89  const Eigen::VectorXf& handJointsTarget,
90  float dt);
91 
92  size_t getKeypointCount() const;
93 
94  void insertKeypoint(size_t index,
95  const Eigen::Matrix4f& tcpTarget,
96  const Eigen::VectorXf& handJointsTarget,
97  float dt);
98 
99  void removeKeypoint(size_t index);
100 
101  void replaceKeypoint(size_t index,
102  const Eigen::Matrix4f& tcpTarget,
103  const Eigen::VectorXf& handJointsTarget,
104  float dt);
105 
106  void setKeypointDt(size_t index, float dt);
107 
109  KeypointPtr& getKeypoint(int i);
111 
112  void getIndex(float t, int& i1, int& i2, float& f);
113 
114  Eigen::Vector3f GetPosition(float t);
115 
117 
118  Eigen::Matrix4f GetPose(float t);
119 
120  std::vector<Eigen::Matrix4f> getAllKeypointPoses();
121  std::vector<Eigen::Vector3f> getAllKeypointPositions();
122  std::vector<Eigen::Matrix3f> getAllKeypointOrientations();
123 
124  Eigen::VectorXf GetHandValues(float t);
125 
126  Eigen::Vector3f GetPositionDerivative(float t);
127 
128  Eigen::Vector3f GetOrientationDerivative(float t);
129 
131 
132  Eigen::VectorXf GetHandJointsDerivative(float t);
133 
134  float getDuration() const;
135 
136  Length calculateLength() const;
137  int GetHandJointCount() const;
138 
139 
140  GraspTrajectoryPtr getTranslatedAndRotated(const Eigen::Vector3f& translation,
141  const Eigen::Matrix3f& rotation);
143 
145 
148  const Eigen::Vector3f& handForward = Eigen::Vector3f::UnitZ());
149 
151  calculateReachability(VirtualRobot::RobotNodeSetPtr rns,
152  VirtualRobot::RobotNodePtr tcp = VirtualRobot::RobotNodePtr(),
154 
155  void writeToFile(const std::string& filename);
156 
157  static GraspTrajectoryPtr ReadFromFile(const grasping::GraspCandidatePtr& cnd);
158 
160  static GraspTrajectoryPtr ReadFromFile(const std::string& filename);
161  static GraspTrajectoryPtr ReadFromString(const std::string& xml);
162 
163  private:
164  void updateKeypointMap();
165 
166  private:
167  std::vector<KeypointPtr> keypoints;
168  std::map<float, size_t> keypointMap;
169  };
170 } // namespace armarx
armarx::RapidXmlReaderPtr
std::shared_ptr< RapidXmlReader > RapidXmlReaderPtr
Definition: RapidXmlReader.h:67
armarx::GraspTrajectory::GetPosition
Eigen::Vector3f GetPosition(float t)
Definition: GraspTrajectory.cpp:241
armarx::GraspTrajectory::getAllKeypointPositions
std::vector< Eigen::Vector3f > getAllKeypointPositions()
Definition: GraspTrajectory.cpp:284
armarx::GraspTrajectory::Keypoint::tcpTarget
Eigen::Matrix4f tcpTarget
Definition: GraspTrajectory.h:58
armarx::GraspTrajectory::getAllKeypointOrientations
std::vector< Eigen::Matrix3f > getAllKeypointOrientations()
Definition: GraspTrajectory.cpp:295
armarx::GraspTrajectory::calculateReachability
SimpleDiffIK::Reachability calculateReachability(VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp=VirtualRobot::RobotNodePtr(), SimpleDiffIK::Parameters params=SimpleDiffIK::Parameters())
Definition: GraspTrajectory.cpp:442
armarx::SimpleDiffIK::Parameters
Definition: SimpleDiffIK.h:39
armarx::GraspTrajectory::ReadFromFile
static GraspTrajectoryPtr ReadFromFile(const grasping::GraspCandidatePtr &cnd)
Definition: GraspTrajectory.cpp:467
armarx::GraspTrajectory::insertKeypoint
void insertKeypoint(size_t index, const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
Definition: GraspTrajectory.cpp:127
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::GraspTrajectory::getTranslatedAndRotated
GraspTrajectoryPtr getTranslatedAndRotated(const Eigen::Vector3f &translation, const Eigen::Matrix3f &rotation)
Definition: GraspTrajectory.cpp:385
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::GraspTrajectory::getStartPose
Eigen::Matrix4f getStartPose()
Definition: GraspTrajectory.cpp:210
armarx::SimpleDiffIK::Reachability
Definition: SimpleDiffIK.h:83
SimpleJsonLogger.h
armarx::GraspTrajectory::KeypointPtr
std::shared_ptr< Keypoint > KeypointPtr
Definition: GraspTrajectory.h:52
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:668
StructuralJsonParser.h
RapidXmlWriter.h
armarx::GraspTrajectory::Keypoint::handJointsTarget
Eigen::VectorXf handJointsTarget
Definition: GraspTrajectory.h:59
armarx::GraspTrajectory::Length::pos
float pos
Definition: GraspTrajectory.h:80
armarx::GraspTrajectory
Definition: GraspTrajectory.h:49
armarx::GraspTrajectory::GetTcpDerivative
Eigen::Vector6f GetTcpDerivative(float t)
Definition: GraspTrajectory.cpp:334
armarx::GraspTrajectory::Keypoint::getTargetOrientation
Eigen::Matrix3f getTargetOrientation() const
Definition: GraspTrajectory.cpp:66
armarx::GraspTrajectory::ReadFromReader
static GraspTrajectoryPtr ReadFromReader(const RapidXmlReaderPtr &reader)
Definition: GraspTrajectory.cpp:477
armarx::GraspTrajectory::getAllKeypointPoses
std::vector< Eigen::Matrix4f > getAllKeypointPoses()
Definition: GraspTrajectory.cpp:273
armarx::GraspTrajectoryPtr
std::shared_ptr< class GraspTrajectory > GraspTrajectoryPtr
Definition: GraspTrajectory.h:47
armarx::GraspTrajectory::GraspTrajectory
GraspTrajectory()=default
armarx::GraspTrajectory::GetPositionDerivative
Eigen::Vector3f GetPositionDerivative(float t)
Definition: GraspTrajectory.cpp:316
armarx::GraspTrajectory::removeKeypoint
void removeKeypoint(size_t index)
Definition: GraspTrajectory.cpp:150
JPathNavigator.h
armarx::GraspTrajectory::GetHandValues
Eigen::VectorXf GetHandValues(float t)
Definition: GraspTrajectory.cpp:306
armarx::GraspTrajectory::calculateLength
Length calculateLength() const
Definition: GraspTrajectory.cpp:358
armarx::GraspTrajectory::setKeypointDt
void setKeypointDt(size_t index, float dt)
Definition: GraspTrajectory.cpp:185
armarx::GraspTrajectory::Keypoint::getTargetPosition
Eigen::Vector3f getTargetPosition() const
Definition: GraspTrajectory.cpp:60
armarx::GraspTrajectory::getTransformed
GraspTrajectoryPtr getTransformed(const Eigen::Matrix4f &transform)
Definition: GraspTrajectory.cpp:404
SimpleDiffIK.h
filename
std::string filename
Definition: VisualizationRobot.cpp:86
armarx::GraspTrajectory::getIndex
void getIndex(float t, int &i1, int &i2, float &f)
Definition: GraspTrajectory.cpp:216
armarx::GraspTrajectory::Keypoint::dt
float dt
Definition: GraspTrajectory.h:60
armarx::GraspTrajectory::GetHandJointsDerivative
Eigen::VectorXf GetHandJointsDerivative(float t)
Definition: GraspTrajectory.cpp:343
armarx::GraspTrajectory::GetOrientationDerivative
Eigen::Vector3f GetOrientationDerivative(float t)
Definition: GraspTrajectory.cpp:325
armarx::GraspTrajectory::ReadFromString
static GraspTrajectoryPtr ReadFromString(const std::string &xml)
Definition: GraspTrajectory.cpp:525
armarx::GraspTrajectory::Length::ori
float ori
Definition: GraspTrajectory.h:81
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT >>
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:351
armarx::GraspTrajectory::getTransformedToGraspPose
GraspTrajectoryPtr getTransformedToGraspPose(const Eigen::Matrix4f &target, const Eigen::Vector3f &handForward=Eigen::Vector3f::UnitZ())
Definition: GraspTrajectory.cpp:423
armarx::GraspTrajectory::Length
Definition: GraspTrajectory.h:78
CMakePackageFinder.h
armarx::GraspTrajectory::Keypoint
Definition: GraspTrajectory.h:55
armarx::GraspTrajectory::GetHandJointCount
int GetHandJointCount() const
Definition: GraspTrajectory.cpp:379
armarx::GraspTrajectory::lastKeypoint
KeypointPtr & lastKeypoint()
Definition: GraspTrajectory.cpp:198
armarx::GraspTrajectory::getKeypoint
KeypointPtr & getKeypoint(int i)
Definition: GraspTrajectory.cpp:204
armarx::GraspTrajectory::Keypoint::Keypoint
Keypoint(const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget)
Definition: GraspTrajectory.cpp:33
RapidXmlReader.h
armarx::GraspTrajectory::GetOrientation
Eigen::Matrix3f GetOrientation(float t)
Definition: GraspTrajectory.cpp:251
armarx::GraspTrajectory::Keypoint::feedForwardHandJointsVelocity
Eigen::VectorXf feedForwardHandJointsVelocity
Definition: GraspTrajectory.h:63
armarx::GraspTrajectory::Keypoint::feedForwardOriVelocity
Eigen::Vector3f feedForwardOriVelocity
Definition: GraspTrajectory.h:62
Eigen::Matrix< float, 6, 1 >
armarx::GraspTrajectory::replaceKeypoint
void replaceKeypoint(size_t index, const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
Definition: GraspTrajectory.cpp:167
armarx::GraspTrajectory::writeToFile
void writeToFile(const std::string &filename)
Definition: GraspTrajectory.cpp:451
armarx::GraspTrajectory::Keypoint::getTargetPose
Eigen::Matrix4f getTargetPose() const
Definition: GraspTrajectory.cpp:72
GfxTL::Matrix3f
MatrixXX< 3, 3, float > Matrix3f
Definition: MatrixXX.h:649
armarx::GraspTrajectory::GetPose
Eigen::Matrix4f GetPose(float t)
Definition: GraspTrajectory.cpp:267
armarx::GraspTrajectory::getClone
GraspTrajectoryPtr getClone()
Definition: GraspTrajectory.cpp:417
armarx::GraspTrajectory::Keypoint::feedForwardPosVelocity
Eigen::Vector3f feedForwardPosVelocity
Definition: GraspTrajectory.h:61
armarx::GraspTrajectory::getDuration
float getDuration() const
Definition: GraspTrajectory.cpp:352
armarx::GraspTrajectory::Keypoint::updateVelocities
void updateVelocities(const KeypointPtr &prev, float dt)
Definition: GraspTrajectory.cpp:78
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::GraspTrajectory::getKeypointCount
size_t getKeypointCount() const
Definition: GraspTrajectory.cpp:121
Exception.h
dt
constexpr T dt
Definition: UnscentedKalmanFilterTest.cpp:45
armarx::GraspTrajectory::addKeypoint
void addKeypoint(const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
Definition: GraspTrajectory.cpp:107