运动学关节 (Kinematic Joints) (Pro)
此功能在 realvirtual 6.3.x (Professional) 中添加。
概述
运动学关节 (Kinematic Joints) 为 realvirtual 添加了纯运动学、基于位置的约束求解器。它们求解闭合运动链 — Delta 机器人、四连杆机构、剪刀式升降台、平行夹爪 — 完全不使用 Unity 的物理引擎。KinematicMechanism 收集其层级中的每个 KinematicJoint,并在每个 FixedUpdate 中,根据 Drive 组件的当前位置移动每个被动连杆,使所有关节约束得到满足。没有抖动、没有漂移、没有 PhysX 参与:相同的 Drive 输入总是产生完全相同的结果。
这是 realvirtual 现有运动系统(运动学层级 Drive、Joint/PhysX 关节、Kinematic/CAD 枢轴校正 — 参见 Joint 和 Kinematic)之外的第四条路径。当一个机构无法表示为简单的父/子层级时 — 因为一个连杆需要同时满足多个约束(闭合回路的定义特征)— 请专门使用运动学关节 (Kinematic Joints)。
精度而非物理。 PhysX Joint 通过迭代的、力驱动的物理求解闭合回路,因此容易抖动、下垂和漂移,需要弹簧/阻尼器调整才能保持稳定,且不完全可重复。运动学关节 (Kinematic Joints) 在每个 FixedUpdate 中精确满足几何 — 无抖动、无漂移、完全确定。当机构的位姿需要正确时(Delta 精确拾取到某一点、连杆机构索引到固定止挡、夹爪闭合到精确宽度),使用运动学关节;仅当动力学本身是您想要模拟的内容时,才使用物理关节。
Drive 继续按照您已知的方式工作。Drive 仍然拥有自己的轴并以速度、加速度和限位移动它。唯一的区别是 KinematicJoint 在其 Driven By 字段中引用该 Drive — 该关节成为求解器在该步骤中视为固定的活动边界条件,下游的一切(被动连杆)均由此计算。

演示场景中的 Autonox 机器人是根据制造商公开的连接尺寸图重建的,而非来自精确的内部 CAD。关节位置合理且机构求解干净,但臂/杆几何形状是近似的 — 请将此演示视为求解器的展示,而非尺寸精确的 Autonox 模型。
关键概念
浮动连杆。 构成闭合回路一部分的连杆不需要相互建立父子关系。例如,四连杆机构中的耦合连杆直接位于机构根节点下,其位置完全由其 KinematicJoint 连接确定 — 这正是使闭合回路成为可能的基础。
四种关节类型。 旋转 (Revolute,铰链)、移动 (Prismatic,滑块)、球面 (Spherical,球关节) 和万向 (Universal,十字轴) 覆盖了绝大多数机械关节。在杆仅由两个球面关节保持的情况下需要万向关节 — 该配置具有围绕杆自身轴线的自由旋转自由度,realvirtual 会检测并用控制台警告标志。
主动关节与被动关节。 当您在关节的 Driven By 字段中分配 Drive 时,该关节变为"主动"。主动关节是求解的边界条件;所有其他关节都是被动的,由求解器在每个 FixedUpdate 中计算其值。
诊断而非静默失败。 如果机构被推到关节限位或超过关节限位,或进入无法精确到达的配置,求解器会收敛到最接近的可实现位姿,而不是撕裂运动链。KinematicMechanism 上的 Converged 和 Residual Error 使此一目了然,可选的 Signal Converged PLC 信号将其暴露给您的自动化逻辑。
关节类型
每个 KinematicJoint 是四种类型之一。类型决定关节保留多少自由度、需要填写哪些锚点/轴字段,以及关节在场景视图中如何绘制。当您选择一个关节(或其 KinematicMechanism)时,每个关节绘制特定类型的彩色编码 Gizmo;选择单个关节还会以线框高亮其两个连接的连杆 — Body A 为蓝色,Body B 为橙色 — 以便您一目了然地看到关节连接了哪两个部件。

