CoppeliaSim UR5 实例(1)简化模型

官方实例:Building a clean model tutorial

该教程由官方教程翻译而来,部分加入了自己的理解,如有侵权,请联系我删除
本教程将展示如何逐步构建机器人或任何其他项目的清晰仿真模型。 得到具有美观,快速显示,快速仿真和稳定的仿真模型,是一个非常重要的主题,也许是利用Coppeliasim仿真最重要的一步。

为了说明模型的构建过程,我们将以构建UR5机器人为例:
在这里插入图片描述

1.建立机器人外观

在构建新模型时,首先,我们仅处理其视觉可见层面。动力学层面,关节,传感器等将在以后阶段进行处理。

我们可以使用 [Menu bar --> Add --> Primitive shape --> …]在CoppeliaSim中直接创建基本形状。基本形状会自动将针对动力学交互进行优化,同时也将自动启用动力学检测(例如,跌落,碰撞)。基本形状仅包含简单的网格,对于我们的应用程序,可能没有足够的细节或几何精度。在这种情况下,我们的另一个选择是从其他建模软件导入模型。

从外部应用程序导入CAD数据时,最重要的是确保CAD模型不会太复杂,即不包含太多三角形网格。这项要求很重要,因为复杂模型的显示速度会很慢,并且还会减慢以后可能使用的各种计算模块(例如最小距离计算或动力学)。以下示例不推荐在coppeliaSim中使用。
在这里插入图片描述
上面的模型CAD数据非常复杂:它包含超过47’000个三角形面片,如果我们只在空的场景中使用它的单个实例,这是可以的。但是大多数时候,仿真需要模拟同一机器人的多个实例,安装各种类型的抓手,并可能使这些机器人与其他机器人,设备或环境进行交互。在这种情况下,仿真速度会受到极大的影响。通常,CoopeliaSim建议对不超过2万个三角形的机器人进行建模,但是在大多数情况下,推荐5000至10000个三角形面片。Remember: less is better, in almost every aspect.

是什么使上述模型如此复杂呢?首先,包含孔和小细节的模型需要更多的三角形面才能正确表示。因此,如果可能,请尝试从原始模型数据中删除所有的孔,螺钉,对象的内部等。如果原始模型数据表示为参数化曲面/对象,则通常在大多数情况下只需选择并删除它们即可(例如在Solidworks中)。第二个重要步骤是以有限的精度导出原始数据:大多数CAD应用程序都允许指定导出的网格精细化程度。当工程图由大小差别大的对象组成时,分几步导出对象可能也很重要。这是为了避免大对象定义太精确(三角形面片太多)和小对象定义太粗(三角形面片太少):首先简单地导出大对象(设置低精度),然后导出小对象(设置高精度)。

CoppeliaSim当前支持以下CAD数据格式:OBJ,STL,DXF,3DS(仅Windows)和Collada。还支持URDF,但由于它不是基于纯网格的文件格式,因此该教程中未提及。

现在假设已经按照上一节中的描述进行了所有可能的简化。导入后,可能最终仍然会留下一个过于复杂的网格模型:

图1 Solidworks
图2 STL import
图3 STL mesh
==[Right click --> view --> Solid Rendering ] 显示网格==,在导入STL时,CoppeliaSim会对模型面片进行一定的优化,如solidworks中模型上的一些花纹没有了。

注意到有时整个机器人是作为单个网格导入的, 稍后将介绍如何对其进行适当划分。 还要注意导入的模型的姿态错误,最好能保持原来的方向。因为如果在以后的阶段中我们要导入与同一机器人相关的其他项目,它们将自动具有相对于原始网格的正确位置/方向。
方向可以通过[import option–>up vector]来调整,或者在cad软件中预先调整模型的位置姿态。

