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