组碰撞检查器 (Group Collision Checker)(Pro)

概述 (Overview)

GroupCollisionChecker 检测命名的 realvirtual 组之间的运行时碰撞。同一组内的对象永远不会相互碰撞(自碰撞被抑制),而来自不同组的对象会自动触发碰撞事件。

这对于监控机械臂是否与机床夹具碰撞,或夹爪是否穿透工件支架非常有用——不会因同一运动链内的关节产生误报。

实时检测并高亮机器人组与机器门之间的碰撞
ℹ️

此功能在 realvirtual 6.3.0(Professional)中添加

工作原理 (How It Works)

系统使用一个专用的物理层 (rvCollissionCheck),该层与所有其他 realvirtual 层(传感器、传送面、接收器)隔离。在该层内:

  • 同组碰撞体对通过 Physics.IgnoreCollision 抑制
  • 跨组碰撞体对自动触发碰撞事件
  • 无论定义多少组,仅消耗 一个物理层

此设计避免了层级耗尽,并防止对传感器或传输系统产生副作用。

快速入门 (Quick Start)

  1. 在场景中的任意 GameObject 上添加 GroupCollisionChecker 组件
  2. Collision Groups 中添加条目——每个条目是一个 realvirtual 组名加碰撞体模式
  3. 可选地为基于 GPU 的高亮分配 MultiObjectOverlayRendererFeature 引用
  4. 按 Play——碰撞通过信号、事件和检视器状态进行检测和报告

属性 (Properties)

碰撞组 (Collision Groups)

Collision Groups(列表)要监控的组。每个条目定义:

  • Group Name — realvirtual 组名(通过 Group 组件分配)
  • Collider Mode — 如何为此组中的对象创建碰撞体:
    • BoxApproximation — 从渲染器边界创建 BoxCollider。快速且安全,但较粗糙。
    • MeshCollider — 创建凸面 MeshCollider。更精确,使用凸包(最多 255 个顶点)。
    • ExistingOnly — 仅使用已存在的碰撞体。没有碰撞体的对象将被跳过。

设置 (Settings)

Auto Setup On Start(布尔值)启用时,碰撞系统在仿真开始时自动初始化。禁用此选项可从脚本手动调用 SetupCollisionSystem()

高亮 (Highlight)

Highlight On Collision(布尔值)通过 URP Overlay Renderer Feature 启用碰撞对象的 GPU 加速视觉高亮。

Overlay Feature(引用)从您的 URP Renderer Asset 中分配一个专用的 MultiObjectOverlayRendererFeature 实例。这必须是与选择系统使用的实例分开的单独实例。

Highlight Color(Color)应用于碰撞对象的高亮覆盖颜色。默认值:红色。

Overlay Mode(枚举)高亮的渲染样式:Default、XRay 或 Blink。

Blink Speed(浮点数)当 Overlay Mode 设置为 Blink 时,以每秒周期数为单位的闪烁频率。

Reset Mode(枚举)控制何时移除高亮:

  • WhileColliding — 碰撞结束时高亮自动消失
  • OnEnterPersistent — 高亮保持直到通过 ResetHighlight 信号手动重置

接口连接 (Interface Connection)(PLC 信号)

CollisionActive (PLCInputBool) 输出到 PLC——当至少一个跨组碰撞活动时为 true。

CollisionCount (PLCInputInt) 输出到 PLC——当前活动碰撞对的数量。

ResetHighlight (PLCOutputBool) 从 PLC 输入——上升沿清除所有碰撞高亮。

ResetCollisions (PLCOutputBool) 从 PLC 输入——上升沿重置所有碰撞跟踪。

事件 (Events)

OnCollisionEnterEvent (UnityEvent) 跨组碰撞开始时触发。提供涉及的两个 GameObject。

OnCollisionExitEvent (UnityEvent) 跨组碰撞结束时触发。提供涉及的两个 GameObject。

高级 (Advanced)

Excluded Pairs(列表)要从检测中排除的特定跨组对。例如,如果夹爪接触是预期的,则排除"Gripper"与"Workpiece"。

状态 (Status)(只读)

Is Colliding — 当至少一个碰撞活动时为 true

Active Collision Count — 活动碰撞对的数量

Total Proxy Count — 管理的碰撞体代理总数

Highlighted Renderer Count — 当前高亮的渲染器

Active Pairs — 当前碰撞对的可读列表

碰撞体模式建议 (Collider Mode Recommendations)

组类型推荐模式原因
机器人关节ExistingOnly手动放置的胶囊/盒碰撞体更精确
机床框架BoxApproximation部件多,粗略检测即可
夹爪/工具MeshCollider准确形状对接触检测很重要
安全区域ExistingOnly手动放置的盒触发器作为区域边界

典型用例 (Typical Use Cases)

机器人 vs 机床框架 — 6 轴机械臂(组"RobotArm")在机床框架(组"MachineFrame")附近移动。机器人关节内的自碰撞被抑制。机器人与框架之间的任何接触都会触发红色闪烁高亮并设置 PLC 信号以停止机器人。

夹爪 vs 夹具 — 夹爪(组"Gripper")从夹具(组"Fixture")中拾取部件。夹爪与工件的接触通过 Excluded Pairs 排除。只有非预期的夹爪与夹具接触才会触发警报。

多个机器人 — 两个机器人(组"Robot1"、组"Robot2")在重叠的工作区域内工作。每个机器人的内部关节不会触发警报,但任何机器人之间的接触都会触发。

高亮设置 (Highlight Setup)(URP)

要使用高亮功能,您需要在 URP Renderer 中添加第二个 MultiObjectOverlayRendererFeature

  1. 打开您的 URP Renderer Asset(通常是 URP-Default-Renderer.asset
  2. 点击 Add Renderer Feature 并选择 Multi Object Overlay Renderer Feature
  3. 将其命名为"CollisionOverlay"以与选择覆盖区分
  4. 将此新功能分配给 GroupCollisionChecker 上的 Overlay Feature 字段

现有的覆盖功能(由选择系统使用)保持不变。

脚本 API (Scripting API)


// 手动设置(如果 AutoSetupOnStart 为 false)
checker.SetupCollisionSystem();

// 清除高亮而不重置跟踪
checker.ClearAllHighlights();

// 重置所有跟踪(高亮 + 活动对)
checker.ClearCollisionTracking();

// 通过 C# 委托订阅碰撞事件
checker.OnGroupCollisionEnter += (objA, objB) => {
    Debug.Log($"Collision: {objA.name} <-> {objB.name}");
};

checker.OnGroupCollisionExit += (objA, objB) => {
    Debug.Log($"Collision ended: {objA.name} <-> {objB.name}");
};

另请参阅 (See Also)