2. 仿真场景几何模型轻量化

在 RobotStudio 中,仿真帧率(FPS)下降往往不是机器人运动学计算造成的,而是场景中几何模型的三角面片数量过多。一个从外部 CAD 系统导入的焊枪、夹具或输送线模型,可能携带几十万甚至上百万个三角面,其中大量面片位于内部、背面或装配后被遮挡的位置,对视觉呈现毫无贡献,却持续消耗显卡的顶点变换与光栅化资源。本节的核心任务,就是在模型导入 RobotStudio 之前或导入之后,对几何体做一次系统性的"减负",让每一帧需要绘制的三角形数量降到合理水平。

轻量化的三个基本手段

几何轻量化可以归纳为三条互补的技术路线,它们作用于不同的冗余来源:

  • 去除隐藏面:删除装配后被完全遮挡的内部结构、螺栓孔内壁、零件贴合面、封闭壳体内部的面片。这类面片在任意视角下都不可见,删除后视觉零损失。
  • 合并网格:把多个独立但材质相同、位置相邻的零件合并为一个网格对象。合并减少的是绘制调用(Draw Call)次数和场景树节点数,对三角面总数影响不大,但能显著降低 CPU 端的场景遍历与状态切换开销。
  • 降低多边形数量:通过减面(Decimate)算法,在保持外形轮廓的前提下,把曲面上的密集三角面替换为更少、更大的三角面。这是减少三角面总数最直接的手段,但需要控制减面比例,避免轮廓失真。

三者的关系可以用下面的信号链来理解:原始模型经过"删面—合并—减面"三级处理,三角面数与绘制调用数同时下降,最终反映为帧率提升。图中同时标注了每一级处理的主要收益对象和需要警惕的风险。

几何模型轻量化处理链与收益 原始导入模型 三角面 ≈ 86 万 网格对象 ≈ 240 个 帧率 ≈ 18 FPS ① 去除隐藏面 删除内部/贴合面 面数 ↓ 约 25% 视觉零损失 ② 合并网格 同材质零件合并 对象 240 → 32 Draw Call ↓ ③ 降低多边形 减面比例 50%~70% 面数 ↓ 约 60% 需检查轮廓 轻量化后模型 三角面 ≈ 23 万 | 网格对象 ≈ 32 个 | 帧率 ≈ 52 FPS(示例数据,实际随硬件与场景变化) 风险:减面过度 圆弧变多边形、干涉检测误判 原则:先删后合,最后减面 保留碰撞体与视觉体分离处理

导入前的清理:在 CAD 侧完成的工作

最理想的轻量化发生在模型进入 RobotStudio 之前。如果源文件来自 SolidWorks、NX 或 Inventor,可以在导出中间格式(STEP、IGES 或 JT)之前做几件事:抑制或删除标准件库中不参与仿真的螺栓、垫圈、卡簧;把装配体中不可见的内部零件压缩;对螺纹孔、倒角、圆角等细节特征做简化,因为一个 M8 螺纹孔在 CAD 中可能由上千个面片构成,而在仿真中它只是一个孔位。导出时优先选择 JT 格式,它支持 LOD(细节层次)和压缩,比 STEP 更适合大体量装配。

如果模型已经以 STEP 或 SAT 形式存在,也可以在 RobotStudio 的建模选项卡中处理。导入后先不要急着拖入工作站,而是单独打开该几何体,用"测量"工具查看三角面数:右键模型 → 属性,或使用建模功能区的统计信息,可以看到顶点数、三角面数和网格对象数。这个数字是后续所有决策的基准。

去除隐藏面的实际操作

