Skip to content

Commit 5152351

Browse files
committed
add halfspace collision
1 parent 680b1c7 commit 5152351

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.5)
22

3-
project(xbot2_interface LANGUAGES CXX VERSION 1.0.0)
3+
project(xbot2_interface LANGUAGES CXX VERSION 1.1.0)
44

55
option(XBOT2_IFC_BUILD_PINOCCHIO "Build Pinocchio implementation" ON)
66
option(XBOT2_IFC_BUILD_RBDL "Build RBDL implementation" OFF)

include/xbot2_interface/collision.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ struct XBOT2IFC_API Shape
2828
double length;
2929
};
3030

31+
struct Halfspace
32+
{
33+
Eigen::Vector3d normal;
34+
double d;
35+
};
36+
3137
struct Box
3238
{
3339
Eigen::Vector3d size;
@@ -63,6 +69,7 @@ struct XBOT2IFC_API Shape
6369
Capsule,
6470
Box,
6571
Cylinder,
72+
Halfspace,
6673
Mesh,
6774
Octree,
6875
HeightMap

src/collision/collision.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)