multi_actuator_transmission_loader.cpp
Go to the documentation of this file.
1 //
2 // Created by luotinkai on 2021/12/5.
3 //
4 
7 
10 
11 namespace transmission_interface
12 {
14 {
15  std::vector<double> act_reduction;
16  const bool act_config_ok = getActuatorConfig(transmission_info, act_reduction);
17  if (!act_config_ok)
18  {
19  return TransmissionSharedPtr();
20  }
21 
22  double jnt_reduction, jnt_offset;
23  getJointConfig(transmission_info, jnt_reduction, jnt_offset);
24 
25  try
26  {
27  TransmissionSharedPtr transmission(
28  new MultiActuatorTransmission(transmission_info, act_reduction, jnt_reduction, jnt_offset));
29  return transmission;
30  }
31  catch (const TransmissionInterfaceException& ex)
32  {
34  ROS_ERROR_STREAM_NAMED("parser", "Failed to construct transmission '"
35  << transmission_info.name_ << "' of type '"
36  << demangledTypeName<MultiActuatorTransmissionLoader>() << "'. " << ex.what());
37  return TransmissionSharedPtr();
38  }
39 }
40 
42  std::vector<double>& actuator_reduction)
43 {
44  const std::string actuator_role = "main";
45  static unsigned int act_num = transmission_info.actuators_.size();
46  std::vector<TiXmlElement> act_elements(act_num, "");
47  std::vector<std::string> act_names(act_num);
48  std::vector<std::string> act_roles(act_num);
49 
50  for (unsigned int i = 0; i < act_num; ++i)
51  {
52  act_names[i] = transmission_info.actuators_[i].name_;
53 
54  act_elements[i] = loadXmlElement(transmission_info.actuators_[i].xml_element_);
55 
56  std::string& act_role = act_roles[i];
57  getActuatorRole(act_elements[i], act_names[i], transmission_info.name_, true, // Required
58  act_role);
59  }
60  if (!(actuator_role == act_roles[0]))
61  {
62  ROS_ERROR_STREAM_NAMED("parser", "Could not find main actuator");
63  return false;
64  }
65  actuator_reduction.resize(act_num);
66  for (unsigned int i = 0; i < act_num; ++i)
67  {
68  getActuatorReduction(act_elements[i], act_names[i], transmission_info.name_, true, actuator_reduction[i]);
69  }
70 
71  return true;
72 }
73 
74 bool MultiActuatorTransmissionLoader::getJointConfig(const TransmissionInfo& transmission_info, double& joint_reduction,
75  double& joint_offset)
76 {
77  TiXmlElement jnt_elements = "";
78 
79  std::string jnt_names = transmission_info.joints_[0].name_;
80 
81  jnt_elements = loadXmlElement(transmission_info.joints_[0].xml_element_);
82 
83  getJointReduction(jnt_elements, jnt_names, transmission_info.name_, false, joint_reduction);
84  getJointOffset(jnt_elements, jnt_names, transmission_info.name_, false, joint_offset);
85  return true;
86 }
87 
88 } // namespace transmission_interface
89 
demangle_symbol.h
transmission_interface::TransmissionSharedPtr
std::shared_ptr< Transmission > TransmissionSharedPtr
transmission_interface::MultiActuatorTransmission
Definition: multi_actuator_transmission.h:16
transmission_interface
transmission_interface::TransmissionInfo::name_
std::string name_
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)
transmission_interface::MultiActuatorTransmissionLoader::getActuatorConfig
static bool getActuatorConfig(const TransmissionInfo &transmission_info, std::vector< double > &actuator_reduction)
Definition: multi_actuator_transmission_loader.cpp:41
transmission_interface::TransmissionInfo::joints_
std::vector< JointInfo > joints_
hardware_interface::internal::demangledTypeName
std::string demangledTypeName()
transmission_interface::TransmissionInfo::actuators_
std::vector< ActuatorInfo > actuators_
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)
multi_actuator_transmission.h
PLUGINLIB_EXPORT_CLASS
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
ROS_ERROR_STREAM_NAMED
#define ROS_ERROR_STREAM_NAMED(name, args)
transmission_interface::MultiActuatorTransmissionLoader::getJointConfig
static bool getJointConfig(const TransmissionInfo &transmission_info, double &joint_reduction, double &joint_offset)
Definition: multi_actuator_transmission_loader.cpp:74
transmission_interface::MultiActuatorTransmissionLoader::load
TransmissionSharedPtr load(const TransmissionInfo &transmission_info) override
Definition: multi_actuator_transmission_loader.cpp:13
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)
class_list_macros.hpp
transmission_interface::TransmissionInterfaceException
transmission_interface::TransmissionInterfaceException::what
const char * what() const noexcept override
transmission_interface::TransmissionLoader
transmission_interface::TransmissionInfo
transmission_interface::TransmissionLoader::loadXmlElement
static TiXmlElement loadXmlElement(const std::string &element_str)
transmission_interface::MultiActuatorTransmissionLoader
Definition: multi_actuator_transmission_loader.h:13
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)
multi_actuator_transmission_loader.h


rm_hw
Author(s): Qiayuan Liao
autogenerated on Tue May 6 2025 02:23:44