Revolute — 1 旋转自由度 (铰链)。 绕单一轴旋转。填写 Anchor A(铰链点)和 Axis A(旋转轴,在 Body A 的本地空间中)。这是除了 Prismatic 之外唯一带有单一标量值的关节类型,因此通常通过分配 Driven By Drive 使其变为主动类型,且是唯一(与 Prismatic 一起)支持 Use Limits 的类型。Gizmo:旋转平面中的蓝色圆盘带轴箭头,加上绿色的限位弧(当关节接近限位时变红)。典型用途:机器人臂轴、四连杆曲柄和摇杆、Delta 机器人的驱动臂。
Prismatic — 1 平移自由度 (滑块)。 沿单一轴滑动。Anchor A 和 Axis A 定义滑动线;Use Limits 限制行程(以毫米为单位)。Gizmo:橙色滑动线带端点标记和当前位置的立方体标记。典型用途:剪刀式升降行程、线性执行器、Autonox 演示的伸缩轴。
Spherical — 3 旋转自由度 (球关节)。 没有单一轴的自由球关节 — 只有 Anchor A 和 Anchor B 重要,Axis A 和限位被隐藏。Gizmo:锚点处的三个正交线框环(线框球体)。典型用途:平行四边形杆的下端、球关节连杆机构。由两个球面关节保持的杆具有围绕自身轴线的自由空转自由度,求解器会以警告标志 — 改为在一端使用万向关节 (Universal)(见下文)。
Universal — 2 旋转自由度 (十字轴 / U-joint)。 传递旋转同时允许弯曲,如同十字轴/万向关节。它需要两个轴:Body A 空间中的 Axis A 和 Body B 空间中的 Secondary Axis B,它们在装配位姿下应垂直。Gizmo:风格化的十字轴(两个垂直的叉形轭)带实时角度标签 — 90° 时为绿色,两轴偏离直角时为橙色。这是 Delta 平行四边形所需的上关节类型:每杆配一个万向关节和一个球面关节可消除两个球面关节会留下的空转自由度。

属性
KinematicJoint
Joint Type (枚举) 选择约束:Revolute (1 旋转自由度)、Prismatic (1 平移自由度)、Spherical (3 旋转自由度,无单一轴) 或 Universal (2 旋转自由度,十字轴式)。
Body A / Body B (Transform) 此关节连接的两个连杆。Body A 可留空以将关节锚定到世界/静态空间;Body B 始终是必需的。
Anchor A / Anchor B (Vector3, 毫米) 关节的枢轴点,以各自体的本地空间给出。
Axis A (Vector3) Body A 本地空间中的关节轴。由 Revolute、Prismatic 和 Universal 使用;Spherical 不显示(无单一轴)。
Secondary Axis B (Vector3) 第二个关节轴,在 Body B 的本地空间中 — 仅 Universal 关节。
Use Limits (布尔) 将关节值限制在 Lower Limit 和 Upper Limit 之间。适用于 Revolute 和 Prismatic 关节(具有单一标量值可供限位限制)。
Lower Limit / Upper Limit (浮点) 限制范围,以度 (Revolute) 或毫米 (Prismatic) 为单位。
Driven By (Drive) 主动控制此关节的 Drive。留空表示被动关节(由求解器计算)。
Current Value (浮点, 只读) 关节的当前值(度或毫米),由求解器在每个 FixedUpdate 中写入以供诊断。
KinematicMechanism
Solver Iterations (整数) 每个 FixedUpdate 运行的固定 Newton-Raphson 迭代次数。对于大多数机构,四次足够;具有多个浮动连杆的 Delta 机器人受益于更高的值(演示场景使用十二次)。
Damping (浮点) 阻尼最小二乘因子,保持求解器在奇异配置附近稳定。默认值适用于典型机构。
Tolerance (浮点, 毫米) 机构报告 Converged = true 的残差误差阈值。
Converged (布尔, 只读) 上次求解是否满足 Tolerance。
Residual Error (浮点, 只读) 上次求解的最大剩余约束误差(以毫米为单位)— 在 Inspector 的诊断面板中直接可见,带绿色勾号或红色叉号。
Signal Converged (PLCOutputBool) 可选 PLC 信号,镜像 Converged,使您的控制逻辑能够对机构遇到限位的情况做出反应。
快速入门
- 为您的机构创建一个空 GameObject 并添加 Kinematic Mechanism 组件 (
realvirtual/Kinematics/Kinematic Mechanism)。 - 将连杆作为子对象添加 — 固定框架、任何 Drive 控制的连杆以及任何浮动(回路)连杆。
- 为两个连杆之间的每个连接添加一个 Kinematic Joint 组件 (
realvirtual/Kinematics/Kinematic Joint),并设置 Body A、Body B、Anchor A/B 和 Axis A。 - 对于 Drive 应控制的每个关节,将该 Drive 分配到 Driven By。
- 在
KinematicMechanismInspector 中按 Validate Mechanism 以在按 Play 之前检查拓扑(连杆/关节数量、独立回路、估计自由度数)。 - 在 Edit 模式下,使用 Solve Now 预览单次求解而无需进入 Play 模式 — 更改完全可撤销。
- 进入 Play 模式并像往常一样驱动您的 Drive。机构在每个 FixedUpdate 中自动求解。

