4. 工作站布局与空间划分优化
在多机器人工作站中,碰撞检测往往是仿真性能的最大消耗项。RobotStudio 的碰撞检测并非只判断“两个物体是否相交”这么简单:它需要按固定周期对参与检测的对象两两求交,若工作站中有 6 台机器人、4 个变位机、2 条输送链和若干工装夹具,且全部对象都处于同一碰撞集合中,那么每帧需要处理的检测对数量会迅速膨胀。布局优化的核心思路,就是通过空间分区、单元划分和可见性剔除,把“全局两两检测”降为“局部少量检测”,从而在不牺牲仿真真实性的前提下显著降低计算量。
一、碰撞检测计算量的来源
设工作站中有 N 个参与碰撞检测的对象,若采用全配对检测,检测对数量为 N(N−1)/2。当 N=20 时约为 190 对,N=40 时约为 780 对,N=80 时则达到 3160 对。检测对数量随对象数呈平方增长,这是碰撞检测开销快速上升的根本原因。更关键的是,很多检测对在物理上根本不可能接触,例如位于工作站两端的机器人之间、固定围栏与远处工装之间,这些“无效对”如果每帧都被计算,就是纯粹的浪费。
因此,布局优化的目标可以量化为:在保证必要碰撞关系不漏检的前提下,尽量减少每帧实际参与求交的对象对数量。空间分区、单元划分和可见性剔除,正是从不同层面削减无效检测对的三类技术。
二、空间分区:用包围盒把对象分到不同区域
空间分区的基本做法是:先为每个对象或对象组建立轴对齐包围盒(AABB),再按工作站物理布局把空间划分为若干区域,只有包围盒在空间上重叠或相邻的区域之间才需要建立碰撞检测关系。RobotStudio 中可以通过为对象设置不同的碰撞集合,或利用工作站几何布局自然形成分区。
以一个典型双机器人焊接单元为例:机器人 R1 负责左侧工位,R2 负责右侧工位,中间由安全围栏隔开。若把 R1 及其工装、R2 及其工装分别放入两个碰撞集合,则 R1 与 R2 之间、R1 工装与 R2 工装之间的检测对可以直接排除。假设原来 30 个对象全配对为 435 对,分区后每个集合内部约 15 个对象,检测对降为 2×105=210 对,减少约 52%。如果进一步把固定不动的围栏、底座、地面等静态对象从动态碰撞集合中移出,只保留机器人与工件、夹具之间的必要检测,检测对还能继续下降。
三、单元划分:按工艺节拍拆分独立检测域
单元划分比空间分区更进一步,它按照工艺流程把工作站拆成若干相对独立的“检测单元”。每个单元内部对象参与碰撞检测,单元之间只在存在物料传递或共享空间时才建立有限的跨单元检测。这样做的收益是:当某个单元不处于活动状态时,其内部检测可以整体暂停或降频。
例如一个“上料—焊接—下料”三单元工作站,上料单元和焊接单元通过输送链衔接。上料机器人只在工件进入焊接工位前动作,焊接机器人只在工件到位后动作。若把上料单元和焊接单元划分为两个检测域,并规定“输送链上有工件时”才激活跨域检测,则大部分时间里两个域可以独立检测,跨域检测对数量被压缩到输送链与工件相关的少数几对。
单元划分的实操要点是:先按工艺节拍列出各设备的动作时间段,再把动作时间重叠、空间可能重叠的设备划入同一单元;动作时间基本不重叠的设备尽量分到不同单元。RobotStudio 中可以用 SmartComponent 或事件管理器控制不同碰撞集合的启用与禁用,实现按节拍动态切换检测域。
四、可见性剔除:让不朝向的对象不参与检测
可见性剔除借鉴了图形渲染中的思路:如果两个对象在当前姿态下彼此不在对方的“可能接触方向”上,就可以跳过检测。在机器人工作站中,最直接的可见性剔除是“工作空间剔除”——每台机器人都有其可达工作空间,若某对象完全位于该机器人工作空间之外,则机器人与该对象之间无需检测。
更细一层是“朝向剔除”。例如机器人 R1 的末端工具当前朝向左侧工位,而右侧工位的夹具位于其背后,即使两者包围盒在全局坐标下可能重叠,也可以根据工具坐标系与目标方向的夹角判断为不可能接触。RobotStudio 中可通过碰撞集合的几何代理(简化包围盒)配合姿态条件实现类似效果。
可见性剔除的收益在大型工作站中尤其明显。假设 8 台机器人分布在一条长 20 米的生产线上,每台机器人工作空间半径约 2.5 米,则每台机器人只可能与相邻 1~2 台机器人及附近工装发生接触。通过工作空间剔除,原本 8×7/2=28 对机器人间检测可降为约 8 对相邻检测,减少约 70%。
五、布局优化后的效果观察与判断
完成空间分区、单元划分和可见性剔除后,需要从仿真运行中观察效果。可关注的指标包括:仿真帧率或实时倍率是否提升、碰撞检测耗时在总仿真耗时中的占比是否下降、是否出现漏检导致的穿模现象。判断标准是:在典型工况下,仿真能够以接近实时的速度运行,且关键接触位置(如工具与工件、机器人与围栏)仍能正确触发碰撞信号。
若发现帧率提升但出现穿模,说明剔除过度,应把被误剔除的对象对重新加入检测集合;若帧率没有明显变化,则可能是检测对数量虽减少但单对检测的几何复杂度仍然很高,此时应优先简化碰撞代理几何,例如用包围盒或凸包代替精细网格。
上图展示了一个三单元工作站的划分结果:上料区、焊接区、下料区各自拥有独立的碰撞集合,单元之间只在输送链传递工件时激活有限的跨单元检测。这种结构把原本全局两两检测的规模压缩到各单元内部,同时保留了物料传递路径上的必要检测。
六、实操中的参数与配置建议
在 RobotStudio 中落地上述方法时,可参考以下配置思路。第一,为每个单元建立独立的碰撞集合,命名建议采用“单元名_对象类型”的格式,例如“A_机器人”“A_夹具”“B_机器人”,便于后续排查。第二,静态对象(围栏、底座、地面)单独放入“静态”集合,且不与自身建立检测对。第三,跨单元检测集合只包含输送链、共享变位机和传递中的工件,并配合事件管理器在工件到位时启用、离开时禁用。第四,对每台机器人设置工作空间包围盒,超出包围盒的对象不加入该机器人的检测集合。
一个可参考的检测对数量估算表如下(以示例工作站为参考,非实测数据):
| 优化阶段 | 参与对象数 | 检测对数量(估算) | 相对全配对降幅 |
|---|---|---|---|
| 全配对检测 | 30 | 435 | — |
| 空间分区后 | 3 个集合各约 10 | 3×45=135 | 约 69% |
| 单元划分 + 动态启用 | 活动单元约 12 | 约 66 | 约 85% |
| 叠加可见性剔除 | 活动单元约 8 | 约 28 | 约 94% |
需要强调的是,上表为示例估算,实际数值取决于工作站对象数量、几何复杂度和动作节拍。优化时应以仿真运行中的帧率和碰撞检测耗时为准,逐步调整,避免一次性剔除过多导致漏检。
七、常见问题与排查方向
布局优化后最常见的问题是“优化了但没效果”或“优化后出现穿模”。前者通常是因为检测对数量虽然减少,但剩余检测对中包含了高精度网格对象,单对求交耗时仍然很高,此时应优先简化碰撞代理几何。后者通常是因为跨单元检测集合设置过窄,或工作空间包围盒设置过小,把本应检测的对象排除在外,此时应检查被剔除对象对是否真的在物理上不可能接触。
另一个容易被忽视的问题是动态切换的时序。如果跨单元检测在工件尚未完全进入共享区域时就被禁用,可能出现短暂漏检;如果启用过晚,又会在工件已经接触时才开始检测。建议在事件管理器中为跨单元检测设置适当的提前量和滞后量,例如工件到达输送链末端前 0.2 秒启用,离开共享区域后 0.2 秒禁用,以覆盖实际动作的时间不确定性。
通过空间分区、单元划分和可见性剔除的组合使用,多机器人工作站的碰撞检测计算量通常可以从全局平方级降到接近线性级。布局优化的价值不仅在于提升仿真速度,更在于让工作站的空间结构变得清晰可维护——每个单元负责什么、哪些对象之间需要检测、哪些可以安全忽略,都能在布局层面一目了然。