案例

项目展示与开发记录。

案例/UE项目

动捕与机器人控制

Motion capture and robot control

以动捕专用模型统一承接实时采集与录制动作,通过 URDF 结构适配和 IK 算法驱动机器人跟随。

  • 动作捕捉
  • 机器人控制
  • 骨骼重定向
  • 实时通信
联系合作

封面

返回
本页目录

项目介绍

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 原型。