allowed_collision_matrix.cpp
Go to the documentation of this file.
1 
28 #include <boost/serialization/access.hpp>
29 #include <boost/serialization/nvp.hpp>
30 #include <boost/serialization/utility.hpp>
31 #if (BOOST_VERSION >= 107400) && (BOOST_VERSION < 107500)
32 #include <boost/serialization/library_version_type.hpp>
33 #endif
34 #include <boost/serialization/unordered_map.hpp>
36 
37 #include <tesseract_common/utils.h>
39 
40 namespace tesseract_common
41 {
42 bool operator==(const AllowedCollisionEntries& entries_1, const AllowedCollisionEntries& entries_2)
43 {
44  if (entries_1.size() != entries_2.size())
45  return false;
46 
47  for (const auto& entry : entries_1)
48  {
49  // Check if the key exists
50  auto cp = entries_2.find(entry.first);
51  if (cp == entries_2.end())
52  return false;
53  // Check if the value is the same
54  if (cp->second != entry.second)
55  return false;
56  }
57  return true;
58 }
59 
61 {
62  for (const auto& entry : entries)
63  {
64  auto link_pair = tesseract_common::makeOrderedLinkPair(entry.first.first, entry.first.second);
65  lookup_table_[link_pair] = entry.second;
66  }
67 }
68 
69 void AllowedCollisionMatrix::addAllowedCollision(const std::string& link_name1,
70  const std::string& link_name2,
71  const std::string& reason)
72 {
73  auto link_pair = tesseract_common::makeOrderedLinkPair(link_name1, link_name2);
74  lookup_table_[link_pair] = reason;
75 }
76 
78 
79 void AllowedCollisionMatrix::removeAllowedCollision(const std::string& link_name1, const std::string& link_name2)
80 {
81  auto link_pair = tesseract_common::makeOrderedLinkPair(link_name1, link_name2);
82  lookup_table_.erase(link_pair);
83 }
84 
85 void AllowedCollisionMatrix::removeAllowedCollision(const std::string& link_name)
86 {
87  for (auto it = lookup_table_.begin(); it != lookup_table_.end() /* not hoisted */; /* no increment */)
88  {
89  if (it->first.first == link_name || it->first.second == link_name)
90  {
91  it = lookup_table_.erase(it);
92  }
93  else
94  {
95  ++it;
96  }
97  }
98 }
99 
100 bool AllowedCollisionMatrix::isCollisionAllowed(const std::string& link_name1, const std::string& link_name2) const
101 {
102  thread_local LinkNamesPair link_pair;
103  tesseract_common::makeOrderedLinkPair(link_pair, link_name1, link_name2);
104  return (lookup_table_.find(link_pair) != lookup_table_.end());
105 }
106 
108 
110 {
111  lookup_table_.insert(acm.getAllAllowedCollisions().begin(), acm.getAllAllowedCollisions().end());
112 }
113 
115 
117 {
118  bool equal = true;
119  equal &= lookup_table_ == rhs.lookup_table_;
120 
121  return equal;
122 }
124 
125 template <class Archive>
126 void AllowedCollisionMatrix::serialize(Archive& ar, const unsigned int /*version*/)
127 {
128  ar& BOOST_SERIALIZATION_NVP(lookup_table_);
129 }
130 
131 std::ostream& operator<<(std::ostream& os, const AllowedCollisionMatrix& acm)
132 {
133  for (const auto& pair : acm.getAllAllowedCollisions())
134  os << "link=" << pair.first.first << " link=" << pair.first.second << " reason=" << pair.second << "\n";
135  return os;
136 }
137 } // namespace tesseract_common
138 
141 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_common::AllowedCollisionMatrix)
allowed_collision_matrix.h
tesseract_common
Definition: allowed_collision_matrix.h:19
tesseract_common::AllowedCollisionMatrix::isCollisionAllowed
virtual bool isCollisionAllowed(const std::string &link_name1, const std::string &link_name2) const
This checks if two links are allowed to be in collision.
Definition: allowed_collision_matrix.cpp:100
tesseract_common::AllowedCollisionMatrix::getAllAllowedCollisions
const AllowedCollisionEntries & getAllAllowedCollisions() const
Get all of the entries in the allowed collision matrix.
Definition: allowed_collision_matrix.cpp:77
tesseract_common::AllowedCollisionEntries
std::unordered_map< tesseract_common::LinkNamesPair, std::string, tesseract_common::PairHash > AllowedCollisionEntries
Definition: allowed_collision_matrix.h:24
tesseract_common::AllowedCollisionMatrix::operator==
bool operator==(const AllowedCollisionMatrix &rhs) const
Definition: allowed_collision_matrix.cpp:116
tesseract_common::AllowedCollisionMatrix::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: allowed_collision_matrix.cpp:126
tesseract_common::AllowedCollisionMatrix::insertAllowedCollisionMatrix
void insertAllowedCollisionMatrix(const AllowedCollisionMatrix &acm)
Inserts an allowable collision matrix ignoring duplicate pairs.
Definition: allowed_collision_matrix.cpp:109
tesseract_common::AllowedCollisionMatrix::reserveAllowedCollisionMatrix
void reserveAllowedCollisionMatrix(std::size_t size)
Reserve space for the internal data storage.
Definition: allowed_collision_matrix.cpp:114
TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE(Type)
Definition: serialization.h:49
macros.h
Common Tesseract Macros.
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
Definition: macros.h:71
tesseract_common::LinkNamesPair
std::pair< std::string, std::string > LinkNamesPair
Definition: types.h:37
utils.h
Common Tesseract Utility Functions.
tesseract_common::AllowedCollisionMatrix::operator!=
bool operator!=(const AllowedCollisionMatrix &rhs) const
Definition: allowed_collision_matrix.cpp:123
tesseract_common::operator==
bool operator==(const AllowedCollisionEntries &entries_1, const AllowedCollisionEntries &entries_2)
Definition: allowed_collision_matrix.cpp:42
tesseract_common::AllowedCollisionMatrix::lookup_table_
AllowedCollisionEntries lookup_table_
Definition: allowed_collision_matrix.h:107
tesseract_common::AllowedCollisionMatrix::AllowedCollisionMatrix
AllowedCollisionMatrix()=default
tesseract_common::AllowedCollisionMatrix::removeAllowedCollision
virtual void removeAllowedCollision(const std::string &link_name1, const std::string &link_name2)
Remove disabled collision pair from allowed collision matrix.
Definition: allowed_collision_matrix.cpp:79
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: macros.h:72
tesseract_common::AllowedCollisionMatrix
Definition: allowed_collision_matrix.h:28
tesseract_common::AllowedCollisionMatrix::clearAllowedCollisions
void clearAllowedCollisions()
Clears the list of allowed collisions, so that no collision will be allowed.
Definition: allowed_collision_matrix.cpp:107
tesseract_common::makeOrderedLinkPair
LinkNamesPair makeOrderedLinkPair(const std::string &link_name1, const std::string &link_name2)
Create a pair of strings, where the pair.first is always <= pair.second.
Definition: types.cpp:44
serialization.h
Additional Boost serialization wrappers.
tesseract_common::AllowedCollisionMatrix::addAllowedCollision
virtual void addAllowedCollision(const std::string &link_name1, const std::string &link_name2, const std::string &reason)
Disable collision between two collision objects.
Definition: allowed_collision_matrix.cpp:69
tesseract_common::operator<<
std::ostream & operator<<(std::ostream &os, const AllowedCollisionMatrix &acm)
Definition: allowed_collision_matrix.cpp:131


tesseract_common
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:40