kinematics_information.cpp
Go to the documentation of this file.
1 
29 #include <boost/serialization/access.hpp>
30 #include <boost/serialization/base_object.hpp>
31 #include <boost/serialization/map.hpp>
32 #include <boost/serialization/nvp.hpp>
33 #include <boost/serialization/set.hpp>
34 #include <boost/serialization/vector.hpp>
35 #include <boost/serialization/unordered_map.hpp>
37 
38 #include <tesseract_common/utils.h>
41 
42 namespace tesseract_srdf
43 {
45 {
46  group_names.clear();
47  chain_groups.clear();
48  joint_groups.clear();
49  link_groups.clear();
50  group_states.clear();
51  group_tcps.clear();
53 }
54 
56 {
57  group_names.insert(other.group_names.begin(), other.group_names.end());
58 
59  for (const auto& group : other.chain_groups)
60  chain_groups[group.first] = group.second;
61 
62  for (const auto& group : other.joint_groups)
63  joint_groups[group.first] = group.second;
64 
65  for (const auto& group : other.link_groups)
66  link_groups[group.first] = group.second;
67 
68  for (const auto& group : other.group_states)
69  {
70  for (const auto& state : group.second)
71  group_states[group.first][state.first] = state.second;
72  }
73 
74  for (const auto& group : other.group_tcps)
75  {
76  for (const auto& tcp : group.second)
77  group_tcps[group.first][tcp.first] = tcp.second;
78  }
79 
81 }
82 
83 bool KinematicsInformation::hasGroup(const std::string& group_name) const
84 {
85  return std::find(group_names.begin(), group_names.end(), group_name) != group_names.end();
86 }
87 
88 void KinematicsInformation::addChainGroup(const std::string& group_name, const ChainGroup& chain_group)
89 {
90  chain_groups[group_name] = chain_group;
91  group_names.insert(group_name);
92 }
93 
94 void KinematicsInformation::removeChainGroup(const std::string& group_name)
95 {
96  if (chain_groups.erase(group_name) > 0)
97  group_names.erase(group_name);
98 }
99 
100 bool KinematicsInformation::hasChainGroup(const std::string& group_name) const
101 {
102  return (chain_groups.find(group_name) != chain_groups.end());
103 }
104 
105 void KinematicsInformation::addJointGroup(const std::string& group_name, const JointGroup& joint_group)
106 {
107  joint_groups[group_name] = joint_group;
108  group_names.insert(group_name);
109 }
110 
111 void KinematicsInformation::removeJointGroup(const std::string& group_name)
112 {
113  if (joint_groups.erase(group_name) > 0)
114  group_names.erase(group_name);
115 }
116 
117 bool KinematicsInformation::hasJointGroup(const std::string& group_name) const
118 {
119  return (joint_groups.find(group_name) != joint_groups.end());
120 }
121 
122 void KinematicsInformation::addLinkGroup(const std::string& group_name, const LinkGroup& link_group)
123 {
124  link_groups[group_name] = link_group;
125  group_names.insert(group_name);
126 }
127 
128 void KinematicsInformation::removeLinkGroup(const std::string& group_name)
129 {
130  if (link_groups.erase(group_name) > 0)
131  group_names.erase(group_name);
132 }
133 
134 bool KinematicsInformation::hasLinkGroup(const std::string& group_name) const
135 {
136  return (link_groups.find(group_name) != link_groups.end());
137 }
138 
139 void KinematicsInformation::addGroupJointState(const std::string& group_name,
140  const std::string& state_name,
141  const GroupsJointState& joint_state)
142 {
143  group_states[group_name][state_name] = joint_state;
144 }
145 
146 void KinematicsInformation::removeGroupJointState(const std::string& group_name, const std::string& state_name)
147 {
148  group_states[group_name].erase(state_name);
149 
150  if (group_states[group_name].empty())
151  group_states.erase(group_name);
152 }
153 
154 bool KinematicsInformation::hasGroupJointState(const std::string& group_name, const std::string& state_name) const
155 {
156  auto it = group_states.find(group_name);
157  if (it == group_states.end())
158  return false;
159 
160  return (it->second.find(state_name) != it->second.end());
161 }
162 
163 void KinematicsInformation::addGroupTCP(const std::string& group_name,
164  const std::string& tcp_name,
165  const Eigen::Isometry3d& tcp)
166 {
167  group_tcps[group_name][tcp_name] = tcp;
168 }
169 
170 void KinematicsInformation::removeGroupTCP(const std::string& group_name, const std::string& tcp_name)
171 {
172  group_tcps.at(group_name).erase(tcp_name);
173 
174  if (group_tcps[group_name].empty())
175  group_tcps.erase(group_name);
176 }
177 
178 bool KinematicsInformation::hasGroupTCP(const std::string& group_name, const std::string& tcp_name) const
179 {
180  auto it = group_tcps.find(group_name);
181  if (it == group_tcps.end())
182  return false;
183 
184  return (it->second.find(tcp_name) != it->second.end());
185 }
186 
188 {
189  auto double_eq = [](const double& v1, const double& v2) {
190  return tesseract_common::almostEqualRelativeAndAbs(v1, v2, 1e-6, std::numeric_limits<float>::epsilon());
191  };
192 
193  auto state_eq = [double_eq](const GroupsJointState& v1, const GroupsJointState& v2) {
194  return tesseract_common::isIdenticalMap<GroupsJointState, double>(v1, v2, double_eq);
195  };
196 
197  auto tcp_eq = [](const Eigen::Isometry3d& v1, const Eigen::Isometry3d& v2) { return v1.isApprox(v2, 1e-5); };
198 
199  auto list_eq = [](const std::vector<std::string>& v1, const std::vector<std::string>& v2) {
200  return tesseract_common::isIdentical<std::string>(v1, v2, false);
201  };
202 
203  bool equal = true;
204  equal &= tesseract_common::isIdenticalSet<std::string>(group_names, rhs.group_names);
205  equal &= tesseract_common::isIdenticalMap<ChainGroups, ChainGroup>(chain_groups, rhs.chain_groups);
206  equal &= tesseract_common::isIdenticalMap<JointGroups, JointGroup>(joint_groups, rhs.joint_groups, list_eq);
207  equal &= tesseract_common::isIdenticalMap<LinkGroups, LinkGroup>(link_groups, rhs.link_groups, list_eq);
209 
210  equal &= (group_states.size() == rhs.group_states.size());
211  if (equal)
212  {
213  for (const auto& group_state : group_states)
214  {
215  auto it_group = rhs.group_states.find(group_state.first);
216 
217  equal &= (it_group != rhs.group_states.end());
218  if (!equal)
219  break;
220 
221  equal &= tesseract_common::isIdenticalMap<GroupsJointStates, GroupsJointState>(
222  group_state.second, it_group->second, state_eq);
223  if (!equal)
224  break;
225  }
226  }
227 
228  equal &= (group_tcps.size() == rhs.group_tcps.size());
229  if (equal)
230  {
231  for (const auto& group_tcp : group_tcps)
232  {
233  auto it_group = rhs.group_tcps.find(group_tcp.first);
234 
235  equal &= (it_group != rhs.group_tcps.end());
236  if (!equal)
237  break;
238 
239  equal &=
240  tesseract_common::isIdenticalMap<GroupsTCPs, Eigen::Isometry3d>(group_tcp.second, it_group->second, tcp_eq);
241  if (!equal)
242  break;
243  }
244  }
245 
246  return equal;
247 }
249 
250 template <class Archive>
251 void KinematicsInformation::serialize(Archive& ar, const unsigned int /*version*/)
252 {
253  ar& BOOST_SERIALIZATION_NVP(group_names);
254  ar& BOOST_SERIALIZATION_NVP(chain_groups);
255  ar& BOOST_SERIALIZATION_NVP(joint_groups);
256  ar& BOOST_SERIALIZATION_NVP(link_groups);
257  ar& BOOST_SERIALIZATION_NVP(group_states);
258  ar& BOOST_SERIALIZATION_NVP(group_tcps);
259  ar& BOOST_SERIALIZATION_NVP(kinematics_plugin_info);
260 }
261 } // namespace tesseract_srdf
262 
265 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_srdf::KinematicsInformation)
tesseract_srdf::KinematicsInformation::addJointGroup
void addJointGroup(const std::string &group_name, const JointGroup &joint_group)
Add joint group.
Definition: kinematics_information.cpp:105
tesseract_srdf::JointGroup
std::vector< std::string > JointGroup
Definition: kinematics_information.h:56
tesseract_srdf
Main namespace.
Definition: collision_margins.h:43
tesseract_srdf::KinematicsInformation::group_tcps
GroupTCPs group_tcps
A map of group tool center points.
Definition: kinematics_information.h:88
tesseract_srdf::KinematicsInformation::removeJointGroup
void removeJointGroup(const std::string &group_name)
Remove joint group.
Definition: kinematics_information.cpp:111
tesseract_srdf::KinematicsInformation::operator!=
bool operator!=(const KinematicsInformation &rhs) const
Definition: kinematics_information.cpp:248
tesseract_srdf::KinematicsInformation::hasJointGroup
bool hasJointGroup(const std::string &group_name) const
Check if joint group exists.
Definition: kinematics_information.cpp:117
utils.h
tesseract_common::KinematicsPluginInfo::clear
void clear()
tesseract_common::almostEqualRelativeAndAbs
bool almostEqualRelativeAndAbs(const Eigen::Ref< const Eigen::VectorXd > &v1, const Eigen::Ref< const Eigen::VectorXd > &v2, const Eigen::Ref< const Eigen::VectorXd > &max_diff, const Eigen::Ref< const Eigen::VectorXd > &max_rel_diff)
tesseract_srdf::KinematicsInformation::removeChainGroup
void removeChainGroup(const std::string &group_name)
Remove chain group.
Definition: kinematics_information.cpp:94
TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE(Type)
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_srdf::KinematicsInformation::hasGroup
bool hasGroup(const std::string &group_name) const
Check if group exists.
Definition: kinematics_information.cpp:83
tesseract_srdf::KinematicsInformation::hasChainGroup
bool hasChainGroup(const std::string &group_name) const
Check if chain group exists.
Definition: kinematics_information.cpp:100
tesseract_srdf::KinematicsInformation::removeGroupJointState
void removeGroupJointState(const std::string &group_name, const std::string &state_name)
Remove group joint state.
Definition: kinematics_information.cpp:146
tesseract_srdf::KinematicsInformation::addLinkGroup
void addLinkGroup(const std::string &group_name, const LinkGroup &link_group)
Add link group.
Definition: kinematics_information.cpp:122
tesseract_srdf::KinematicsInformation::addGroupTCP
void addGroupTCP(const std::string &group_name, const std::string &tcp_name, const Eigen::Isometry3d &tcp)
Add group tool center point.
Definition: kinematics_information.cpp:163
tesseract_common::KinematicsPluginInfo::insert
void insert(const KinematicsPluginInfo &other)
tesseract_srdf::KinematicsInformation::link_groups
LinkGroups link_groups
A map of link groups.
Definition: kinematics_information.h:82
tesseract_srdf::ChainGroup
std::vector< std::pair< std::string, std::string > > ChainGroup
Definition: kinematics_information.h:54
tesseract_srdf::KinematicsInformation::addGroupJointState
void addGroupJointState(const std::string &group_name, const std::string &state_name, const GroupsJointState &joint_state)
Add group joint state.
Definition: kinematics_information.cpp:139
tesseract_srdf::KinematicsInformation::removeLinkGroup
void removeLinkGroup(const std::string &group_name)
Remove link group.
Definition: kinematics_information.cpp:128
tesseract_srdf::KinematicsInformation::group_names
EIGEN_MAKE_ALIGNED_OPERATOR_NEW GroupNames group_names
A set of group names.
Definition: kinematics_information.h:73
tesseract_srdf::KinematicsInformation::insert
void insert(const KinematicsInformation &other)
Insert the content of an other KinematicsInformation.
Definition: kinematics_information.cpp:55
tesseract_srdf::KinematicsInformation::removeGroupTCP
void removeGroupTCP(const std::string &group_name, const std::string &tcp_name)
Remove group tool center point.
Definition: kinematics_information.cpp:170
serialization.h
tesseract_srdf::KinematicsInformation
This hold the kinematics information used to create the SRDF and is the data container for the manipu...
Definition: kinematics_information.h:66
tesseract_srdf::KinematicsInformation::operator==
bool operator==(const KinematicsInformation &rhs) const
Definition: kinematics_information.cpp:187
tesseract_srdf::KinematicsInformation::hasLinkGroup
bool hasLinkGroup(const std::string &group_name) const
Check if link group exists.
Definition: kinematics_information.cpp:134
kinematics_information.h
This hold the kinematics information.
tesseract_srdf::KinematicsInformation::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: kinematics_information.cpp:251
tesseract_srdf::KinematicsInformation::joint_groups
JointGroups joint_groups
A map of joint groups.
Definition: kinematics_information.h:79
tesseract_srdf::GroupsJointState
std::unordered_map< std::string, double > GroupsJointState
Definition: kinematics_information.h:49
tesseract_srdf::KinematicsInformation::hasGroupJointState
bool hasGroupJointState(const std::string &group_name, const std::string &state_name) const
Check if group joint state exists.
Definition: kinematics_information.cpp:154
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_srdf::KinematicsInformation::clear
void clear()
Clear the kinematics information.
Definition: kinematics_information.cpp:44
tesseract_srdf::KinematicsInformation::hasGroupTCP
bool hasGroupTCP(const std::string &group_name, const std::string &tcp_name) const
Check if group tool center point exists.
Definition: kinematics_information.cpp:178
tesseract_srdf::LinkGroup
std::vector< std::string > LinkGroup
Definition: kinematics_information.h:58
macros.h
tesseract_srdf::KinematicsInformation::chain_groups
ChainGroups chain_groups
A map of chains groups.
Definition: kinematics_information.h:76
tesseract_srdf::KinematicsInformation::group_states
GroupJointStates group_states
A map of group states.
Definition: kinematics_information.h:85
tesseract_srdf::KinematicsInformation::kinematics_plugin_info
tesseract_common::KinematicsPluginInfo kinematics_plugin_info
The kinematics plugin information.
Definition: kinematics_information.h:91
eigen_serialization.h
tesseract_srdf::KinematicsInformation::addChainGroup
void addChainGroup(const std::string &group_name, const ChainGroup &chain_group)
Add chain group.
Definition: kinematics_information.cpp:88


tesseract_srdf
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:04