RobotNameHelper.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 <RobotAPI/interface/core/RobotState.h>
27 
28 #include <VirtualRobot/Robot.h>
29 #include <VirtualRobot/VirtualRobot.h>
30 #include <VirtualRobot/Visualization/TriMeshModel.h>
31 
32 namespace armarx
33 {
34  using RobotNameHelperPtr = std::shared_ptr<class RobotNameHelper>;
35  using StatechartProfilePtr = std::shared_ptr<class StatechartProfile>;
36 
37  class RapidXmlReaderNode;
38 
39  struct RobotArm;
40 
41  struct Arm
42  {
43  friend class RobotNameHelper;
44 
45  public:
46 
47  std::string getSide() const;
48 
49  std::string getKinematicChain() const;
50 
51  std::string getTorsoKinematicChain() const;
52 
53  std::string getTCP() const;
54 
55  std::string getForceTorqueSensor() const;
56 
57  std::string getForceTorqueSensorFrame() const;
58 
59  std::string getEndEffector() const;
60 
61  std::string getMemoryHandName() const;
62 
63  std::string getHandControllerName() const;
64 
65  std::string getHandRootNode() const;
66 
67  std::string getHandModelPath() const;
68 
69  std::string getAbsoluteHandModelPath() const;
70 
71  std::string getHandModelPackage() const;
72 
73  std::string getPalmCollisionModel() const;
74 
75  std::string getFullHandCollisionModel() const;
76 
77  RobotArm addRobot(const VirtualRobot::RobotPtr& robot) const;
78 
79  Arm(const std::shared_ptr<const RobotNameHelper>& rnh, const std::string& side);
80 
81  Arm() = default;
82 
83  Arm(Arm&&) = default;
84 
85  Arm(const Arm&) = default;
86 
87  Arm& operator=(Arm&&) = default;
88 
89  Arm& operator=(const Arm&) = default;
90 
91  std::shared_ptr<const RobotNameHelper> getRobotNameHelper() const;
92 
93  std::string select(const std::string& path) const;
94 
95  private:
96 
97  std::shared_ptr<const RobotNameHelper> rnh;
98  std::string side;
99  };
100 
101  struct RobotArm
102  {
103  friend class RobotNameHelper;
104 
105  friend struct Arm;
106  public:
107  std::string getSide() const;
108 
109  VirtualRobot::RobotNodeSetPtr getKinematicChain() const;
110 
111  VirtualRobot::RobotNodeSetPtr getTorsoKinematicChain() const;
112 
113  VirtualRobot::RobotNodePtr getTCP() const;
114 
115  VirtualRobot::RobotNodePtr getHandRootNode() const;
116 
117  VirtualRobot::RobotNodePtr getPalmCollisionModel() const;
118 
119  VirtualRobot::TriMeshModelPtr getFullHandCollisionModel() const;
120 
122 
123  const Arm& getArm() const;
124 
125  const VirtualRobot::RobotPtr& getRobot() const;
126 
127  RobotArm(const Arm& arm, const VirtualRobot::RobotPtr& robot);
128 
129  RobotArm() = default;
130 
131  RobotArm(RobotArm&&) = default;
132 
133  RobotArm(const RobotArm&) = default;
134 
135  RobotArm& operator=(RobotArm&&) = default;
136 
137  RobotArm& operator=(const RobotArm&) = default;
138 
139  private:
140 
141  Arm arm;
143  };
144 
145  class RobotNameHelper : public std::enable_shared_from_this<RobotNameHelper>
146  {
147  public:
148  static void
149  writeRobotInfoNode(const RobotInfoNodePtr& n, std::ostream& str, std::size_t indent = 0, char indentChar = ' ');
150  using Arm = armarx::Arm;
152  class Node
153  {
154  public:
155  Node(const RobotInfoNodePtr& robotInfo);
156 
157  std::string value();
158 
159  Node select(const std::string& name, const std::vector<std::string>& profiles);
160 
161  bool isValid();
162 
163  void checkValid();
164 
165  private:
166  RobotInfoNodePtr robotInfo;
167  };
168 
169  static const std::string LocationLeft;
170  static const std::string LocationRight;
171 
172  std::string select(const std::string& path) const;
173 
174  static RobotNameHelperPtr Create(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile);
175 
176  static RobotNameHelperPtr
177  Create(const std::string& robotXmlFilename, const StatechartProfilePtr& profile = nullptr);
178 
179  RobotNameHelper(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile = nullptr);
180 
181  RobotNameHelper(RobotNameHelper&&) = default;
182 
183  RobotNameHelper(const RobotNameHelper&) = default;
184 
186 
187  RobotNameHelper& operator=(const RobotNameHelper&) = default;
188 
189  Arm getArm(const std::string& side) const;
190 
191  RobotArm getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot) const;
192 
193  const std::vector<std::string>& getProfiles() const;
194 
195  const RobotInfoNodePtr& getRobotInfoNodePtr() const;
196 
197  private:
198 
199  static RobotInfoNodePtr readRobotInfo(const RapidXmlReaderNode& infoNode);
200 
201  RobotNameHelper& self()
202  {
203  return *this;
204  }
205 
206  Node root;
207  std::vector<std::string> profiles;
208  RobotInfoNodePtr robotInfo;
209  };
210 }
armarx::RobotNameHelper::LocationLeft
static const std::string LocationLeft
Definition: RobotNameHelper.h:169
armarx::RobotNameHelper::Node::select
Node select(const std::string &name, const std::vector< std::string > &profiles)
Definition: RobotNameHelper.cpp:157
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:42
armarx::Arm::getMemoryHandName
std::string getMemoryHandName() const
Definition: RobotNameHelper.cpp:241
armarx::Arm::getFullHandCollisionModel
std::string getFullHandCollisionModel() const
Definition: RobotNameHelper.cpp:284
armarx::Arm::getAbsoluteHandModelPath
std::string getAbsoluteHandModelPath() const
Definition: RobotNameHelper.cpp:265
armarx::Arm::addRobot
RobotArm addRobot(const VirtualRobot::RobotPtr &robot) const
Definition: RobotNameHelper.cpp:291
armarx::RobotArm::RobotArm
RobotArm()=default
armarx::Arm::getPalmCollisionModel
std::string getPalmCollisionModel() const
Definition: RobotNameHelper.cpp:278
armarx::Arm::getHandRootNode
std::string getHandRootNode() const
Definition: RobotNameHelper.cpp:253
armarx::Arm::getHandModelPackage
std::string getHandModelPackage() const
Definition: RobotNameHelper.cpp:272
armarx::RobotArm::getSide
std::string getSide() const
Definition: RobotNameHelper.cpp:309
armarx::RobotNameHelper
Definition: RobotNameHelper.h:145
armarx::StatechartProfilePtr
std::shared_ptr< class StatechartProfile > StatechartProfilePtr
Definition: StatechartContext.h:52
armarx::RobotNameHelper::Node::Node
Node(const RobotInfoNodePtr &robotInfo)
Definition: RobotNameHelper.cpp:149
armarx::RobotNameHelper::LocationRight
static const std::string LocationRight
Definition: RobotNameHelper.h:170
armarx::RobotArm::getTorsoKinematicChain
VirtualRobot::RobotNodeSetPtr getTorsoKinematicChain() const
Definition: RobotNameHelper.cpp:322
armarx::RobotNameHelper::getProfiles
const std::vector< std::string > & getProfiles() const
Definition: RobotNameHelper.cpp:385
armarx::RobotArm::getFullHandCollisionModel
VirtualRobot::TriMeshModelPtr getFullHandCollisionModel() const
Definition: RobotNameHelper.cpp:343
armarx::RobotNameHelper::select
std::string select(const std::string &path) const
Definition: RobotNameHelper.cpp:78
armarx::Arm::getTCP
std::string getTCP() const
Definition: RobotNameHelper.cpp:217
armarx::RobotNameHelper::writeRobotInfoNode
static void writeRobotInfoNode(const RobotInfoNodePtr &n, std::ostream &str, std::size_t indent=0, char indentChar=' ')
Definition: RobotNameHelper.cpp:39
armarx::RobotNameHelper::getRobotArm
RobotArm getRobotArm(const std::string &side, const VirtualRobot::RobotPtr &robot) const
Definition: RobotNameHelper.cpp:139
armarx::Arm::getTorsoKinematicChain
std::string getTorsoKinematicChain() const
Definition: RobotNameHelper.cpp:211
armarx::RobotNameHelper::operator=
RobotNameHelper & operator=(RobotNameHelper &&)=default
armarx::Arm::getForceTorqueSensor
std::string getForceTorqueSensor() const
Definition: RobotNameHelper.cpp:223
armarx::Arm::getEndEffector
std::string getEndEffector() const
Definition: RobotNameHelper.cpp:235
armarx::RobotArm::getHandRootNode
VirtualRobot::RobotNodePtr getHandRootNode() const
Definition: RobotNameHelper.cpp:352
armarx::RobotNameHelper::getRobotInfoNodePtr
const RobotInfoNodePtr & getRobotInfoNodePtr() const
Definition: RobotNameHelper.cpp:56
armarx::RobotNameHelperPtr
std::shared_ptr< class RobotNameHelper > RobotNameHelperPtr
Definition: RobotNameHelper.h:34
armarx::RobotArm::getTCP
VirtualRobot::RobotNodePtr getTCP() const
Definition: RobotNameHelper.cpp:329
armarx::RobotArm::getTcp2HandRootTransform
Eigen::Matrix4f getTcp2HandRootTransform() const
Definition: RobotNameHelper.cpp:359
armarx::Arm::getRobotNameHelper
std::shared_ptr< const RobotNameHelper > getRobotNameHelper() const
Definition: RobotNameHelper.cpp:144
armarx::RobotNameHelper::Node::isValid
bool isValid()
Definition: RobotNameHelper.cpp:183
armarx::RobotArm::getPalmCollisionModel
VirtualRobot::RobotNodePtr getPalmCollisionModel() const
Definition: RobotNameHelper.cpp:336
armarx::RobotArm::getKinematicChain
VirtualRobot::RobotNodeSetPtr getKinematicChain() const
Definition: RobotNameHelper.cpp:315
armarx::Arm::Arm
Arm()=default
armarx::RapidXmlReaderNode
Definition: RapidXmlReader.h:68
armarx::RobotNameHelper::Node::value
std::string value()
Definition: RobotNameHelper.cpp:151
armarx::Arm::getKinematicChain
std::string getKinematicChain() const
Definition: RobotNameHelper.cpp:205
armarx::Arm::getHandModelPath
std::string getHandModelPath() const
Definition: RobotNameHelper.cpp:259
armarx::RobotArm
Definition: RobotNameHelper.h:101
armarx::RobotNameHelper::RobotNameHelper
RobotNameHelper(const RobotInfoNodePtr &robotInfo, const StatechartProfilePtr &profile=nullptr)
Definition: RobotNameHelper.cpp:64
armarx::RobotArm::operator=
RobotArm & operator=(RobotArm &&)=default
armarx::RobotArm::getRobot
const VirtualRobot::RobotPtr & getRobot() const
Definition: RobotNameHelper.cpp:369
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::Arm::select
std::string select(const std::string &path) const
Definition: RobotNameHelper.cpp:303
armarx::Arm::getSide
std::string getSide() const
Definition: RobotNameHelper.cpp:200
armarx::RobotNameHelper::Create
static RobotNameHelperPtr Create(const RobotInfoNodePtr &robotInfo, const StatechartProfilePtr &profile)
Definition: RobotNameHelper.cpp:96
armarx::Arm
Definition: RobotNameHelper.h:41
armarx::RobotNameHelper::Node
Definition: RobotNameHelper.h:152
armarx::RobotArm::getArm
const Arm & getArm() const
Definition: RobotNameHelper.cpp:374
armarx::Arm::getForceTorqueSensorFrame
std::string getForceTorqueSensorFrame() const
Definition: RobotNameHelper.cpp:229
armarx::RobotNameHelper::Node::checkValid
void checkValid()
Definition: RobotNameHelper.cpp:188
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::Arm::operator=
Arm & operator=(Arm &&)=default
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18
armarx::RobotNameHelper::getArm
Arm getArm(const std::string &side) const
Definition: RobotNameHelper.cpp:133
armarx::Arm::getHandControllerName
std::string getHandControllerName() const
Definition: RobotNameHelper.cpp:247