3d模型可以为场景的仿真模拟带来真实感,它还有助于更轻松地识别场景中的所有内容。 例如,如果场景中的所有对象都是简单的形状,如立方体和圆形,则很难在仿真中区分对象。
1,碰撞形状与视觉形状
像立方体和球体这样的简单形状,通常被称为“基本体”,通常用作碰撞块。 与视觉网格相比,碰撞形状使用简化的几何体,因为它们在模拟中有不同的用途。
碰撞模型很重要,因为它们与物理环境相互作用,使用基本形状的计算开销更少。
视觉形状是详细的网格。 制作这些形状的目的是为模拟场景带来真实感。 这些形状在多边形中更密集,并且通常附有纹理。 这些形状是相机传感器拾取的,也是观看者在观看仿真时看到的。
2,创建3D模型
Blender 有很多工具可以创建简单/复杂的模型。 创建复杂对象的一个好方法是从简单的事物开始。 在下面的示例中,我们看到了一个从简单基元创建的复杂模型。 虽然这是一个很好的建模策略,但从简单的网格到复杂的网格通常需要使用很多工具。
因为我们使用了上面的车轮示例,所以我将使用该形状来完成我的建模工作流程。 我还将解释我使用的一些工具和修改器。 在开始本教程之前,建议对Blender热键有一些基本了解。
3,创建/添加简单网格
有建模对象的参考图像会有很大帮助,我们始终推荐这一点。大多数 3D 建模过程都使用移动、旋转和缩放。 这三个动作通常称为变换 Gizmo。
通常,将模型导入程序后出现问题是因为与这些变换相关的简单错误。 这些问题相当普遍,但并不难解决。 相应地更改其中一个属性并将其与更新一起导出可以解决大多数问题。
- 移动 Gizmo:允许你更改对象沿 x、y、z 轴的位置,热键 G。
- 旋转 Gizmo:允许你沿 x、y、z 轴旋转对象方向,热键 R。这用于为轮子垂直旋转圆柱体。
- 缩放 Gizmo:允许你缩放对象。 如果需要,还可以沿单个轴缩放对象,热键 S。
- 斜角:Bevel。允许你创建弯曲/倒角的边缘,这用于创建轮子的弯曲侧面。
- 挤出:Extrude。沿选定的面/边添加额外的几何体。 挤出工具可用于推出面或推入面。 此处给出了两个示例。
- 环切:Loop cut。允许你使用新的环状边缘分割面。 这样就可以对面部进行更详细的操作。结合使用挤出工具,你可以根据自己的形状制作小脊。
- 复制:Duplicate。允许你制作选定对象的相同副本。
- 其他修改器:在建模过程中使用的其他一些命令是:晶格函数、布尔值、平滑、抽取等。
4,多边形数量 vs 性能
3D模型由多边形组成,多边形越高,3D模型就越详细。 具有太多多边形的3D模型会使网格编辑过于复杂,或者会使仿真模拟运行非常缓慢。 这就是为什么优化形状很重要,这样它可以保留大部分细节,但又不会使多边形数量过高。
如果你发现3D模型过于密集而无法使用。 “抽取”命令(Decimate)可用于降低所述网格的多边形计数,同时仍保持其一般形状。
创建复杂模型需要很好地理解 3d 建模程序中的许多工具。 它们都服务于特定的目的并且非常强大, 它们必须以不同的方式相互叠加使用才能获得最终结果,并且我们添加/编辑的形状越多,从长远来看它看起来就越好。
5,导出模型
为 Gazebo 导出模型时,建议使用 .dae (COLLADA) 文件类型。 还支持 STL 和 OBJ 文件,但在导入到 Gazebo 时不太常见。
在点击导出后,将出现“Blender 文件视图”。 这是选择文件位置的地方,你还可以选择导出模型的方式。
仔细检查“global Orientation”可以节省时间,在这里你可以快速将“Up Axis”更改为 Zup。 这是 Gazebo 中的标准方向同样确保如果3D模型要放置在地面上,请将原点放在底座上,并使模型面向 X(前向轴)。
6,故障排除
创建用于模拟仿真的 3d 形状时,需要考虑一些事项。 确保你的比例和方向设置为 Gazebo 标准,因为这样可以为你节省大量时间。
同时,将要更改 Blender 中的单位以匹配 Gazebo,请转到“场景属性”, 将“单位系统”更改为公制并将“长度”更改为米。要更改网格大小,请转到“Show Overlays”并更改“Scale”量。
形状的轴心是形状移动、旋转和缩放的起点。在导出之前,你不仅需要确保形状位于正确的位置,还需要确保轴心点也位于正确的位置。
复杂的3D模型通常具有子/父关系。 当3D模型的较小部分连接到较大的部分时,具有不同的轴心点。
例如:本教程中使用的车轮是一个子形状。 它会附加到汽车的车身。 如图所示,轮子的枢轴点位于其中心轴上,但整个形状的一般枢轴将基于父形状附加在关节原点周围。 当你导出到 Gazebo 时,请确保选择了整个形状并且主体位于原点 (0,0,0),并且 X 轴朝前。
原文链接:https://gazebosim.org/api/gazebo/5.1/model_and_optimize_meshe...