Editor 工具
选中 KinematicJoint 时,Anchor A 和 Axis A 可直接在场景视图中拖动 — 锚点的位置手柄和轴方向的自由移动手柄。Gizmo 按类型对每个关节进行颜色编码(Revolute 为蓝色圆盘、Prismatic 为橙色、Spherical 为紫色球体、Universal 为两个彩色箭头),并显示限位弧(当 Revolute 或 Prismatic 关节接近限位时变红)。选中 KinematicMechanism 还会在每个关节的 Body A/B 锚点之间绘制连接线 — 如果机构的残差误差超过 Tolerance,此线变为虚线黄色警告线,使不可达配置一目了然。
Kinematic Tool 窗口中的 Kinematic Joint 部分重用工具现有的枢轴/边界框轴定义,以快速在 CAD 网格上放置关节锚点。
逆运动模式 / Kinematic Target
此功能在 realvirtual 6.3.x (Professional) 中添加。
以上所有内容描述的是正向方向:Drive 输入,被动连杆位姿输出。KinematicTarget 为同一求解器添加了反向方向 — 笛卡尔世界空间位置输入,驱动关节值输出。将其附加到任何 GameObject,设置 Mechanism 和 Target Link(应跟随此 GameObject 的机构自身连杆,例如 Delta 机器人的平台),并启用 Tracking Active:每个 FixedUpdate 中,机构的 Drive 被求解以使 Target Link 收敛到此 GameObject 的自身位置。这是每种机构解析逆运动学实现的通用替代 — 此系统已能正向求解的任何机构,现在也能逆向求解,使用相同的阻尼最小二乘方法和相同的"最接近可实现位姿"行为处理不可达目标。
仅位置 — 故意没有方向目标。此系统针对的并联运动学平台(尤其是 Delta 机器人)根本没有独立的方向自由度;其平台方向是平行四边形臂几何的副产品,而非可控输入,因此方向约束只会过度约束一个仅凭位置已完全确定的求解。
Mechanism (KinematicMechanism) 其主动驱动关节为此目标求解的机构。
Target Link (Transform) 应跟踪此 GameObject 世界位置的机构自身连杆 — 通常是正向模式设置中用于诊断读取的同一连杆(Delta 机器人的平台、剪刀式升降台的顶部阶段)。
Tracking Active (布尔) 启用持续逆模式跟踪。活动时,驱动 Drive 从其正常的 Jog/Drive To/速度斜坡行为中释放 (Drive.IsExternallyControlled),因此此组件的写入是权威的 — 与 RobotIK 用于其 IK 解的约定相同。禁用时会将 Drive 交还给其通常的行为。
Reachable (布尔, 只读) 上次逆求解是否精确收敛到目标位置。false 表示目标位于机构工作空间之外或遇到了 Drive 限位 — 机构仍会移动到最接近的可实现位姿而非冻结,与正向求解器自身的诊断完全一致。
场景视图中一个小十字标记目标位置,用虚线连接到 Target Link 的当前位置 — 可达时为绿色,目标在工作空间外时为红色。
对于没有实时跟踪 GameObject 的脚本化或编程使用,KinematicMechanism 直接暴露底层求解:
// Pure calculation, does not move the scene:
float[] jointValues = new float[mechanism.GetActiveJointCount()];
bool reachable = mechanism.SolveInverse(targetWorldPosition, platformLink, jointValues);
// Solves AND writes the result into the driven Drives:
bool reachable = mechanism.DriveToPosition(targetWorldPosition, platformLink);
性能
约束求解器在高性能原生核心中运行,而非托管脚本代码。即使是像 Autonox Delta 这样要求高的闭合回路机构 — 19 个关节、十个浮动体、约 66 个广义坐标 — 每个 FixedUpdate 的求解时间也远低于十分之一毫秒。KinematicMechanism 诊断面板上的实时 Solve Time Ms 字段直接显示了这一点(Autonox 演示约为 0.07 ms)。
机构还并行求解。当场景包含许多独立机构时,realvirtual 在每个 FixedUpdate 中将它们收集到一个批次中并在工作线程间求解,然后以确定性顺序将每个结果写回主线程。在 100 台完整 Autonox Delta 机器人的压测场景中(共 1900 个关节),整个批次的求解时间约为每个 FixedUpdate 8 ms — 轻松实现实时 — 而朴素的逐个方法需要数百毫秒。结果保持完全确定性:相同的 Drive 输入总是产生相同的位姿,无论运行一个机构还是一百个。
您无需配置任何这些。构建您的机构,按 Play,求解器会自动选择快速路径。
常见用例
Delta 机器人 – 三个 Drive 控制的臂,每个将 Universal-Spherical 平行四边形闭合到浮动平台上。这是求解器验证所用的参考机构 — 随着臂的移动,平台保持纯平移(无旋转),与物理 Delta 机器人完全一致。

