Skip to content

Commit 9024bf6

Browse files
committed
filter collisions between non-movable links and world
1 parent 46dd12f commit 9024bf6

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/collision/collision.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,25 @@ bool CollisionModel::Impl::checkSelfCollision(std::vector<int>* coll_pair_ids,
522522
return ret;
523523
}
524524

525+
bool CollisionModel::Impl::is_link_movable(string_const_ref link) const
526+
{
527+
auto urdf = _model->getUrdf();
528+
auto root = urdf->getRoot();
529+
auto urdf_link = urdf->getLink(link);
530+
531+
while(urdf_link && urdf_link != root)
532+
{
533+
if(urdf_link->parent_joint && urdf_link->parent_joint->type != urdf::Joint::FIXED)
534+
{
535+
return true;
536+
}
537+
538+
urdf_link = urdf_link->getParent();
539+
}
540+
541+
return false;
542+
}
543+
525544
// define helper struct to generate a visitor from a set of lambdas
526545
template<typename ... Ts>
527546
struct Overload : Ts ... {
@@ -770,6 +789,12 @@ bool CollisionModel::Impl::addCollisionShape(string_const_ref name,
770789
link_collision->disabled_collisions.back().insert(disabled_collisions.begin(),
771790
disabled_collisions.end());
772791

792+
// check if link is moveable: if not, disable collisions with "world"
793+
if(!is_link_movable(link))
794+
{
795+
link_collision->disabled_collisions.back().insert("world");
796+
}
797+
773798
// add to user object map
774799
if(user_object)
775800
{

src/collision/collision.hxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public:
6969

7070
void set_distance_called();
7171

72+
bool is_link_movable(string_const_ref link) const;
73+
7274
private:
7375

7476
CollisionModel& _api;

0 commit comments

Comments
 (0)