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 #include <map>
27 #include <memory>
28 #include <optional>
29 
30 #include <Eigen/Core>
31 
32 #include <VirtualRobot/VirtualRobot.h>
33 
34 #include <RobotAPI/interface/units/GraspCandidateProviderInterface.h>
36 
37 namespace armarx
38 {
39  class RapidXmlReader;
40  using RapidXmlReaderPtr = std::shared_ptr<RapidXmlReader>;
41 
42  class GraspTrajectory;
43  typedef std::shared_ptr<GraspTrajectory> GraspTrajectoryPtr;
44 
46  {
47  public:
48  using GraspTrajectoryKeypointPtr = std::shared_ptr<GraspTrajectoryKeypoint>;
49 
52  std::optional<std::string> shape;
53  float dt;
54  Eigen::Vector3f feedForwardPosVelocity;
55  Eigen::Vector3f feedForwardOriVelocity;
57 
58  GraspTrajectoryKeypoint() = default;
59 
62  const std::optional<std::string>& shape = std::nullopt);
63 
66  float dt,
67  const Eigen::Vector3f& feedForwardPosVelocity,
68  const Eigen::Vector3f& feedForwardOriVelocity,
69  const Eigen::VectorXf& feedForwardHandJointsVelocity,
70  const std::optional<std::string>& shape = std::nullopt);
71 
72  Eigen::Vector3f getTargetPosition() const;
75  void updateVelocities(const GraspTrajectoryKeypointPtr& prev, float deltat);
76  };
77 
78  class GraspTrajectory
79  {
80  public:
82  using KeypointPtr = std::shared_ptr<Keypoint>;
83 
84  struct Length
85  {
86  float pos = 0;
87  float ori = 0;
88  };
89 
90 
91  public:
92  GraspTrajectory() = default;
93  GraspTrajectory(const std::vector<Keypoint>& keypoints);
94 
95  GraspTrajectory(const Eigen::Matrix4f& tcpStart,
96  const armarx::NameValueMap& handJointsStart,
97  const std::optional<std::string>& shape = std::nullopt);
98 
99  void addKeypoint(const Eigen::Matrix4f& tcpTarget,
100  const armarx::NameValueMap& handJointsTarget,
101  float dt,
102  const std::optional<std::string>& shape = std::nullopt);
103 
104  size_t getKeypointCount() const;
105  const std::vector<KeypointPtr>& getAllKeypoints() const;
106 
107  void insertKeypoint(size_t index,
108  const Eigen::Matrix4f& tcpTarget,
109  const armarx::NameValueMap& handJointsTarget,
110  float dt,
111  const std::optional<std::string>& shape = std::nullopt);
112 
113  void removeKeypoint(size_t index);
114 
115  void replaceKeypoint(size_t index,
116  const Eigen::Matrix4f& tcpTarget,
117  const armarx::NameValueMap& handJointsTarget,
118  float dt,
119  const std::optional<std::string>& shape = std::nullopt);
120 
121  void setKeypointDt(size_t index, float dt);
122 
123  const KeypointPtr& lastKeypoint() const;
124  const KeypointPtr& getKeypoint(int i) const;
126 
127  void getIndex(float t, int& i1, int& i2, float& f) const;
128 
129  Eigen::Vector3f GetPosition(float t) const;
130 
131  Eigen::Matrix3f GetOrientation(float t) const;
132 
133  Eigen::Matrix4f GetPose(float t) const;
134 
135  std::vector<Eigen::Matrix4f> getAllKeypointPoses() const;
136  std::vector<Eigen::Vector3f> getAllKeypointPositions() const;
137  std::vector<Eigen::Matrix3f> getAllKeypointOrientations() const;
138 
139  armarx::NameValueMap GetHandValues(float t) const;
140  std::optional<std::string> GetShape(float t) const;
141 
142  Eigen::Vector3f GetPositionDerivative(float t) const;
143 
144  Eigen::Vector3f GetOrientationDerivative(float t) const;
145 
147 
148  Eigen::Vector3f GetHandJointsDerivative(float t) const;
149 
150  float getDuration() const;
151 
152  Length calculateLength() const;
153 
154 
155  GraspTrajectoryPtr getTranslatedAndRotated(const Eigen::Vector3f& translation,
156  const Eigen::Matrix3f& rotation) const;
159 
161 
163  const Eigen::Matrix4f& target,
164  const Eigen::Vector3f& handForward = Eigen::Vector3f::UnitZ()) const;
165 
167  calculateReachability(VirtualRobot::RobotNodeSetPtr rns,
168  VirtualRobot::RobotNodePtr tcp = VirtualRobot::RobotNodePtr(),
170 
171 
172  void writeToFile(const std::string& filename);
173 
175  static GraspTrajectoryPtr ReadFromFile(const std::string& filename);
176  static GraspTrajectoryPtr ReadFromJSON(const std::string& filename);
177  static GraspTrajectoryPtr ReadFromString(const std::string& xml);
178 
179  void setFrame(const std::string& frame);
180  const std::optional<std::string>& getFrame() const;
181 
182  private:
183  void updateKeypointMap();
184 
185  private:
186  std::vector<KeypointPtr> keypoints;
187  std::map<float, size_t> keypointMap;
188 
189  std::optional<std::string> frame_;
190  };
191 } // 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::GraspTrajectoryKeypoint::tcpTarget
Eigen::Matrix4f tcpTarget
Definition: GraspTrajectory.h:50
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::GraspTrajectory::getFrame
const std::optional< std::string > & getFrame() const
Definition: GraspTrajectory.cpp:780
armarx::GraspTrajectory::ReadFromJSON
static GraspTrajectoryPtr ReadFromJSON(const std::string &filename)
Definition: GraspTrajectory.cpp:199
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::GraspTrajectoryKeypoint::GraspTrajectoryKeypointPtr
std::shared_ptr< GraspTrajectoryKeypoint > GraspTrajectoryKeypointPtr
Definition: GraspTrajectory.h:48
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::GraspTrajectoryKeypoint::feedForwardHandJointsVelocity
Eigen::VectorXf feedForwardHandJointsVelocity
Definition: GraspTrajectory.h:56
armarx::GraspTrajectory::getStartPose
Eigen::Matrix4f getStartPose()
Definition: GraspTrajectory.cpp:210
armarx::GraspTrajectoryKeypoint::getTargetPose
Eigen::Matrix4f getTargetPose() const
armarx::SimpleDiffIK::Reachability
Definition: SimpleDiffIK.h:83
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
armarx::GraspTrajectoryKeypoint::updateVelocities
void updateVelocities(const GraspTrajectoryKeypointPtr &prev, float deltat)
armarx::GraspTrajectoryKeypoint::feedForwardPosVelocity
Eigen::Vector3f feedForwardPosVelocity
Definition: GraspTrajectory.h:54
armarx::GraspTrajectory::getTransformedToOtherHand
GraspTrajectoryPtr getTransformedToOtherHand() const
Definition: GraspTrajectory.cpp:657
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::GraspTrajectoryKeypoint::getTargetOrientation
Eigen::Matrix3f getTargetOrientation() const
armarx::GraspTrajectory::ReadFromReader
static GraspTrajectoryPtr ReadFromReader(const RapidXmlReaderPtr &reader)
Definition: GraspTrajectory.cpp:477
armarx::GraspTrajectory::GetShape
std::optional< std::string > GetShape(float t) const
Definition: GraspTrajectory.cpp:511
armarx::GraspTrajectoryKeypoint::feedForwardOriVelocity
Eigen::Vector3f feedForwardOriVelocity
Definition: GraspTrajectory.h:55
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::setFrame
void setFrame(const std::string &frame)
Definition: GraspTrajectory.cpp:774
armarx::GraspTrajectory::GetPositionDerivative
Eigen::Vector3f GetPositionDerivative(float t)
Definition: GraspTrajectory.cpp:316
armarx::GraspTrajectory::removeKeypoint
void removeKeypoint(size_t index)
Definition: GraspTrajectory.cpp:150
armarx::GraspTrajectoryKeypoint::getTargetPosition
Eigen::Vector3f getTargetPosition() const
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::getTransformed
GraspTrajectoryPtr getTransformed(const Eigen::Matrix4f &transform)
Definition: GraspTrajectory.cpp:404
armarx::KeypointPtr
std::shared_ptr< Keypoint > KeypointPtr
Definition: KeypointManager.h:126
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::GraspTrajectoryKeypoint::GraspTrajectoryKeypoint
GraspTrajectoryKeypoint()=default
armarx::GraspTrajectory::getAllKeypoints
const std::vector< KeypointPtr > & getAllKeypoints() const
Definition: GraspTrajectory.cpp:292
armarx::GraspTrajectoryKeypoint::dt
float dt
Definition: GraspTrajectory.h:53
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
armarx::control::njoint_controller::platform::platform_follower_controller::NameValueMap
std::map< std::string, float > NameValueMap
Definition: PlatformFollowerController.h:88
armarx::GraspTrajectoryKeypoint
Definition: GraspTrajectory.h:45
armarx::GraspTrajectory::Keypoint
Definition: GraspTrajectory.h:55
armarx::GraspTrajectoryKeypoint::shape
std::optional< std::string > shape
Definition: GraspTrajectory.h:52
armarx::GraspTrajectory::lastKeypoint
KeypointPtr & lastKeypoint()
Definition: GraspTrajectory.cpp:198
armarx::GraspTrajectory::getKeypoint
KeypointPtr & getKeypoint(int i)
Definition: GraspTrajectory.cpp:204
armarx::GraspTrajectory::GetOrientation
Eigen::Matrix3f GetOrientation(float t)
Definition: GraspTrajectory.cpp:251
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::GraspTrajectoryKeypoint::handJointsTarget
armarx::NameValueMap handJointsTarget
Definition: GraspTrajectory.h:51
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::getDuration
float getDuration() const
Definition: GraspTrajectory.cpp:352
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
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