驱动器 (Drive)

驱动器 (Drive) 控制 GameObject 沿定义轴的移动。它们用于场景中任何移动的组件——除了自由移动的 MU(移动单元),后者以不同方式处理。

驱动器本身 提供 PLC 通信的信号接口。要启用 PLC 交互,您必须在包含 Drive 脚本的同一 GameObject 上附加 DriveBehavior 组件。这将运动逻辑与信号接口逻辑分离,使系统保持模块化和灵活性。

💡 提示
线性轴 (linear axis) 的 Drive 方向始终基于 Drive 附加到的 GameObject 的 本地坐标系 (local coordinate system) 来定义。
对于 旋转轴 (rotational axis)本地坐标系的原点 作为旋转中心,对象围绕定义的轴旋转。
Drive 还可以连接到 传送面 (Transport Surface)——在这种情况下,只有 传送面上的 MU 会被 Drive 移动。
💡 提示
所有 realvirtual 组件中 Drive 位置的标准单位是:
• 线性 Drive 使用 毫米 (Millimeters)
• 旋转 Drive 使用 度 (Degrees)
对应的速度单位是:
• 线性移动使用 毫米/秒 (Millimeters per second)
• 旋转使用 度/秒 (Degrees per second)
在 Unity 中,1 毫米等于 1 个 Unity 单位,这意味着在 realvirtual 中 1 米 = 1000 个 Unity 单位
虽然您可以在 realvirtualController 中更改此缩放比例,但 不建议这样做,因为它可能导致物理和交互方面的不一致。

关于创建第一个模型并添加驱动器的哔哩哔哩教程

此图片展示了 演示模型 (Demo Model) 中两个驱动器如何连接到处理系统的轴:

演示模型中的驱动

在演示单元中,驱动器 负责移动 CNC 机床的不同部件。运动结构由 Unity 中 GameObject 的 父子层级 定义,它建立了机床的 运动链 (kinematic chain)

💡 提示
如果导入的 CAD 数据不符合所需的 运动层级,您可以使用 Kinematic 组件定义引用原始 CAD 部件的 独立运动层级
这允许您构建干净且功能正常的运动结构,而无需修改原始 CAD GameObject 层级。

Unity 检视器 (Inspector) 中的 Drive 组件 包含多个控制运动行为和配置的属性。这些属性将在下面详细说明。

Drive Inspector

编辑器模式中的驱动器手柄

现代驱动器 Gizmo(在 6.0.3 中更新)

当您在 Unity 编辑器中选择 Drive 时,会显示增强的视觉手柄和实时反馈,帮助您配置和监控驱动器行为:

现代 Drive 小工具,显示旋转手柄、实时位置(137.2°)和速度显示(26.5°/s)

交互手柄功能

视觉元素

  • 蓝色圆形手柄:旋转驱动器的交互式旋转控制
  • 绿色/黄色方向箭头:显示驱动器方向和移动指示器
  • 实时位置显示:显示当前驱动器位置(例如旋转驱动器的"137.2°")
  • 速度指示器:显示当前移动速度(例如"26.5°/s")

手柄交互

  • 方向控制:点击方向箭头更改驱动器轴方向
  • 视觉反馈:当前方向以独特颜色高亮显示
  • 实时更新:位置和速度值在移动过程中持续更新
  • 精确控制:交互式手柄允许精确的驱动器配置

更改驱动器方向

视觉方向选择

  • 活动方向:当前选择的轴以醒目的视觉指示器显示
  • 备选方向:其他可用轴以次要颜色显示
  • 方向反转:点击当前方向箭头可反转正/负方向
  • 轴切换:点击备选方向箭头可更改驱动器轴

线性驱动器手柄

对于线性驱动器,现代 Gizmo 系统显示所有三个轴的方向箭头:

显示 X(红)、Y(绿)、Z(蓝)方向箭头的线性驱动手柄,用于精确选择轴

线性驱动器功能

  • 颜色编码轴:红色 (X)、绿色 (Y)、蓝色 (Z) 遵循 Unity 的标准颜色方案
  • 方向箭头:每个可能的移动方向都有清晰的视觉指示器
  • 轴选择:点击任意箭头设置驱动器的主移动轴
  • 视觉清晰度:与 Unity 的 Gizmo 系统集成的干净、现代外观

Gizmo 可见性设置

只有在 Unity 的 Gizmo 设置中启用了 Drive Gizmo 时,才会显示驱动器手柄。您可以通过 Unity 的首选项控制 Gizmo 可见性:

Unity Preferences 在 Scripts 部分显示 Drive 小工具可见性控件

