我只想使用 FCL 库进行碰撞检测。
我的第一个对象是机器人,我想使用球形来指定它,第二个对象是使用八叉树来指定世界上的障碍物。
我尝试按照说明创建此检测代码。
如何从 ROS wiki 中的 API 填写以下信息?
// set mesh triangles and vertice indices
std::vector<Vec3f> vertices;
std::vector<Triangle> triangles;
// code to set the vertices and triangles
...
// BVHModel is a template class for mesh geometry, for default OBBRSS template is used
typedef BVHModel<OBBRSS>* Model;
Model* model = new Model();
// add the mesh data into the BVHModel structure
model->beginModel();
model->addSubModel(vertices, triangles);
model->endModel();
在这个 API 中,他们使用三角形,据我所知,三角形仅用于 3d 网格。我不想使用网格,我想要八叉树和球体作为对象。
- 那么我该如何修改呢?
- 之后,我应该使用哪个函数来返回碰撞发生的真或假?
- 如果我的数据更新了怎么办?我的意思是机器人正在移动,我想不断更新机器人和八叉树的位置?我该怎么做?
- BVH模型的含义是什么?
我查找了示例并发现了以下内容:
Sphere s1(10);
Box s2(5, 5, 5);
Transform3f transform;
Transform3f identity;
CollisionRequest request;
CollisionResult result;
bool res;
res = (collide(&s1, Transform3f(), &s2, Transform3f(), request, result) > 0);
std::cout << "res" << res << std::endl;
输出为“res1”
“1”是什么意思?这是否意味着它是一个碰撞?这里物理碰撞的含义是什么?对象的位置在哪里,为什么不遵循 ROS wiki 的 API?
很抱歉这个问题很长,但我是第一次使用 FCL,我对此一无所知。