transmission_loader.h
Go to the documentation of this file.
1 // Copyright (C) 2013, PAL Robotics S.L.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright notice,
7 // this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name of PAL Robotics S.L. nor the names of its
12 // contributors may be used to endorse or promote products derived from
13 // this software without specific prior written permission.
14 //
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 // POSSIBILITY OF SUCH DAMAGE.
27 
29 
30 #pragma once
31 
32 
33 // C++ standard
34 #include <algorithm>
35 #include <limits>
36 #include <sstream>
37 #include <string>
38 #include <vector>
39 #include <memory>
40 
41 // TinyXML
42 #include <tinyxml.h>
43 
44 // ros_control
48 
52 
53 namespace transmission_interface
54 {
55 
62 {
63 public:
64  virtual ~TransmissionLoader() = default;
65 
66  virtual TransmissionSharedPtr load(const TransmissionInfo& transmission_info) = 0;
67 
68 protected:
69 
70  static bool checkActuatorDimension(const TransmissionInfo& transmission_info, const unsigned int expected_dim)
71  {
72  const unsigned int dim = transmission_info.actuators_.size();
73  if (expected_dim != dim)
74  {
75  ROS_ERROR_STREAM_NAMED("parser", "Invalid description for transmission '" << transmission_info.name_ <<
76  "' of type '" << transmission_info.type_ <<
77  "'. Expected " << expected_dim << " actuators, got " << dim << ".");
78  return false;
79  }
80  return true;
81  }
82 
83  static bool checkJointDimension(const TransmissionInfo& transmission_info, const unsigned int expected_dim)
84  {
85  const unsigned int dim = transmission_info.joints_.size();
86  if (expected_dim != dim)
87  {
88  ROS_ERROR_STREAM_NAMED("parser", "Invalid description for transmission '" << transmission_info.name_ <<
89  "' of type '" << transmission_info.type_ <<
90  "'. Expected " << expected_dim << " joints, got " << dim << ".");
91  return false;
92  }
93  return true;
94  }
95 
96  static TiXmlElement loadXmlElement(const std::string& element_str)
97  {
98  TiXmlElement element("");
99  std::stringstream element_stream;
100  element_stream << element_str;
101  element_stream >> element;
102  return element;
103  }
104 
105  static bool getActuatorReduction(const TiXmlElement& parent_el,
106  const std::string& actuator_name,
107  const std::string& transmission_name,
108  bool required,
109  double& reduction);
110 
111  static bool getJointReduction(const TiXmlElement& parent_el,
112  const std::string& joint_name,
113  const std::string& transmission_name,
114  bool required,
115  double& reduction);
116 
117  static bool getJointOffset(const TiXmlElement& parent_el,
118  const std::string& joint_name,
119  const std::string& transmission_name,
120  bool required,
121  double& offset);
122 
123  static bool getActuatorRole(const TiXmlElement& parent_el,
124  const std::string& actuator_name,
125  const std::string& transmission_name,
126  bool required,
127  std::string& role);
128 
129  static bool getJointRole(const TiXmlElement& parent_el,
130  const std::string& joint_name,
131  const std::string& transmission_name,
132  bool required,
133  std::string& role);
134 };
135 
136 typedef std::shared_ptr<TransmissionLoader> TransmissionLoaderSharedPtr;
137 
138 } // namespace
transmission_interface::TransmissionSharedPtr
std::shared_ptr< Transmission > TransmissionSharedPtr
Definition: transmission.h:184
transmission_interface::TransmissionLoader::load
virtual TransmissionSharedPtr load(const TransmissionInfo &transmission_info)=0
transmission_interface::TransmissionLoader::~TransmissionLoader
virtual ~TransmissionLoader()=default
transmission_interface
Definition: bidirectional_effort_joint_interface_provider.h:36
transmission_interface::TransmissionInfo::name_
std::string name_
Definition: transmission_info.h:80
robot_transmissions.h
transmission_interface::TransmissionLoader::getActuatorReduction
static bool getActuatorReduction(const TiXmlElement &parent_el, const std::string &actuator_name, const std::string &transmission_name, bool required, double &reduction)
Definition: transmission_loader.cpp:36
actuator_command_interface.h
transmission_interface::TransmissionInfo::joints_
std::vector< JointInfo > joints_
Definition: transmission_info.h:82
transmission_interface::TransmissionInfo::actuators_
std::vector< ActuatorInfo > actuators_
Definition: transmission_info.h:83
transmission_interface::TransmissionLoader::getActuatorRole
static bool getActuatorRole(const TiXmlElement &parent_el, const std::string &actuator_name, const std::string &transmission_name, bool required, std::string &role)
Definition: transmission_loader.cpp:144
joint_command_interface.h
ROS_ERROR_STREAM_NAMED
#define ROS_ERROR_STREAM_NAMED(name, args)
transmission_interface::TransmissionInfo::type_
std::string type_
Definition: transmission_info.h:81
transmission.h
transmission_interface::TransmissionLoader::getJointRole
static bool getJointRole(const TiXmlElement &parent_el, const std::string &joint_name, const std::string &transmission_name, bool required, std::string &role)
Definition: transmission_loader.cpp:190
transmission_interface::TransmissionLoader::getJointReduction
static bool getJointReduction(const TiXmlElement &parent_el, const std::string &joint_name, const std::string &transmission_name, bool required, double &reduction)
Definition: transmission_loader.cpp:72
transmission_interface::TransmissionLoader::checkActuatorDimension
static bool checkActuatorDimension(const TransmissionInfo &transmission_info, const unsigned int expected_dim)
Definition: transmission_loader.h:70
robot_hw.h
transmission_interface::TransmissionLoader::checkJointDimension
static bool checkJointDimension(const TransmissionInfo &transmission_info, const unsigned int expected_dim)
Definition: transmission_loader.h:83
transmission_info.h
Structs to hold transmission data loaded straight from XML (URDF).
transmission_interface::TransmissionLoader
Abstract interface for loading transmission instances from configuration data.
Definition: transmission_loader.h:61
transmission_interface::TransmissionInfo
Contains semantic info about a given transmission loaded from XML (URDF)
Definition: transmission_info.h:78
transmission_interface::TransmissionLoaderSharedPtr
std::shared_ptr< TransmissionLoader > TransmissionLoaderSharedPtr
Definition: transmission_loader.h:136
transmission_interface::TransmissionLoader::loadXmlElement
static TiXmlElement loadXmlElement(const std::string &element_str)
Definition: transmission_loader.h:96
transmission_interface::TransmissionLoader::getJointOffset
static bool getJointOffset(const TiXmlElement &parent_el, const std::string &joint_name, const std::string &transmission_name, bool required, double &offset)
Definition: transmission_loader.cpp:108


transmission_interface
Author(s): Adolfo Rodriguez Tsouroukdissian
autogenerated on Fri Nov 3 2023 02:08:09