Gizmo 控制:

  • Drive Gizmo 切换:全局启用/禁用驱动器手柄可见性
  • 图标显示:在场景视图中显示/隐藏驱动器组件图标
  • 最近更改:快速访问最近修改的 Gizmo 设置
  • 按组件控制:不同驱动器类型的单独可见性设置
ℹ️

或者,您可以使用快捷键更改驱动器方向。按 SPACE 键可反转当前选定 Drive 的方向。

TAB 键可遍历所有 6 个可能的方向(3 个线性和 3 个旋转)。

驱动器限位

您可以为驱动器定义上下限位。这些限位仅在使用 Jog ForwardJog Backward 信号驱动驱动器时使用。现代限位显示显示精确的值和视觉指示器:

现代驱动限位,显示下限(-500 mm)和上限(1000 mm)及方向手柄

现代限位显示功能

  • 精确值显示:显示确切的限位值(例如下限"-500 mm",上限"1000 mm")
  • 视觉范围指示器:清晰展示允许移动范围的视觉表示
  • 与手柄集成:限位显示与方向手柄系统无缝配合
  • 实时更新:在检视器中更改限位值时立即更新

限位行为

对于线性轴,限位定义了使用点动 (jog) 命令时驱动器停止的精确位置。驱动器只能在下限和上限之间定义的范围内移动。

对于旋转轴,限位通过修剪过的圆圈显示。驱动器只能在白色区域旋转。

实际使用示例

设置线性传送带时,您可能配置:

  • 下限:0 mm(起始位置)
  • 上限:2000 mm(传送带末端)

这可防止驱动器在点动操作期间超出物理传送带长度。

💡 提示
避免在连接到 运动控制器或机器人控制器 (motion or robot controller) 的 Drive 上使用 位置限位 (position limits)
这些控制器通常在内部处理运动约束。在这种情况下启用限位可能会 隐藏错误的目标位置,使检测配置或控制错误变得更加困难。

故障排除 (Troubleshooting)

驱动器不移动

  • 检查活动设置:确保"Active"设置为"Always"或适当的条件
  • 验证目标速度:确认 Target Speed > 0 才能移动
  • 限位冲突:检查限位是否阻止了移动
  • 驱动器行为:确保为 PLC 控制附加了正确的 DriveBehavior

运动抖动或不稳定

  • 启用加速度:打开"Use Acceleration"以获得更平滑的启动/停止
  • 加速度值:设置适当的加速度值(通常为目标速度的 10-50%)
  • 速度覆盖:检查全局速度覆盖是否影响运动
  • 物理问题:验证正确的碰撞检测和 Rigidbody 设置

性能问题

  • 多个驱动器:对于大量驱动器,考虑使用 Drive Behavior 进行优化控制
  • 复杂层级:对复杂运动链使用 Kinematic 组件
  • 更新频率:检查 FixedUpdate 频率以获得平滑运动
⚠️ 注意
点动加加速度 (Jogging with acceleration)驱动器限位 (Drive limits) 目前 不受支持
如果同时启用这两个功能,Drive 行为可能无法按预期工作。

仿真模式中的驱动器手柄

在播放模式期间,驱动器手柄提供实时监控和手动控制功能。现代界面直接在场景视图中显示实时位置和速度信息:

仿真期间显示实时位置(-327.8 mm)、速度(620.0 mm/s)和 QuickEdit 集成的驱动手柄

实时显示功能

  • 实时位置显示:在驱动器附近浮动显示当前驱动器位置(例如"-327.8 mm")
  • 速度监控:在运动期间显示当前移动速度(例如"620.0 mm/s")
  • QuickEdit 集成:通过 realvirtual QuickEdit 面板进行驱动器选择和控制
  • 视觉反馈:通过高亮信息清晰识别活动驱动器

仿真期间的手动控制

  • 方向控制:无法更改驱动器方向(在编辑模式中设置)
  • 点动模式:使用 QuickEdit 控制或手柄手动点动驱动器
  • 限位尊重:手动点动尊重定义的驱动器限位
  • 实时更新:位置和速度值持续更新

替代控制方法

键盘快捷键:

  • 键 1:负方向移动驱动器
  • 键 3:正方向移动驱动器

QuickEdit 面板:

  • 后退/前进按钮:选定驱动器的手动点动控制
  • 目标速度:实时调整移动速度
  • 驱动器选择:显示活动驱动器名称(例如"GantryZ")

旋转驱动器仿真

对于旋转驱动器,仿真界面提供专门的圆形 Gizmo 和角度位置显示:

仿真期间的旋转驱动,显示圆形旋转小工具、实时角度显示(0.0°)和 Axis1 驱动控制

