Collision over-simplification in RST
4 次查看(过去 30 天)
显示 更早的评论
Hello,
I am working with MATLAB to visualize the collision meshes of a robot I've designed. When using the show(robot) function, I notice that the collision meshes appear less detailed, I guess, the idea is to optimize execution time and reduce CPU load.
Could you please provide information on the maximum number of triangles allowed per STL file for collision meshes? I aim to achieve a balance between having detailed collision meshes and maintaining computational efficiency.
How it's supposed to look like :
meshTri = stlread("concept_c-bras5_col.stl");
trisurf(meshTri)
axis equal
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1713511/image.png)
How it actually looks like :
rbt = importrobot("concept.urdf");
show(rbt,Collisions="on");
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1713516/image.png)
As you can see it's really ugly. Do you know how to improve the collision meshes make them more accurate ?
0 个评论
采纳的回答
Githin John
2024-6-12
Hello,
You are seeing this over-simplification because it makes use of the convex hull of the available mesh, as we need a convex mesh for the collision check.
You could make use of convex decomposition of your mesh to get a more represntative collision mesh.
robotCollisionDecomp = importrobot("concept.urdf",CollisionDecomposition=true);
Alternatively, you could use collisionVHACD to decompose just the required mesh.
meshTri = stlread("concept_c-bras5_col.stl");
decomposedMesh = collisionVHACD(meshTri);
showCollisionArray(decomposedMesh);
Then clear the approximated collision mesh from the rigidBody and replace with the decomposed one.
rbt.Bodies{indexOfBody}.clearCollision;
for i=1:numel(decomposedMesh)
rbt.Bodies{indexOfBody}.addCollision(decomposedMesh{i})
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Collision Detection 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!