V-rep学习笔记:机器人模型创建1—模型简化
要进行机器人仿真首先需要得到机器人的几何模型。我们可以直接通过VREP中提供的基本几何体来搭建一个简易的机器人[Menu bar --> Add --> Primitive shape --> ...],如下图所示的两轮差动机器人就是由球和圆柱体搭建而成。这种形状简单的几何体称为Primitive shape:best suited for dynamics collision response calculation, since it will perform much faster and more stable than non-pure shapes(e.g. random or convex meshes). Primitive shapes will be simple meshes, which might not contain enough details or geometric accuracy for our application. For that reason, pure shapes are often hidden in an invisible layer (e.g. layer 9).
使用基本几何体来搭建抽象的机器人虽然有计算量小等诸多优点,但是却无法模拟机器人真实形状。为了模型更真实我们可以导入外部三维模型文件。但如果我们导入的文件过大(三角面片太多),就会严重影响图形显示和运动学、动力学计算的实时性。下面的图片中导入的CAD模型就不是一个很好的例子,它包含多达47000个三角面片,而这仅仅只是一个机械手爪。如果场景中有多台机器人装有这种手爪,那么当机器人与其它机器人、设备或外界环境接触时物理引擎的计算量会非常大,仿真会变得很慢,因此我们需要简化模型。Remember: less is better, in almost every aspect.
[Complex CAD data (in solid and wireframe)]
可以从上面左图中看出,模型包含了很多孔和小细节,而这些特征在导出为网格模型时会生成很多不必要的三角面片。所以首先需要删除这些孔、螺纹和CAD模型内部的一些特征(比如轴承、外壳内部的加强筋板等结构)。其次,在输出网格文件时要限制输出的精度,避免产生过大的文件(export the original data with a limited precision: most CAD applications let you specify the level of details of exported meshes)。同时还要注意当场景中模型的大小差别很大时要分别输出,避免同时输出时大模型细节过多,和小模型的细节过少。
VREP支持多种格式的导入文件:OBJ,STL,DXF,3DS,Collada,URDF。假设上面提到的几点我们都考虑进去了,在删除一系列不必要的细节后我们可能依然会得到如下图所示的网格文件,这个模型文件还是很大,并且还存在许多问题(模型作为一个整体被导入,没有可动部件;导入的姿态和位置不是我们想要的...)。
[Imported CAD data]
VREP为我们提供了几种方法来进一步简化模型:
- Automatic mesh division(自动分割网格):allows to generate a new shape for all elements that are not linked together via a common edge
- Extract the convex hull(提取凸壳):allows to simplify the mesh by transforming it into a convex hull.
- Decimate the mesh(缩减网格数量):allows to reduce the number of triangles contained in the mesh.
- Remove the inside of the mesh(移除内部网格):allows to simplify the mesh by removing its inside.
下面的图片分别显示了凸壳提取、缩减网格数、移除内部网格后的结果:
为了控制机构运动,我们接下来要将一个整体的机器人模型分割为几个可动的部分(Two elements are distinct if they don't share any common edge),有如下两种方法:
- Automatic mesh division(自动分割网格): This does not always work, but is always worth a try. The function can be accessed with [Menu bar --> Edit --> Grouping/merging --> Divide selected shapes]
- Manual mesh division(手动分割网格): via the the triangle edit mode, you can manually select the triangles than logically belong together, then click Extract shape. This will generate a new shape in the scene. Delete the selected triangles after that operation.
下图中最左边的是导入VREP中的虎克铰STL文件,它是一个整体。选中它进行自动分割后将生成4个新的网格模型,如中间图片所示。这几个新生成的模型可以随意拖动改变位置,如最右边的图所示,这样我们就将一个整体模型拆分为可动的部分。
当然我们可以在SolidWorks等软件导出STL文件时就设置好将装配体的各零部件单独输出,然后在VREP中将其同时导入。如下图所示,机器人共有11个零部件模型文件,将其同时导入到场景中就不需要使用自动/手动分割网格的功能了。
至于手动分割网格以下面一个简单的连杆机构为例进行说明。有时自动分割生成的新几何体可能不是我们想要的,这时先选中要编辑的网格模型,然后打开shape edit模式,手动选择属于同一个部件的三角面片。如下图所示Triangle1~Triangle76都属于同一个连杆,则同时选中这些面(按住Shift键同时用鼠标左键进行框选可以提高效率),然后点击Extract shape生成新的几何体,之前选中的面可以删掉。
有时用提取的凸壳代替几何体会很好,但更多时候需要综合使用到上面提到的几种方法来获得满意的结果。兼顾物理引擎计算效率和机器人外观真实性简化网格后,为了区分不同的零部件或者为了达到良好的显示效果,我们需要改变几何体的颜色等外观属性。可以通过双击模型图标弹出形状属性对话框:
Adjust color选项可以更改几何体的外观颜色。勾选Show edges with angle时会显示轮廓曲线,后面的角度控制显示效果:角度越大,轮廓线越少;角度越小,轮廓线越多(A small angle makes a shape appear sharp, with many edges, a large angle makes a shape appear smooth and with less edges)。勾选Wireframe则几何体会始终以线框模型显示。
由于很多零部件作为一个整体导入,要给不同表面赋予不同的颜色需要先将模型拆分,调整颜色外观后再将其组合。下面以UR3的基座为例进行说明:
进入shape edit模式,切换到正视图,按住Shift键,同时用鼠标左键框选下图中的一圈三角面片。A shift-selection will select all triangles under the selection area, also hidden triangles. If you wish to only select visible triangles via a shift-selection, hold down the ctrl-key in addition to the shift-key. 即按住Shift框选时可以选中隐藏的面,提高选取效率(注意这里切换到正视图可以避免误选其它三角面片;释放鼠标前要按住Shift键不要放,否则会选不上),如果只需要选取可见的面可以同时按Shift+Ctrl键。确认没有多选或少选后点击Extract cylinder就可以将其提取为基本的圆柱体(之后就可以单独调整这一部分的颜色),大量减少了网格数量。之后可以按Delete键将选中的三角面片删掉,效果如下面右图所示:
更改了部分面的颜色后我们要将其与其它部分组合成一个整体(虽然表面颜色不同但属于同一可动部件)。We can group the shapes that are part of the same link with [Menu bar --> Edit --> Grouping/merging -> Group selected shapes]. Simple shapes can also be merged ([Menu bar --> Edit --> Grouping/Merging --> Merge selected shapes] in which case the visual properties become same for all composing elements. 如下图所示,将蓝色的端盖,灰色的外壳和黑色的环状垫圈组合成为一个整体,后续控制过程中这个整体将作为连杆相对于底下的固定基座旋转。
参考:
Building a clean model tutorial