何时使用
实时逆向运动学解算对 CPU 消耗较高。若采集阶段仅需记录原始数据、之后再离线分析,无需全程运行实时解算。原始数据转换适合:- 采集时只订阅轻量的
emf_poses和原始 IMU,降低 CPU 占用 - 事后再决定需要哪些后处理产物
- 用任意自选格式保存原始数据,不绑定特定文件格式
工作流
- 在线采集:只订阅
emf_poses和原始 IMU 数据 - 保存:用任意格式保存原始数据帧
- 离线复算:用
WujiGlove.offline_pipeline()把保存的帧复算成后处理产物
离线复算与在线实时计算结果一致:相同的输入加相同的标定,得到相同的输出。
创建离线 pipeline
WujiGlove.offline_pipeline() 创建一条不依赖真实设备连接的 pipeline。
pipeline 创建后可查询实际使用的标定来源:
URDF 查找顺序
手部产物依赖标定的手部模型。pipeline 按以下规则确定 URDF:- 显式
urdf_path:传入时直接使用该文件,优先于其他所有来源。文件无法读取时直接抛错,不回退 - 托管模型:未传
urdf_path时,检查calibration.hand_model_path是否指向 SDK 托管目录之外的文件。是则使用该自定义文件,否则使用当前 SDK 用户对应左右手的稳定文件left_hand.urdf/right_hand.urdf。两者是二选一,不互为回退 - 内置默认模型:上一步选中的文件不存在或不可用时,回退到内置默认 URDF,并打印 warning
复算手部产物
手部链以emf_poses 帧为输入,复算出三种产物。三者共享同一次解算,结果与在线一致。
产物的完整字段定义见 SDK 资源。
复算 IMU 融合
IMU 链以原始 IMU 帧为输入,复算出融合姿态。手套手背 IMU 用imu_data_palm()。
ImuData.raw() 构造,orientation_covariance[0] 自动标记为 -1(未融合)。IMU 融合产物不依赖标定 URDF。
构造输入帧
用 schema 构造器在内存中构造输入帧:examples/3.offline_pipeline.py。