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
45namespace 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
56 {
57 public:
58 Eigen::Matrix4f tcpTarget;
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);
66 Keypoint(const Eigen::Matrix4f& tcpTarget,
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;
73 Eigen::Matrix3f getTargetOrientation() const;
74 Eigen::Matrix4f getTargetPose() 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);
110 Eigen::Matrix4f getStartPose();
111
112 void getIndex(float t, int& i1, int& i2, float& f);
113
114 Eigen::Vector3f GetPosition(float t);
115
116 Eigen::Matrix3f GetOrientation(float t);
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);
142 GraspTrajectoryPtr getTransformed(const Eigen::Matrix4f& transform);
143
145
147 getTransformedToGraspPose(const Eigen::Matrix4f& target,
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
uint8_t index
constexpr T dt
Eigen::Matrix3f getTargetOrientation() const
Eigen::VectorXf feedForwardHandJointsVelocity
Eigen::Vector3f getTargetPosition() const
void updateVelocities(const KeypointPtr &prev, float dt)
Eigen::Matrix4f getTargetPose() const
Keypoint(const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget)
Eigen::VectorXf GetHandValues(float t)
void removeKeypoint(size_t index)
Eigen::Vector3f GetOrientationDerivative(float t)
Eigen::Matrix4f getStartPose()
Eigen::Matrix4f GetPose(float t)
SimpleDiffIK::Reachability calculateReachability(VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp=VirtualRobot::RobotNodePtr(), SimpleDiffIK::Parameters params=SimpleDiffIK::Parameters())
Eigen::Vector3f GetPositionDerivative(float t)
void addKeypoint(const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
GraspTrajectoryPtr getClone()
GraspTrajectoryPtr getTranslatedAndRotated(const Eigen::Vector3f &translation, const Eigen::Matrix3f &rotation)
static GraspTrajectoryPtr ReadFromString(const std::string &xml)
std::vector< Eigen::Vector3f > getAllKeypointPositions()
Eigen::Vector3f GetPosition(float t)
GraspTrajectoryKeypoint Keypoint
void setKeypointDt(size_t index, float dt)
std::vector< Eigen::Matrix3f > getAllKeypointOrientations()
std::shared_ptr< Keypoint > KeypointPtr
void replaceKeypoint(size_t index, const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
GraspTrajectory(const Eigen::Matrix4f &tcpStart, const Eigen::VectorXf &handJointsStart)
Eigen::VectorXf GetHandJointsDerivative(float t)
GraspTrajectoryPtr getTransformed(const Eigen::Matrix4f &transform)
KeypointPtr & getKeypoint(int i)
void getIndex(float t, int &i1, int &i2, float &f)
std::vector< Eigen::Matrix4f > getAllKeypointPoses()
Eigen::Matrix3f GetOrientation(float t)
void insertKeypoint(size_t index, const Eigen::Matrix4f &tcpTarget, const Eigen::VectorXf &handJointsTarget, float dt)
GraspTrajectoryPtr getTransformedToGraspPose(const Eigen::Matrix4f &target, const Eigen::Vector3f &handForward=Eigen::Vector3f::UnitZ())
static GraspTrajectoryPtr ReadFromReader(const RapidXmlReaderPtr &reader)
Eigen::Vector6f GetTcpDerivative(float t)
static GraspTrajectoryPtr ReadFromFile(const grasping::GraspCandidatePtr &cnd)
void writeToFile(const std::string &filename)
Matrix< float, 6, 1 > Vector6f
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< RapidXmlReader > RapidXmlReaderPtr
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
std::shared_ptr< class GraspTrajectory > GraspTrajectoryPtr