项目介绍
UE 中的机器人模型依据真实工业机器人构建,属于类人型结构,关节布局、肢段比例和活动范围与人体存在差异。
我将动作跟随做成统一的逻辑,让机器人模型跟随动捕专用模型的动作。动捕模型既可以接收 Kinect 实时采集的人体姿态,也可以播放已经录制并经过滤波处理的 Level Sequence(LS)。两种动作来源共用同一个模型作为参照,机器人侧根据描述自身结构的 URDF 文件和关节对应关系,计算跟随动作。
我将实时采集和录制回放统一到这套动作跟随逻辑中,负责动捕数据与滤波接入、动捕专用模型配置、机器人 URDF 适配,以及 IK 算法的实现与调试。项目还包含 UDP 通信与三轴位置 IK 的实时控制原型,这部分的实体设备接入与真实数据链路仍需验收。
我负责的功能
| 模块 | 主要工作 |
|---|---|
| 动捕序列处理与播放 | 对动捕设备生成的 LS 做滤波处理,通过序列播放驱动动作跟随 |
| 动捕采集与中间骨架 | 通过 Kinect 捕获人体关键节点,更新中间骨架并实时同步动作 |
| 输入滤波与角度处理 | 处理 LS 动作曲线和实时关节数据,展开实时输入中跨越 ±180° 的角度变化 |
| 统一跟随与 IK 求解 | 读取动捕专用模型的姿态,根据机器人 URDF 和骨段比例构造目标,通过 IK 求解关节动作 |
| 调试与配置 | 提供模拟输入、骨骼连线、目标点和误差显示,辅助检查映射与求解 |
| 实时数据通信 | UDP JSON 收发、最新帧交接、输入超时与恢复处理 |
| 三轴位置求解 | 实现与调试位置 IK 算法,读取机构参数,处理坐标转换与求解状态 |
动捕序列处理与播放
动捕设备录制的人体动作以 Level Sequence(LS)作为输入。我先对序列中的动作曲线做滤波处理,再让动捕专用模型播放处理后的动作,机器人通过统一的跟随逻辑完成适配。
滤波后的序列可以保存为独立资产,便于与原始录制对照,也方便反复检查同一段动作的适配效果。
动捕采集与中间骨架
除了播放录制好的动作,项目也支持通过 Kinect 捕获人体关键节点并实时同步。我接入设备骨骼数据,按配置选择追踪对象,建立采集关节与 PN3 动捕专用模型的对应关系。关键节点的位置和旋转经过滤波后写入这个模型,机器人侧沿用与录制回放相同的 IK 跟随逻辑。
组件会检查目标模型是否存在、映射中的骨骼名是否有效;运行时检查设备、骨架数据和关节索引,再更新模型。
每项映射可以分别设置是否应用位置和旋转。默认配置中,根骨骼接收位置与旋转,其余映射主要传递旋转。动捕专用模型作为中间骨架,统一承接输入姿态,也便于分别检查采集数据和机器人动作。
输入滤波与角度连续处理
滤波分为序列预处理和实时输入处理。LS 侧平滑已录制的动作曲线,Kinect 侧则逐关节处理实时的位置与旋转。两部分都提供多种滤波方式和可调参数,便于根据动作特点调整平滑程度。
难点:角度边界干扰滤波
欧拉角从 179° 变为 -179° 时,实际只转过很小的角度,直接相减却会得到接近一整圈的变化。如果将这个差值直接送入滤波器,就会干扰姿态过渡。
在 Kinect 实时输入处理中,我先将相邻帧角度差调整到 ±180° 范围内,累计成连续角度后再滤波,最后转换回旋转数据。位置的三个分量使用独立通道滤波。
相关技术记录:将动捕骨骼重定向到 UE 机器人模型。
统一的动作跟随与 IK 求解
机器人跟随动捕专用模型当前的骨骼姿态,动作来源的差别由输入侧处理。我将这部分封装为统一的逻辑,使实时采集和录制回放共用机器人适配与求解过程。
适配时,我根据机器人的 URDF 读取各关节的连接方式、转动方向和活动范围,再配置动捕骨骼与机器人关节的对应关系。人体与机器人的肢段长度不同,还需要按比例换算动作目标。
我负责实现和调试 IK 跟随逻辑,也就是根据动作目标反推机器人各关节需要转动的角度,让机器人在自身结构和活动范围内跟随动作。适合直接传递角度的关节则单独配置转动方向、动作幅度和初始偏移。
求解结果经过输出平滑,并按经过时间限制关节角度变化,最后更新 UE 场景组件。
难点:人体与机器人的结构不同
这个类人型工业机器人模型的关节结构与人体并不完全对应,骨段长度、关节数量和转动方向也有差异。直接复制人体末端的位置或旋转,可能让模型动作偏离目标,因此需要根据实际机构构造目标并通过 IK 求解关节动作。
我根据人体与机器人对应肢段的长度换算动作比例,再计算机器人需要到达的目标位置。计算时延续上一帧的关节角度,并参考人体肘部的位置确定手臂弯曲方向;适合直接传递角度的关节则单独映射。结构适配与输出平滑分别调整,便于区分动作偏差和输入波动。
相关技术记录:将动捕骨骼重定向到 UE 机器人模型。
模拟输入与可视化调试
为了在没有 Kinect 输入时检查数据处理流程,我增加了模拟骨架输入。它从中间模型的参考姿态生成摆臂、抬腿和根部起伏,用来检查映射、滤波和模型更新。
调试显示可以同时观察采集侧骨架与模型骨骼,并标注关节名称。机器人侧还会显示目标点、实际关节位置、旋转轴和误差,帮助判断异常来自输入姿态、比例换算还是关节配置。模拟输入只用于软件调试,不能替代真实采集和设备测试。
实时数据通信与自适应滤波
实时原型使用 UDP 收发 JSON。接收线程保留最新解析帧,游戏 Tick 按数据代次读取更新,避免把每个收到的数据包都排成必须逐项执行的动作队列。Tick 按配置周期调度输出,实际节奏仍受游戏帧率影响。
我根据本地接收时间判断数据是否超时,并通过连续可解析包的数量判断恢复条件。输入失效后,协议中的位置、旋转和关节值归零,同时重置滤波;恢复时用新的原始输入重新初始化滤波状态。这里的归零只表示协议数据处理,不代表实体机器人执行安全回零。
这部分使用独立的自适应滤波:根据移动速度和角速度调整截止频率,位置做插值,旋转使用归一化四元数插值。它与动捕采集侧的逐关节滤波分别配置,用于不同的数据输入流程。
相关技术记录:机器人实时数据与三轴 IK 原型。
三轴位置求解与状态输出
我负责三轴位置求解的实现与调试,根据目标位置、机构尺寸和关节转动范围,计算三个关节需要转动的角度。计算过程中限制每次角度变化,并检查结果是否到达目标。
当前原型面向三个转动关节组成的串联机构和固定工具点,对关节初始朝向也有限制。它计算的是末端需要到达的位置,还不处理末端朝向。
输出分别提供 input_valid 和 ik_valid,区分输入是否满足接收条件,以及当前目标是否得到有效的关节结果。输入有效但 IK 失败时,清空关节输出,并保留状态供上层判断。蓝图可以启动、停止实时处理,读取最新结果或订阅输出事件。
相关技术记录:机器人实时数据与三轴 IK 原型。