剪刀式升降台 – 单个 Drive 控制的 Prismatic 关节推动剪刀阶段的底部;平台高度根据几何自动跟随。
四连杆 / 耦合连杆机构 – Drive 控制的曲柄通过闭合回路移动耦合连杆和摇杆,适用于凸轮、索引机构和肘节夹具。
平行夹爪 – 两个或更多爪必须从单个 Drive 对称打开/关闭,通过共享耦合连杆连接。
限制 (V1)
关节类型。 四种类型覆盖了绝大多数工业机构,但三种多体关节类型尚未内置:
- Cylindrical — 绕同一轴同时旋转和平移(2 自由度),如旋转伸缩轴。今天可建模为共享中间连杆上的 Revolute + Prismatic 对(两个关节之间一个虚拟连杆,两者使用相同轴)。Autonox 演示的伸缩轴即以此方式构建。
- Planar — 平面内两个平移加一个旋转(3 自由度)。
- Screw / helical — 旋转和平移通过导程刚性耦合(螺纹主轴)。单独的
Drive齿轮/比率耦合是当前的变通方法。
故意没有固定/焊接关节 — 两个永不相对于彼此移动的连杆只需在层级中建立父子关系。
其他 V1 限制。
- 运动学关节仅在 Play 模式下求解,因为求解运行在 Unity 的
FixedUpdate步骤上,Unity 本身仅在播放时执行。使用KinematicMechanismInspector 中的 Solve Now(或点动滑块)进行完全可撤销的 Edit 模式预览。 - 嵌套机构(一个
KinematicMechanism在另一个内部)不受支持,并被标记为配置错误 — 每个机构作为一个自包含约束图求解。 - 一个机构有一个接地参考(其固定框架或世界)。任意数量的关节可以锚定到同一接地 — 例如四连杆机构的两个接地枢轴都锚定到框架连杆。不支持的是单个机构中有两个独立的静态基础(被标记为配置错误);将两个枢轴建模到共享框架连杆,或拆分为单独的机构。
- 求解器在原生核心中运行;Windows Editor 和 Standalone 播放器开箱即用。
另请参见
- Drive — 每个驱动运动学关节引用的活动轴
- Joint — 用于反向运动学的基于 PhysX 的替代方案
- Kinematic — CAD 层级/枢轴校正(尽管名称相似但无关)
- Kinematic Tool — 在 CAD 网格上构建机构的 Editor 工作流
© 2026 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、复印、录制或其他电子或机械方法)复制、分发或传播本出版物的任何部分。