ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ManiSkill 遥操作数据采集完全指南:从 Click+Drag 交互到演示轨迹落盘

ManiSkill 遥操作数据采集完全指南:从 Click+Drag 交互到演示轨迹落盘 ManiSkill 遥操作数据采集完全指南从 ClickDrag 交互到演示轨迹落盘【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill导读本指南围绕 ManiSkill 仓库中的遥操作Teleoperation数据采集工具展开核心讲解其开箱即用的ClickDrag点击拖拽遥操作系统读者将掌握如何启动交互界面、通过鼠标拖拽机械臂末端并配合键盘生成运动规划轨迹、采集并保存演示demonstration数据的完整操作流程同时深入理解其底层实现——基于 mplib 的运动规划求解器与RecordEpisode轨迹记录包装器的调用关系。该工具是 ManiSkill 数据收集体系motion planning、teleoperation 等的重要组成部分适用于为模仿学习、强化学习准备高质量的专家演示数据集。一、ManiSkill 遥操作在数据收集体系中的定位ManiSkill 提供了多种收集演示数据的工具包括程序化运动规划方案motion planning以及本指南重点讲解的遥操作系统teleoperation。这些工具有一个共同点都通过RecordEpisode包装器wrapper在动作执行过程中记录轨迹和/或视频并以.h5数据文件保存见 data_collection/index.md。加载这些特殊格式.h5文件的方法可参考 datasets/index.md。在 ManiSkill 仓库中遥操作相关的可执行脚本位于mani_skill/examples/teleoperation/目录下官方文档teleoperation.md明确指出当前主要提供直观的 ClickDrag 系统而基于 SpaceMouse 空间鼠标、VR 头显等设备的相关系统仍在规划中。二、ClickDrag 系统特性评估与适用场景官方文档对 ClickDrag 系统给出了明确的特性定位维度说明硬件需求显示器Display、鼠标、键盘易用性极易上手能够高效生成细粒度fine-grained的演示局限性仅适合求解低动态性less dynamical任务且使用二指夹爪two-finger gripper的机器人如抓取方块抛掷方块throwing这类高动态任务无法完成从源码结构看这套系统本质上是一个「人机协同的交互式运动规划」人类负责指定目标位姿位置与姿态机器人负责通过运动规划平滑地执行到位从而规避了纯手动逐帧遥控的繁琐与不稳定。三、快速启动从命令行运行遥操作界面3.1 启动命令官方文档给出的标准启动方式为python -m mani_skill.examples.teleoperation.interactive_panda -e StackCube-v1其中-e用于指定任务environmentID上述命令以StackCube-v1为例。运行后即会弹出 SAPIEN 3D 查看器窗口并显示带夹具的 Panda 机械臂及任务场景。3.2 命令行参数详解对照源码 interactive_panda.py 中的Args数据类基于 tyro 解析三个遥操作脚本共享如下参数体系参数别名默认值说明--env-id-ePickCube-v1要运行的任务 ID--obs-mode—none观测模式遥操作采集时默认无需观测--robot-uid-rpanda使用的机器人panda 脚本支持panda与panda_stick--record-dir—demos演示数据及可选视频的保存根目录--save-video—False采集完成后是否生成演示视频--viewer-shader—rt-fast查看器渲染 shaderdefault为快速但低质量rt/rt-fast为光线追踪 shader--video-saving-shader—rt-fast生成视频时的渲染 shaderminimal为快速 shader三个脚本的启动入口分别为# Panda 机械臂支持 panda / panda_stick / panda_wristcam python -m mani_skill.examples.teleoperation.interactive_panda -e StackCube-v1 # SO-100 双臂/单臂机械臂 python -m mani_skill.examples.teleoperation.interactive_so100 -e StackCube-v1 # XArm6 Robotiq 夹爪 python -m mani_skill.examples.teleoperation.interactive_xarm6 -e StackCube-v1对应实现位于 interactive_so100.py 与 interactive_xarm6.py。3.3 环境初始化的关键配置以 Panda 脚本为例环境创建时固定使用control_modepd_joint_pos关节位置 PD 控制、reward_modenone并开启阴影与光线追踪查看器源码第 42–51 行。需要说明的是遥操作求解函数solve()内部断言控制模式必须为pd_joint_pos或pd_joint_pos_vel这是运动规划器回放关节轨迹的前提。四、交互操作全流程与快捷键速查4.1 核心交互逻辑启动后系统呈现一套「拖拽 确认执行」的工作流拖拽末端位姿直接用鼠标拖动机械臂末端的变换 gizmo幽灵手柄可任意调整目标位置与旋转角度。源码中通过 SAPIEN 查看器的TransformWindow插件transform_window实现并调用select_panda_hand()预先选中panda_handlink 对应的实体interactive_panda.py 第 155–160 行。按n生成轨迹触发运动规划机器人沿规划路径移动到幽灵臂指示的目标位姿同时系统会打印当前任务是否成功求解reward/info等信息。按c结束当前轨迹保存上一段轨迹并进入新的 episode。按q退出保存全部轨迹数据随后若开启--save-video生成演示视频。4.2 键盘快捷键速查表以下快捷键对照源码中的帮助菜单第 170–180 行整理按键功能h打印帮助菜单列出所有可用命令g切换夹爪开/合仅当机器人有夹爪时生效u将机械臂末端沿 z 轴向上移动 1cmj将机械臂末端沿 z 轴向下移动 1cm↑/↓沿 x 轴前后移动末端每次 1cm←/→沿 y 轴左右移动末端每次 1cmn通过运动规划执行当前幽灵臂位姿生成并跟随轨迹c结束当前 episode保存轨迹并进入新 episodeq退出脚本停止采集并保存轨迹及可选视频箭头键/u/j的 1cm 步进通过transform_window.gizmo_matrix与sapien.Pose(p[0, 0, ±0.01])组合实现源码第 211–234 行为拖拽提供精细微调能力。4.3 轨迹执行细节与失败处理按n后代码先调用planner.move_to_pose_with_screw(target_pose, dry_runTrue)做干跑dry-run规划只有规划成功且轨迹点数少于 150 步时才会真正执行planner.follow_path(result)Panda 脚本第 235–247 行。当目标位姿的 z 偏移量超出机械臂可达范围、规划失败或轨迹过长时会分别打印Plan failed或Generated motion plan was too long. Try a closer sub-goal提示用户调整目标后重试。这一设计保证了交互过程的安全性与稳定性。此外Panda 与 XArm6 脚本中目标位姿到工具中心点TCP的 z 偏移0.1m / 0.15m是针对具体机器人在源码中硬编码的panda_stick使用 0.15mSO-100 则基于fixed_jaw_tip_position与_so_100_grasp_pose_tcp_transform计算 TCP 目标。五、底层实现原理mplib 运动规划 交互式视图5.1 运动规划求解器ClickDrag 系统的核心执行引擎是 ManiSkill 自带的运动规划求解器以 Panda 为例使用PandaArmMotionPlanningSolvermotionplanner.py它继承自TwoFingerGripperMotionPlanningSolvertwo_finger_gripper/motionplanner.py最终基于开源运动规划库 mplib 实现。ManiSkill 安装时会一并安装 mplib无需额外配置详见 motionplanning.md。构造求解器时传入的关键参数包括base_pose机器人基座位姿当前取env.agent.robot.posevisualize_target_grasp_poseFalse关闭目标抓取位姿可视化joint_vel_limits0.5/joint_acc_limits0.5关节速度/加速度限制用于生成平滑轨迹print_env_infoFalse静默执行减少刷屏。5.2 从目标位姿到执行的调用链完整调用链可归纳为鼠标拖拽 gizmo → transform_window._gizmo_pose ↓ 加 TCP 偏移 move_to_pose_with_screw(target_pose, dry_runTrue) # mplib 螺旋路径规划干跑 ↓ follow_path(result) # 逐步下发关节目标并 env.step(action) ↓ RecordEpisode 包装器逐帧记录轨迹/视频其中follow_path在TwoFingerGripperMotionPlanningSolver中实现对规划出的每个路径点构造动作向量[qpos, gripper_state]pd_joint_pos模式或[qpos, qvel, gripper_state]pd_joint_pos_vel模式依次调用env.step(action)驱动仿真。夹爪开合动作open_gripper()/close_gripper()则在保持当前关节位置的同时将夹爪指令设为1开或-1关持续 6 个仿真步。5.3 交互式查看器env.render_human()打开 SAPIEN 人类查看器窗口配合TransformWindow插件显示半透明的幽灵臂与 gizmo直观呈现目标位姿。任务状态是否成功通过planner.follow_path返回的info实时打印方便操作者判断当前演示是否有效。六、轨迹数据如何落盘RecordEpisode 与 HDF5 格式6.1 保存路径与双文件结构遥操作脚本通过RecordEpisode包装器record.py记录数据输出目录拼接规则为demos/env_id/teleop/即默认--record-dirdemos下按任务 ID 分子目录。退出时脚本会打印Trajectories saved to h5_file_path。数据由两个同名文件组成.h5文件存放实际数组数据trajectory.h5默认轨迹名trajectory.json文件存放元数据trajectory.json包括env_info含env_id、env_kwargs、max_episode_steps用于重建环境、episodes列表含episode_id、reset_kwargs、control_mode、elapsed_steps等、以及source_type/source_desc。遥操作脚本特意在包装器中写入source_typeteleoperation、source_descteleoperation via the clickdrag system用于标记演示数据的来源ManiSkill 官方数据集通常会标注human、motionplanning或rl。6.2 HDF5 轨迹内容每个 episode 对应 HDF5 中的一个traj_{episode_id}分组如traj_0包含actions[T, A]的 float32 数组T 为转移步数terminated/truncated[T]的 bool 数组env_states[T1, D]的环境状态序列可通过env.set_state_dict恢复任意时刻状态success/fail可选任务成功/失败标志obs可选观测数据视obs_mode而定。env_states以「字典的列表」形式存储可通过mani_skill.trajectory.utils中的dict_to_list_of_dicts/index_dict工具trajectory/utils/init.py按时间步索引取回。脚本退出时还会调用clean_trajectories对轨迹重命名并按空动作裁剪保证traj_编号连续。6.3 视频生成若指定--save-video脚本会在采集结束后重建环境此时使用human_render_camera_configs指定的video_saving_shader依次读取每条轨迹的reset_kwargs与env_states恢复初始状态然后重放动作序列并以 30 FPSvideo_fps30渲染成 mp4输出到同一目录。若不想等待视频渲染完成可在渲染阶段按CtrlC中断脚本。6.4 轨迹的后续利用遥操作采集得到的原始轨迹通常不包含观测与奖励以节省空间且动作仅覆盖pd_joint_pos控制模式。因此官方推荐使用 replay_trajectory 工具进行回放、转换与控制模式迁移例如将演示转为pd_joint_delta_pos/pd_ee_delta_pose等更易学习的模式或补充 RGB 观测与归一化稠密奖励--record-rewards --reward-mode normalized_dense -o rgb --use-env-states。由于遥操作常在 CPU 仿真中采集而训练常用 GPU 仿真可借助--use-first-env-state -b physx_cuda在 GPU 仿真中重放并筛选成功的演示。七、VR 遥操作系统与社区项目官方文档说明目前 ManiSkill 主仓库暂无内置 VR 遥操作方案原因是单功能引入的复杂度与额外依赖过高社区已有若干基于 VR 的遥操作项目可供参考详见 community_projects.mdImVRImmersive VR Teleoperation System for General Purpose Manipulation基于本地连接/ALVR 的遥操作方案Maniskill Quest Teleop基于 WebXR 的遥操作方案。此外demos/gallery.md 提到基于 Meta Quest 3 的双臂五指灵巧手遥操作方案可实现 60Hz 的 4K 立体视频流但该集成方案仍在清理与开源准备中尚未在仓库中正式发布。八、使用建议与已知限制结合官方文档与源码使用 ClickDrag 遥操作系统时应注意任务选择优先选择低动态性、二指夹爪可完成的操纵任务如 PickCube、StackCube 系列抛掷、高速动态任务不在适用范围。机器人适配目前开箱即用支持 Panda含panda_stick、panda_wristcam、SO-100 与 XArm6 Robotiq 三种机器人灵巧手等其他构型需自行扩展求解器。运动规划失败处理规划失败或轨迹过长时系统会打印提示应缩小目标位姿移动幅度或分多次下达子目标。数据一致性采集时固定使用pd_joint_pos控制模式若需其他控制模式的演示请使用回放工具转换。仿真后端遥操作脚本默认在 CPU 仿真单线程、灵活、便于交互中运行若需 GPU 仿真数据请按上文回放流程迁移。总而言之ClickDrag 遥操作系统以极低的硬件门槛显示器 鼠标 键盘和直观的交互方式为 ManiSkill 用户提供了一条快速采集高质量专家演示的路径其「人类定目标、规划器执行」的设计也让它成为理解 mplib 运动规划与RecordEpisode轨迹记录机制的绝佳学习范例。【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表