@@ -384,10 +384,16 @@ void CollisionModel::Impl::updateCollisionPairData()
384384 auto c = _link_collision_map.at (l);
385385 auto env = _env_collision;
386386
387+
388+
387389 for (int i = 0 ; i < c->coll_obj .size (); i++)
388390 {
389391 for (int j = 0 ; j < env->coll_obj .size (); j++)
390392 {
393+ if (env->disabled_collisions [j].contains (l) || c->disabled_collisions [i].contains (" world" ))
394+ {
395+ continue ;
396+ }
391397
392398 CollisionPairData cpd (c->coll_obj [i], env->coll_obj [j]);
393399
@@ -544,6 +550,17 @@ bool CollisionModel::Impl::addCollisionShape(string_const_ref name,
544550
545551 return true ;
546552 },
553+ [&](const Shape::Halfspace& hs)
554+ {
555+ fcl_geom = std::make_shared<hpp::fcl::Halfspace>(
556+ hs.normal ,
557+ hs.d
558+ );
559+
560+ std::cout << " halfspace" ;
561+
562+ return true ;
563+ },
547564 [&](const Shape::HeightMap& caps)
548565 {
549566 throw std::runtime_error (" heightmap not implemented" );
@@ -651,6 +668,17 @@ bool CollisionModel::Impl::addCollisionShape(string_const_ref name,
651668 auto fcl_obj = std::make_shared<fcl::CollisionObject>(fcl_geom);
652669 link_collision->addCollisionObject (fcl_obj, link_T_shape);
653670
671+ // check disabled collisions are valid link names
672+ for (auto & dc : disabled_collisions)
673+ {
674+ if (!_link_collision_map.contains (dc))
675+ {
676+ throw std::invalid_argument (
677+ fmt::format (" disabled collision '{}' is not a valid collision link name" ,
678+ dc));
679+ }
680+ }
681+
654682 // add disabled collisions
655683 link_collision->disabled_collisions .back ().insert (disabled_collisions.begin (),
656684 disabled_collisions.end ());
0 commit comments