Skip to content

Commit 94fc3e1

Browse files
Levi ArmstrongLevi-Armstrong
authored andcommitted
Fix handling of collision margin data in environment
1 parent 3afe1c2 commit 94fc3e1

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

tesseract/tesseract_environment/include/tesseract_environment/core/environment.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class Environment
8282
joint_names_.clear();
8383
active_link_names_.clear();
8484
active_joint_names_.clear();
85+
collision_margin_data_ = tesseract_collision::CollisionMarginData();
8586

8687
if (!scene_graph_->insertSceneGraph(scene_graph))
8788
{
@@ -641,6 +642,7 @@ class Environment
641642
std::vector<std::string> active_joint_names_; /**< A vector of active joint names */
642643
tesseract_collision::IsContactAllowedFn is_contact_allowed_fn_; /**< The function used to determine if two objects are
643644
allowed in collision */
645+
tesseract_collision::CollisionMarginData collision_margin_data_; /**< The collision margin data */
644646
tesseract_collision::DiscreteContactManager::Ptr discrete_manager_; /**< The discrete contact manager object */
645647
tesseract_collision::ContinuousContactManager::Ptr continuous_manager_; /**< The continuous contact manager object */
646648
std::string discrete_manager_name_; /**< Name of active descrete contact manager */

tesseract/tesseract_environment/src/core/environment.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,13 @@ bool Environment::applyCommand(const Command& command)
208208
{
209209
std::lock_guard<std::mutex> lock(mutex_);
210210
const auto& cmd = static_cast<const tesseract_environment::ChangeDefaultContactMarginCommand&>(command);
211-
tesseract_collision::CollisionMarginData collision_data = continuous_manager_->getCollisionMarginData();
212-
collision_data.setDefaultCollisionMarginData(cmd.getDefaultCollisionMargin());
213-
continuous_manager_->setCollisionMarginData(collision_data);
214-
discrete_manager_->setCollisionMarginData(collision_data);
211+
collision_margin_data_.setDefaultCollisionMarginData(cmd.getDefaultCollisionMargin());
212+
213+
if (continuous_manager_ != nullptr)
214+
continuous_manager_->setDefaultCollisionMarginData(cmd.getDefaultCollisionMargin());
215+
216+
if (discrete_manager_ != nullptr)
217+
discrete_manager_->setDefaultCollisionMarginData(cmd.getDefaultCollisionMargin());
215218

216219
++revision_;
217220
commands_.push_back(
@@ -225,12 +228,16 @@ bool Environment::applyCommand(const Command& command)
225228
{
226229
std::lock_guard<std::mutex> lock(mutex_);
227230
const auto& cmd = static_cast<const tesseract_environment::ChangePairContactMarginCommand&>(command);
228-
tesseract_collision::CollisionMarginData collision_data = continuous_manager_->getCollisionMarginData();
231+
229232
for (const auto& link_pair : cmd.getPairCollisionMarginData())
230-
collision_data.setPairCollisionMarginData(link_pair.first.first, link_pair.first.second, link_pair.second);
233+
collision_margin_data_.setPairCollisionMarginData(
234+
link_pair.first.first, link_pair.first.second, link_pair.second);
231235

232-
continuous_manager_->setCollisionMarginData(collision_data);
233-
discrete_manager_->setCollisionMarginData(collision_data);
236+
if (continuous_manager_ != nullptr)
237+
continuous_manager_->setCollisionMarginData(collision_margin_data_);
238+
239+
if (discrete_manager_ != nullptr)
240+
discrete_manager_->setCollisionMarginData(collision_margin_data_);
234241

235242
++revision_;
236243
commands_.push_back(
@@ -891,6 +898,8 @@ Environment::getDiscreteContactManagerHelper(const std::string& name) const
891898
manager->setActiveCollisionObjects(active_link_names_);
892899
}
893900

901+
manager->setCollisionMarginData(collision_margin_data_);
902+
894903
return manager;
895904
}
896905

@@ -919,6 +928,8 @@ Environment::getContinuousContactManagerHelper(const std::string& name) const
919928
manager->setActiveCollisionObjects(active_link_names_);
920929
}
921930

931+
manager->setCollisionMarginData(collision_margin_data_);
932+
922933
return manager;
923934
}
924935

0 commit comments

Comments
 (0)