我们可以使用几种功能来简化网格:
**自动网格划分:**允许为未通过公共边链接在一起的所有元素生成新形状。这并不总是适用于选定的网格,不过值得一试的,因为与必须同时处理所有元素相比,处理网格元素可以为我们提供更多的控制权。可以通过==[Menu bar --> Edit --> Grouping/Merging --> Divide selected shapes]访问该功能。有时,网格划分会超出预期。在这种情况下,只需将逻辑上属于一起的元素(即,具有相同的视觉属性并且属于同一链接的一部分)合并回一个单一形状([Menu bar --> Edit -> Grouping/Merging --> Merge selected shapes]==)。
提取凸包:
通过将其转换为凸包来简化网格。可以通过[Menu bar --> Edit --> Morph selection into convex shapes]来访问该功能。
抽取网格:
减少网格中包含的三角形数量。可以通过 [Menu bar --> Edit --> Decimate selected shape…]访问该功能。
删除网格的内部:
允许通过删除其内部来简化网格。此功能基于视觉传感器,并且根据所选设置可能会或多或少地令人满意。可以通过[Menu bar --> Edit --> Extract inside of selected shape]访问该功能。
CAD单个导出:
如Solidworks,装配体导出为STL时,可选择为单个文件导出,再同时导入到CoppeliaSim中,则可得到分离的零件,且按Solidworks中的装配状态显示。(该方法为个人添加,原文中没有,故下文中不涉及该方法,但该方法更简单快捷。)
上述功能没有推荐的使用顺序,但应始终首先尝试第一项,这在很大程度上取决于我们要简化的网格的几何形状。下图说明了上述功能的想效果(假设第一种方法没有用):
在这里插入图片描述
注意,凸包在现阶段没有用处。 我们决定首先使用网格抽取功能,然后运行两次该功能,以将三角形的数量除以总共50个。完成后,我们提取简化形状的内部并将其丢弃。 我们最终得到的网格总共包含2’660个三角形(原始导入的网格包含超过136’000个三角形!)。 形状包含的三角形/顶点的数量可以在形状几何对话框中看到。 对于整个机器人模型,2’660三角形是极少的三角形,因此视觉外观可能会因此受到影响。

在这一阶段,我们可以开始将机器人划分为单独的链接(请记住,目前整个机器人只有一个形状)。 您可以通过两种不同的方式执行此操作:
自动网格划分:
此功能已在上一节中进行了描述,它将检查形状并为未通过公共边链接在一起的所有元素生成新形状。 这并不总是可行,但总是值得尝试的。 可以通过[Menu bar --> Edit --> Grouping/merging --> Divide selected shapes]访问该功能。
手动网格划分:
通过三角形编辑模式,您可以手动选择逻辑上不属于逻辑的三角形,然后单击“提取形状”。 这将在场景中生成新形状。 完成该操作后,删除选定的三角形。
下图为1方法提取出的单独元素。
在这里插入图片描述
利用CAD软件单个导出,更简单,如下图。
在这里插入图片描述
现在可以进一步简化单个形状。 有时如果改用凸包,形状可能会看起来更好。 有时,将不得不反复使用上述几种技术,以获得所需的结果。 以以下网格为例:
在这里插入图片描述
上面形状的问题是,由于其中包含孔,无法很好地简化它。 因此必须通过形状编辑模式采用更复杂的方法,在该模式下,可以提取逻辑上属于同一凸形子实体的单个元素。 此过程可能需要进行多次迭代:我们首先提取3个近似凸元素。忽略作为两个孔的一部分的三角形。 在形状编辑模式下编辑形状时,可以方便地切换可见性图层,以查看其他场景项所覆盖的内容。
在这里插入图片描述
最终得到三个形状的总和,但是其中两个将需要进一步改进。 现在可以擦除作为孔的一部分的三角形。 最后分别提取3种形状的凸包,然后通过[Menu bar --> Edit --> Grouping/Merging --> merge selected shapes]将它们重新合并在一起:
在这里插入图片描述
在CoppeliaSim中,可以启用/禁用每种形状的边缘显示,还可以指定边缘显示时要考虑的角度。相似的参数是阴影角,它指示形状将在多方面显示。这些参数以及其他一些参数(例如形状颜色)可以在形状属性中进行调整。到目前为止,在本教程中,我们仅处理简单的形状:简单的形状具有一组视觉属性(即一种颜色,一个阴影角度等)。如果合并两个形状,则结果将是简单形状。还可以对形状进行分组,在这种情况下每个形状将保留其视觉属性。

在下一步中,可以合并逻辑上属于一起的元素(如果它们属于同一刚体,并且具有相同的视觉属性)。然后更改各种元素的视觉属性。最简单的方法是调整一些具有不同颜色和视觉属性的形状,如果使用特定的字符串来命名颜色,那么即使该形状是复合形状的一部分,我们以后也可以通过编程方式轻松地更改该颜色。然后,我们选择所有具有相同视觉属性的形状,然后控制选择已调整的形状,然后单击“应用于选择”,一次是颜色,一次是其他属性。我们最终得到17个单独的形状:
在这里插入图片描述
现在,可以使用[Menu bar --> Edit --> Grouping/merging -> Group selected shapes]对属于同一关节的形状进行分组。 我们最终得到7个形状:机器人的基座(或机器人的层次结构树的基础)和6个关节。 正确命名对象也很重要:可以通过双击场景层次结构中的对象名称来做到这一点。 基座应始终是机械手或模型名称,其他对象应始终包含基础对象名称,例如:robot(基础),robot_link1,robot_proximitySensor等。默认情况下形状将分配给可见图层1,但可以在对象通用属性中进行更改。 默认情况下,仅激活场景的可见图层层1-8:
在这里插入图片描述

发布了3 篇原创文章 · 获赞 0 · 访问量 117

猜你喜欢

转载自blog.csdn.net/qq_29696095/article/details/104406971