隐藏面分为两类。第一类是装配遮挡面,例如夹具底板与工作台贴合的下表面、两个零件通过螺栓连接时的接触面。判断方法是:在 RobotStudio 中旋转到典型观察视角,用"隐藏线"或"线框"显示模式检查哪些面从未朝向相机。第二类是封闭壳体内部面,例如减速箱外壳的内壁、控制柜内部的安装板。这类面片可以通过"删除面"功能配合框选处理,但要注意:如果模型需要参与碰撞检测,删除内部面可能改变碰撞体的封闭性,此时应保留一个简化的碰撞代理体,而不是直接删面。

建议把"视觉模型"和"碰撞模型"分开管理:视觉模型可以大胆删面、减面,碰撞模型则用简单的长方体、圆柱体或凸包代替。RobotStudio 中可以为同一对象指定不同的碰撞几何体,这样既保证帧率,又不牺牲碰撞检测的准确性。

合并网格的判据与操作

合并网格的前提是"同材质、同变换、无需独立运动"。如果两个零件在仿真中需要独立运动(例如夹具的压紧臂和底座),就不能合并,否则运动会互相牵连。操作上,在建模选项卡中选择多个网格对象,使用"合并"命令,RobotStudio 会把它们合并为一个网格,材质以第一个对象为准。合并后场景树中的节点数减少,CPU 每帧遍历和提交绘制命令的次数随之下降。

一个经验判据是:当场景中网格对象超过 100 个、且帧率明显低于 30 FPS 时,优先考虑合并。合并带来的收益在对象数量多、单个对象面数少时最明显,例如由大量小零件组成的输送线护栏、安全围栏。

降低多边形数量的参数控制

RobotStudio 本身不提供强力的减面工具,通常的做法是在外部工具(如 Blender 的 Decimate 修改器、MeshLab 的 Quadratic Edge Collapse Decimation、或 CAD 自带的简化功能)中完成减面,再重新导入。减面的关键参数是目标面数比例或误差阈值。以 Blender 为例,Collapse 模式的 Ratio 设为 0.3 表示保留 30% 的面片;对于外形以平面为主的夹具,Ratio 可以低到 0.2;对于有大量曲面的焊枪喷嘴,建议不低于 0.5,否则圆弧会变成明显的多边形棱角。

减面后必须做轮廓检查:把减面模型与原始模型叠加显示,观察外轮廓偏差是否超过可接受范围。对于参与 TCP 标定或路径规划的模型,轮廓偏差应控制在 0.5 mm 以内;对于仅作背景显示的设备,偏差可以放宽到几毫米。

优化前后帧率对比方法

帧率对比必须在相同条件下进行,否则数据没有意义。建议固定以下变量:相同的机器人程序与运动速度、相同的视角与缩放、相同的显示模式(带边着色或实体)、关闭其他占用显卡的程序。在 RobotStudio 中可以通过"仿真"选项卡的帧率显示,或使用性能监视器记录一段时间内的平均 FPS。

对比项优化前(示例)优化后(示例)变化
三角面总数约 86 万约 23 万↓ 73%
网格对象数约 240约 32↓ 87%
平均帧率约 18 FPS约 52 FPS↑ 约 2.9 倍
单帧绘制调用约 260 次约 40 次↓ 85%

表中数据为教学示例,用于说明量级关系,实际数值取决于显卡型号、场景复杂度与显示设置。判断优化是否达标的依据不是绝对帧率,而是"是否稳定高于 30 FPS"以及"运动过程中是否出现明显卡顿"。如果优化后帧率提升有限,说明瓶颈可能不在几何面数,而在于机器人运动学求解、信号刷新或碰撞检测频率,需要转向其他优化方向。

减面与删面都是不可逆操作,务必在原始文件副本上进行。建议保留一份未轻量化的"参考模型"放在工作站之外,便于后续需要高精度轮廓时重新导入。

把上述流程固化为一个可复用的检查顺序:先统计面数与对象数,再删隐藏面,然后合并同材质网格,最后按轮廓精度要求减面,每次操作后记录帧率变化。这样既能定位收益最大的环节,也能避免一次性改动过多导致问题难以回溯。