旋转功能:

  • 圆形旋转 Gizmo:蓝色圆形手柄指示旋转轴和范围
  • 角度位置显示:以度为单位显示实时角度(例如"0.0°")
  • 方向指示器:颜色编码箭头显示旋转方向
  • 轴标识:在 QuickEdit 中显示驱动器名称(例如"Axis1")
  • 精确控制:通过手柄或 QuickEdit 界面进行手动旋转控制

驱动器与 Unity 物理

默认情况下,线性旋转 Drive不使用 Unity 的 PhysX Rigidbody 系统 的情况下运行。这种方法通常 更稳定且可预测,特别是对于自动化和仿真场景。

但在某些情况下——例如与物理对象或碰撞体交互时——可能需要直接移动 Rigidbody 组件。为此,您必须在 Drive 组件中启用 "Move This Rigid Body" 选项。

💡 提示
只有在明确需要 Drive 运动影响 Unity 物理时才启用 "Move This Rigid Body"
在大多数用例中,此设置应保持 禁用 以确保最佳的仿真稳定性和性能。

驱动器属性

设置 (Settings)

  • Active:定义 Drive 是否活动。通常应设置为 Always。更多信息请查看 运行时 UI (Runtime UI) 中的 ConnectionStatus
  • Direction:选择移动轴。从线性 (XYZ) 或旋转 (Rotation XRotation YRotation Z) 中选择。移动始终在本地坐标系中定义。
  • Reverse Direction:反转沿选定轴的移动方向。
  • Offset:对 Drive 的位置应用偏移。此值在仿真期间 添加到内部位置

例如,如果 Offset 设置为 100Current Position50,则仿真中的结果位置为 150

这在将 Drive 值与外部系统(如 PLC)对齐时非常有用,其中需要一致的值偏移来进行协调。

  • Start Position:场景开始或 Drive 重置时的起始位置。
  • Speed Override:乘以基础速度,动态调整 Drive 移动的速度。
  • Speed Scale Transport Surface:如果连接到传送面则缩放速度(默认值:1)。
  • Move This Rigid Body:使 Drive 移动附加的 Rigidbody(除非需要 Unity 物理交互,否则不建议使用)。
  • Transport Surfaces:允许将 传送面 (Transport Surfaces) 链接到 Drive。只有链接表面上的 MU 会被移动。

驱动器 IO (Drive IOs)

Drive IOs 部分包含输入和输出字段,允许您在仿真期间与 Drive 交互。

  • Jog Forward

布尔输入,只要信号活动就向前点动 Drive。

使用设定的 Target Speed,不进行加速度平滑。

  • Jog Backward

布尔输入,向相反方向点动 Drive。

同样使用 Target Speed 并忽略加速度设置。

  • Target Position

数值输入,定义 Drive 应移动到的目标位置(以毫米或度为单位)。

可通过脚本或 PLC 控制。

  • Target Speed

定义 Drive 向 Target Position 移动时可达到的最大速度。

值的单位为 mm/s(线性)或 deg/s(旋转)。

  • Target Start Move

布尔输入信号,使用定义的 Target Speed 开始向 Target Position 移动。

仅启动运动;不影响目标值。

  • Reset Drive

将 Drive 位置重置为配置的 Start Position

可手动或通过 PLC 信号触发。

  • Stop Drive

立即停止 Drive 的运动,覆盖当前目标或点动输入。

  • Is At Upper Limit

布尔输出,指示 Drive 是否已达到定义的 Upper Limit(如果启用了限位)。

💡 提示
Drive IOs 可通过 自定义脚本 访问和控制,使其灵活适用于用户自定义行为。
在大多数情况下,它们由 Behavior 组件 使用,该组件处理 Drive 与外部系统(如 PLC 信号)之间的连接。
此设置将物理运动与控制逻辑分离,实现与自动化环境的干净集成。

限位 (Limits)

Limits 部分允许您为 Drive 定义位置约束。这对于防止超出机械边界的移动或在手动或自动化场景中引导逻辑非常有用。

  • Use Limits

启用或禁用移动边界。启用后,Drive 将被限制在 Lower LimitUpper Limit 定义的范围内。

  • Lower Limit / Upper Limit

定义 Drive 允许的最小和最大位置。

值以毫米(线性 Drive)或度(旋转 Drive)为单位。

  • Jump to Lower Limit on Upper Limit

如果启用,当 Drive 达到 Upper Limit 时,它会立即跳转到 Lower Limit 并继续运动。

这对于圆形或旋转分度系统(例如转盘)非常有用。

  • Limit Ray Cast

可选字段,用于分配 传感器 GameObject(通常是虚拟接近传感器)。

这允许不仅通过位置检测限位,还可以通过 基于射线投射的传感器反馈 检测。

