collision_margin_data.h
Go to the documentation of this file.
1 
28 #ifndef TESSERACT_COMMON_COLLISION_MARGIN_DATA_H
29 #define TESSERACT_COMMON_COLLISION_MARGIN_DATA_H
30 
33 #include <boost/serialization/export.hpp>
34 #include <Eigen/Core>
35 #include <string>
36 #include <unordered_map>
37 #include <optional>
39 
40 #include <tesseract_common/types.h>
41 #include <tesseract_common/utils.h>
42 
43 namespace boost::serialization
44 {
45 class access;
46 }
47 
48 namespace tesseract_common
49 {
51 enum class CollisionMarginPairOverrideType : std::uint8_t
52 {
54  NONE,
56  REPLACE,
62  MODIFY
63 };
64 
66  std::unordered_map<tesseract_common::LinkNamesPair, double, tesseract_common::PairHash>;
67 
69 {
70 public:
71  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
72 
73  CollisionMarginPairData() = default;
75 
84  void setCollisionMargin(const std::string& obj1, const std::string& obj2, double margin);
85 
95  std::optional<double> getCollisionMargin(const std::string& obj1, const std::string& obj2) const;
96 
101  double getMaxCollisionMargin() const;
102 
108 
113  void incrementMargins(double increment);
114 
119  void scaleMargins(double scale);
120 
125  bool empty() const;
126 
130  void clear();
131 
137  void apply(const CollisionMarginPairData& pair_margin_data, CollisionMarginPairOverrideType override_type);
138 
139  bool operator==(const CollisionMarginPairData& rhs) const;
140  bool operator!=(const CollisionMarginPairData& rhs) const;
141 
142 private:
145 
147  double max_collision_margin_{ std::numeric_limits<double>::lowest() };
148 
151 
154  template <class Archive>
155  void serialize(Archive& ar, const unsigned int version); // NOLINT
156 };
157 
160 {
161 public:
162  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
163 
164  using Ptr = std::shared_ptr<CollisionMarginData>;
165  using ConstPtr = std::shared_ptr<const CollisionMarginData>;
166 
167  CollisionMarginData(double default_collision_margin = 0);
168  CollisionMarginData(double default_collision_margin, CollisionMarginPairData pair_collision_margins);
169  CollisionMarginData(CollisionMarginPairData pair_collision_margins);
170 
175  void setDefaultCollisionMargin(double default_collision_margin);
176 
181  double getDefaultCollisionMargin() const;
182 
193  void setCollisionMargin(const std::string& obj1, const std::string& obj2, double collision_margin);
194 
204  double getCollisionMargin(const std::string& obj1, const std::string& obj2) const;
205 
211 
219  double getMaxCollisionMargin() const;
220 
225  void incrementMargins(double increment);
226 
231  void scaleMargins(double scale);
232 
238  void apply(const CollisionMarginPairData& pair_margin_data, CollisionMarginPairOverrideType override_type);
239 
240  bool operator==(const CollisionMarginData& rhs) const;
241  bool operator!=(const CollisionMarginData& rhs) const;
242 
243 private:
246 
249 
252  template <class Archive>
253  void serialize(Archive& ar, const unsigned int version); // NOLINT
254 };
255 } // namespace tesseract_common
256 
257 BOOST_CLASS_EXPORT_KEY(tesseract_common::CollisionMarginPairData)
258 BOOST_CLASS_EXPORT_KEY(tesseract_common::CollisionMarginData)
259 #endif // TESSERACT_COMMON_COLLISION_MARGIN_DATA_H
tesseract_common::CollisionMarginData::setCollisionMargin
void setCollisionMargin(const std::string &obj1, const std::string &obj2, double collision_margin)
Set the margin for a given contact pair.
Definition: collision_margin_data.cpp:186
tesseract_common::CollisionMarginData::getMaxCollisionMargin
double getMaxCollisionMargin() const
Get the largest collision margin.
Definition: collision_margin_data.cpp:202
tesseract_common::CollisionMarginPairData::getCollisionMargin
std::optional< double > getCollisionMargin(const std::string &obj1, const std::string &obj2) const
Get the pairs collision margin data.
Definition: collision_margin_data.cpp:55
tesseract_common
Definition: allowed_collision_matrix.h:19
types.h
Common Tesseract Types.
tesseract_common::CollisionMarginPairOverrideType::REPLACE
@ REPLACE
Replace the contact manager's CollisionMarginPairData.
tesseract_common::CollisionMarginData::getCollisionMarginPairData
const CollisionMarginPairData & getCollisionMarginPairData() const
Get Collision Margin Data for stored pairs.
Definition: collision_margin_data.cpp:200
tesseract_common::CollisionMarginData::ConstPtr
std::shared_ptr< const CollisionMarginData > ConstPtr
Definition: collision_margin_data.h:165
tesseract_common::CollisionMarginPairData::CollisionMarginPairData
EIGEN_MAKE_ALIGNED_OPERATOR_NEW CollisionMarginPairData()=default
tesseract_common::CollisionMarginPairOverrideType::MODIFY
@ MODIFY
Modify the contact managers pair margins.
tesseract_common::CollisionMarginPairData::getCollisionMargins
const PairsCollisionMarginData & getCollisionMargins() const
Get Collision Margin Data for stored pairs.
Definition: collision_margin_data.cpp:70
tesseract_common::CollisionMarginPairData::empty
bool empty() const
Check if empty.
Definition: collision_margin_data.cpp:92
macros.h
Common Tesseract Macros.
tesseract_common::CollisionMarginPairData::lookup_table_
PairsCollisionMarginData lookup_table_
A map of link pair names to contact distance.
Definition: collision_margin_data.h:144
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
Definition: macros.h:71
tesseract_common::CollisionMarginPairData::access
friend class boost::serialization::access
Definition: collision_margin_data.h:152
tesseract_common::CollisionMarginData::getDefaultCollisionMargin
double getDefaultCollisionMargin() const
Get the default collision margin.
Definition: collision_margin_data.cpp:184
tesseract_common::Serialization
Definition: serialization.h:97
tesseract_common::CollisionMarginData
Stores information about how the margins allowed between collision objects.
Definition: collision_margin_data.h:159
tesseract_common::CollisionMarginPairData::updateCollisionMarginMax
void updateCollisionMarginMax()
Recalculate the max margin.
Definition: collision_margin_data.cpp:100
tesseract_common::CollisionMarginData::Ptr
std::shared_ptr< CollisionMarginData > Ptr
Definition: collision_margin_data.h:164
tesseract_common::CollisionMarginData::getCollisionMargin
double getCollisionMargin(const std::string &obj1, const std::string &obj2) const
Get the pairs collision margin data.
Definition: collision_margin_data.cpp:191
tesseract_common::CollisionMarginPairData::setCollisionMargin
void setCollisionMargin(const std::string &obj1, const std::string &obj2, double margin)
Set the margin for a given contact pair.
Definition: collision_margin_data.cpp:48
tesseract_common::CollisionMarginPairData::operator!=
bool operator!=(const CollisionMarginPairData &rhs) const
Definition: collision_margin_data.cpp:154
utils.h
Common Tesseract Utility Functions.
tesseract_common::CollisionMarginData::scaleMargins
void scaleMargins(double scale)
Scale all margins by input value.
Definition: collision_margin_data.cpp:216
tesseract_common::CollisionMarginPairOverrideType
CollisionMarginPairOverrideType
Identifies how the provided contact margin data should be applied.
Definition: collision_margin_data.h:51
tesseract_common::CollisionMarginPairData::getMaxCollisionMargin
double getMaxCollisionMargin() const
Get the largest pair collision margin.
Definition: collision_margin_data.cpp:68
tesseract_common::CollisionMarginData::operator!=
bool operator!=(const CollisionMarginData &rhs) const
Definition: collision_margin_data.cpp:237
tesseract_common::CollisionMarginData::CollisionMarginData
CollisionMarginData(double default_collision_margin=0)
Definition: collision_margin_data.cpp:163
tesseract_common::CollisionMarginData::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: collision_margin_data.cpp:240
boost::serialization
Definition: allowed_collision_matrix.h:14
tesseract_common::CollisionMarginData::apply
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
Apply the contents of the provide CollisionMarginPairData based on the override type.
Definition: collision_margin_data.cpp:222
tesseract_common::CollisionMarginData::pair_margins_
CollisionMarginPairData pair_margins_
A map of link pair names to contact distance.
Definition: collision_margin_data.h:248
tesseract_common::CollisionMarginPairData::apply
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
Apply the contents of the provide CollisionMarginPairData based on the override type.
Definition: collision_margin_data.cpp:107
tesseract_common::CollisionMarginPairData::incrementMargins
void incrementMargins(double increment)
Increment all margins by input amount. Useful for inflating or reducing margins.
Definition: collision_margin_data.cpp:72
tesseract_common::CollisionMarginData::incrementMargins
void incrementMargins(double increment)
Increment all margins by input amount. Useful for inflating or reducing margins.
Definition: collision_margin_data.cpp:210
tesseract_common::CollisionMarginData::default_collision_margin_
double default_collision_margin_
Stores the collision margin used if no pair-specific one is set.
Definition: collision_margin_data.h:245
tesseract_common::CollisionMarginPairData::scaleMargins
void scaleMargins(double scale)
Scale all margins by input value.
Definition: collision_margin_data.cpp:82
tesseract_common::CollisionMarginPairData
Definition: collision_margin_data.h:68
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: macros.h:72
tesseract_common::CollisionMarginPairData::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: collision_margin_data.cpp:157
tesseract_common::CollisionMarginData::setDefaultCollisionMargin
void setDefaultCollisionMargin(double default_collision_margin)
Set the default collision margin.
Definition: collision_margin_data.cpp:179
tesseract_common::CollisionMarginPairData::clear
void clear()
Clear/Reset the data structure.
Definition: collision_margin_data.cpp:94
tesseract_common::CollisionMarginPairData::max_collision_margin_
double max_collision_margin_
Stores the largest collision margin.
Definition: collision_margin_data.h:147
tesseract_common::CollisionMarginData::access
friend class boost::serialization::access
Definition: collision_margin_data.h:250
tesseract_common::CollisionMarginPairData::operator==
bool operator==(const CollisionMarginPairData &rhs) const
Definition: collision_margin_data.cpp:132
tesseract_common::CollisionMarginData::operator==
bool operator==(const CollisionMarginData &rhs) const
Definition: collision_margin_data.cpp:228
tesseract_common::PairsCollisionMarginData
std::unordered_map< tesseract_common::LinkNamesPair, double, tesseract_common::PairHash > PairsCollisionMarginData
Definition: collision_margin_data.h:66
tesseract_common::CollisionMarginPairOverrideType::NONE
@ NONE
Do not apply contact margin data.


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