@@ -92,7 +92,7 @@ LVSContinuousCollisionEvaluator::CalcCollisionData(const Eigen::Ref<const Eigen:
9292 }
9393
9494 auto data = std::make_shared<trajopt_common::CollisionCacheData>();
95- CalcCollisionsHelper (dof_vals0, dof_vals1, data-> contact_results_map );
95+ CalcCollisionsHelper (data-> contact_results_map , dof_vals0, dof_vals1, position_vars_fixed );
9696
9797 for (const auto & pair : data->contact_results_map )
9898 {
@@ -165,9 +165,10 @@ LVSContinuousCollisionEvaluator::CalcCollisionData(const Eigen::Ref<const Eigen:
165165 return data;
166166}
167167
168- void LVSContinuousCollisionEvaluator::CalcCollisionsHelper (const Eigen::Ref<const Eigen::VectorXd>& dof_vals0,
168+ void LVSContinuousCollisionEvaluator::CalcCollisionsHelper (tesseract_collision::ContactResultMap& dist_results,
169+ const Eigen::Ref<const Eigen::VectorXd>& dof_vals0,
169170 const Eigen::Ref<const Eigen::VectorXd>& dof_vals1,
170- tesseract_collision::ContactResultMap& dist_results )
171+ const std::array< bool , 2 >& position_vars_fixed )
171172{
172173 // The first step is to see if the distance between two states is larger than the longest valid segment. If larger
173174 // the collision checking is broken up into multiple casted collision checks such that each check is less then
@@ -186,7 +187,7 @@ void LVSContinuousCollisionEvaluator::CalcCollisionsHelper(const Eigen::Ref<cons
186187 // Don't include contacts at the fixed state
187188 // Don't include contacts with zero coeffs
188189 const auto & zero_coeff_pairs = collision_config_->collision_coeff_data .getPairsWithZeroCoeff ();
189- auto filter = [this , &zero_coeff_pairs](tesseract_collision::ContactResultMap::PairType& pair) {
190+ auto filter = [this , &zero_coeff_pairs, &position_vars_fixed ](tesseract_collision::ContactResultMap::PairType& pair) {
190191 // Remove pairs with zero coeffs
191192 if (std::find (zero_coeff_pairs.begin (), zero_coeff_pairs.end (), pair.first ) != zero_coeff_pairs.end ())
192193 {
@@ -199,7 +200,7 @@ void LVSContinuousCollisionEvaluator::CalcCollisionsHelper(const Eigen::Ref<cons
199200 pair.first .second );
200201 double coeff = collision_config_->collision_coeff_data .getPairCollisionCoeff (pair.first .first , pair.first .second );
201202 const Eigen::Vector3d data = { dist, collision_config_->collision_margin_buffer , coeff };
202- trajopt_common::removeInvalidContactResults (pair.second , data); /* * @todo Should this be removed? levi */
203+ trajopt_common::removeInvalidContactResults (pair.second , data, position_vars_fixed);
203204 };
204205
205206 if (collision_config_->type == tesseract_collision::CollisionEvaluatorType::LVS_CONTINUOUS &&
@@ -329,7 +330,7 @@ LVSDiscreteCollisionEvaluator::CalcCollisionData(const Eigen::Ref<const Eigen::V
329330 }
330331
331332 auto data = std::make_shared<trajopt_common::CollisionCacheData>();
332- CalcCollisionsHelper (dof_vals0, dof_vals1, data-> contact_results_map );
333+ CalcCollisionsHelper (data-> contact_results_map , dof_vals0, dof_vals1, position_vars_fixed );
333334 for (const auto & pair : data->contact_results_map )
334335 {
335336 using ShapeGrsType = std::map<std::pair<std::size_t , std::size_t >, trajopt_common::GradientResultsSet>;
@@ -401,9 +402,10 @@ LVSDiscreteCollisionEvaluator::CalcCollisionData(const Eigen::Ref<const Eigen::V
401402 return data;
402403}
403404
404- void LVSDiscreteCollisionEvaluator::CalcCollisionsHelper (const Eigen::Ref<const Eigen::VectorXd>& dof_vals0,
405+ void LVSDiscreteCollisionEvaluator::CalcCollisionsHelper (tesseract_collision::ContactResultMap& dist_results,
406+ const Eigen::Ref<const Eigen::VectorXd>& dof_vals0,
405407 const Eigen::Ref<const Eigen::VectorXd>& dof_vals1,
406- tesseract_collision::ContactResultMap& dist_results )
408+ const std::array< bool , 2 >& position_vars_fixed )
407409{
408410 // If not empty then there are links that are not part of the kinematics object that can move (dynamic environment)
409411 if (!diff_active_link_names_.empty ())
@@ -417,7 +419,7 @@ void LVSDiscreteCollisionEvaluator::CalcCollisionsHelper(const Eigen::Ref<const
417419 // Don't include contacts at the fixed state
418420 // Don't include contacts with zero coeffs
419421 const auto & zero_coeff_pairs = collision_config_->collision_coeff_data .getPairsWithZeroCoeff ();
420- auto filter = [this , &zero_coeff_pairs](tesseract_collision::ContactResultMap::PairType& pair) {
422+ auto filter = [this , &zero_coeff_pairs, &position_vars_fixed ](tesseract_collision::ContactResultMap::PairType& pair) {
421423 // Remove pairs with zero coeffs
422424 if (std::find (zero_coeff_pairs.begin (), zero_coeff_pairs.end (), pair.first ) != zero_coeff_pairs.end ())
423425 {
@@ -432,7 +434,7 @@ void LVSDiscreteCollisionEvaluator::CalcCollisionsHelper(const Eigen::Ref<const
432434 const Eigen::Vector3d data = { dist, collision_config_->collision_margin_buffer , coeff };
433435
434436 // Don't include contacts at the fixed state
435- trajopt_common::removeInvalidContactResults (pair.second , data);
437+ trajopt_common::removeInvalidContactResults (pair.second , data, position_vars_fixed );
436438 };
437439
438440 // The first step is to see if the distance between two states is larger than the longest valid segment. If larger
0 commit comments