💡 提示
当 Drive 由外部 运动控制器或机器人控制器 控制时,避免启用 Limits
控制器可能发送超出定义范围的位置,限位可能会静默裁剪或阻止运动——使检测配置错误变得更加困难。

加速度 (Acceleration)

Acceleration 部分允许您通过控制 Drive 的加速和减速方式来模拟平滑的运动曲线。

  • Use Acceleration

启用基于加速度的运动。禁用时,Drive 以恒定速度直接向目标移动。

  • Smooth Acceleration(仅 Professional 版本)

使用加加速度控制 (jerk-controlled) 的运动曲线激活加速度和减速度的平滑。

这产生更真实的运动,特别是对于机器人和高速系统。

  • Acceleration

最大允许加速度,单位为 mm/s²(线性)或 deg/s²(旋转)。

此值定义 Drive 可以多快地加速或减速。

  • Jerk(仅 Professional 版本)

加速度的最大变化率(mm/s³ 或 deg/s³)。

通过避免力或扭矩的突然变化,帮助创建 柔和的启动和停止

💡 提示
避免将加速度与 点动 (Jogging) 一起使用,因为它们不兼容。

平滑运动(仅 Professional 版本)

Smooth Motion 部分仅在 realvirtual.io 的 Professional 版本 中可用。它提供基于配置的 AccelerationJerk 设置为 Drive 计算的运动曲线的详细可视化和控制。

Smooth Motion Inspector 属性
平滑运动 - 速度细节视图

曲线 (Profile)

此子部分可视化当前移动生成的运动曲线:

  • Position(位置) – Drive 随时间的运动。
  • Velocity(速度) – 位置的变化率。
  • Acceleration(加速度) – 速度的变化率。
  • Jerk(加加速度) – 加速度的变化率。
  • Duration(持续时间) – 基于活动曲线完成当前运动所需的总时间(以秒为单位)。

这些曲线是实时生成的,可深入了解 Drive 在运动期间的行为。

🔗 有关物理中 加加速度 (jerk) 的更多信息,请参见:https://en.wikipedia.org/wiki/Jerk_(physics)

状态 (State)

  • Position / Velocity / Acceleration – Drive 在仿真时间中的当前状态。

目标状态 (Target State)

  • Position / Velocity / Acceleration – Drive 正在 targeting 的值。这些值根据用户输入或外部控制信号更新。

驱动器状态 (Drive Status)

Drive Status 部分提供有关 Drive 当前运动和状态的实时诊断信息。这些值在仿真期间持续更新,可用于调试、监控和与自动化系统接口。

字段 (Fields)

  • Current Speed

显示 Drive 的当前速度,单位为 mm/s(线性)或 deg/s(旋转)。

  • Current Position

Drive 的当前绝对位置,包括偏移和任何外部覆盖。

  • Position Overwrite Value

显示手动或通过外部控制逻辑覆盖位置时应用的临时值。

  • Is Position

显示应用偏移和覆盖后 Drive 的最终计算位置。这是仿真中使用的有效位置。

  • Is Stopped

如果 Drive 当前没有移动且没有在点动,则为 True。

  • Is Running

当 Drive 正在运动(向目标位置移动或正在点动)时为 True。

  • Is At Target Speed

指示 Drive 是否已达到定义的 Target Speed

  • Is At Target

当当前位置等于(在容差范围内)Target Position 时为 True。

  • Is At Lower Limit

当 Drive 已达到或超过定义的 Lower Limit(如果启用了限位)时为 True。

  • Is Sub Drive

标记此 Drive 是否正在作为更复杂运动链(例如多轴系统)中的子驱动器进行控制。

驱动器事件 (Drive Events)

Drive Events 部分提供在 Drive 仿真周期的特定时间点触发的 Unity 事件。这些事件面向需要将 自定义逻辑 直接附加到 Drive 行为的 高级用户

可用事件 (Available Events)

  • On Before Drive Calculation (Drive)

在 Drive 每帧计算其移动 之前 调用。

这对于在 Drive 更新之前注入自定义控制逻辑或修改输入非常有用。

  • On After Drive Calculation (Drive)

在 Drive 完成该帧的运动逻辑 之后 调用。

用于监控状态、触发自定义事件或应用额外逻辑。

💡 提示
Drive Events 面向需要 低级访问 Drive 行为的高级用户。
对于典型应用和 PLC 连接,建议使用 Behavior 组件,如 DriveBehavior
🔗 有关 Drive 更新周期的更多信息,请参阅本文档中的 Motion for Developers 章节。

请查看 Realvirtual.io 类参考 以获取有关此组件属性和方法的更多信息。

© 2025 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、复印、录制或其他电子或机械方法)复制、分发或传播本出版物的任何部分。