尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ManiSkill 腕部相机实战:panda_wristcam 完全指南,从第一视角到 11 种控制模式的正确选择

ManiSkill 腕部相机实战:panda_wristcam 完全指南,从第一视角到 11 种控制模式的正确选择 ManiSkill 腕部相机实战panda_wristcam 完全指南从第一视角到 11 种控制模式的正确选择【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkillManiSkill 是一款基于 GPU 并行仿真的开源机器人操作Manipulation框架与基准测试库。panda_wristcam是其中自带腕部相机的 Franka Emika Panda 变体9 自由度、11 种控制模式、多个内置任务的默认或唯选机器人。本文带你 30 秒跑通它并讲清腕部相机怎么挂、参数怎么改、控制模式怎么选。做抓取任务时你大概率撞过同一个墙头顶相机拍得到全景但夹爪一旦凑近目标物恰恰是最需要看清的那几厘米它反而被挡得最死。真实机器人怎么解决给夹爪再装一双眼睛。ManiSkill 直接把这套配置打包成了一个开箱即用的机器人 ——panda_wristcam一个把真实 Sense 相机挂在 Panda 腕部的变体加载时只传一个字符串就行。下面我们会先跑通它再拆开讲清那台腕部相机、11 种控制模式的取舍以及双机器人协作这类进阶场景。 30 秒上手一行字符串加载腕部相机版 Panda你不需要 import 任何类。panda_wristcam通过register_agent()注册进了全局的REGISTERED_AGENTS字典见 registration.py所以gym.make时直接传字符串robot_uidspanda_wristcam即可import mani_skill.envs # 触发任务注册 import gymnasium as gym env gym.make( StackCube-v1, robot_uidspanda_wristcam, # 关键字符串即机器人无需 import 类 obs_modergb, # 请求视觉观测图像将由腕部相机 hand_camera 输出 render_modesensors, # 用传感器相机渲染 control_modepd_ee_delta_pose, ) obs, _ env.reset() # 观测字典里能找到 hand_camera/ 前缀的键如 hand_camera/rgb action env.action_space.sample() obs, rew, term, trunc, info env.step(action)跑通之后你会发现这个机器人和普通的panda在操作手感上几乎没有区别 —— 这正是 ManiSkill 机器人体系的设计意图继承基类 增量扩展。 先弄清你在驱动什么9 个自由度三行代码的差异panda_wristcam的实现类PandaWristCam直接继承自Panda整个文件只有三处覆盖panda_wristcam.py覆盖项值作用uidpanda_wristcam注册名gym.make时用它加载urdf_pathpanda_v3.urdf比普通panda的panda_v2.urdf多出一个camera_link_sensor_configs一个CameraConfig声明腕部相机hand_camera除此之外动力学参数、关节定义、全部控制器都原封不动来自基类 Panda。它的 9 个自由度构成非常直接7 个手臂关节panda_joint1~panda_joint72 个手指关节panda_finger_joint1、panda_finger_joint2末端坐标系panda_hand_tcp位姿控制的目标 link。基类还预置了一个restkeyframe对应 9 维 qpos[0, π/8, 0, -5π/8, 0, 3π/4, π/4, 0.04, 0.04]文档生成脚本渲染机器人预览图时用的就是它。两个实用 API 也值得记住is_grasping(object, min_force0.5, max_angle85)通过左右手指的成对接触力判断抓取是否成立is_static(threshold0.2)用关节速度判断机械臂是否静止。上图是文档生成脚本在空环境中渲染的视觉网格前视图腕部相机的camera_link就位于夹爪上方。 腕部相机拆解配置项逐个问为什么hand_camera是它与普通 Panda 唯一的本质区别。核心配置就一段CameraConfig我们按配置项 → 为什么这么设 → 什么时候该改过一遍问相机到底挂在哪mountself.robot.links_map[camera_link]。相机挂在 URDF 的camera_link上全局位姿 mount.pose * local_pose而pose给了单位四元数 零平移意味着零偏移、贴着 link 走。因为挂载对象是 Link相机会天然跟随末端执行器运动这才是腕部视角的含义。作为对照如果mount为None相机就是一个世界系固定相机分支逻辑在 camera.py 的Camera.__init__里。问分辨率为什么只有 128×128这是 GPU 并行仿真下的默认取舍。CameraConfig默认shader_packminimal渲染最快、显存占用最小的着色器128px 90° 视场角对看清目标物这种近景策略通常够用真正跑视觉策略时你大概率会把它拉大 —— 不用改源码后面会讲。参数默认值说明width/height128×128图像分辨率按需可调fovnp.pi / 290°垂直视场角与intrinsic二选一源码里有断言near/far0.01/100裁剪面米近裁 1cm 保证夹爪指尖不穿帮shader_packminimal也可选default或rt实时全局光照渲染成本高问它能吐什么观测Camera.get_obs支持rgb、depth、position点云、segmentation、normal、albedo六种模态实际输出哪些由环境的obs_mode决定观测键名以uid为前缀即hand_camera/rgb、hand_camera/depth这类。问想改分辨率或换着色器要动机器人源码吗不用。ManiSkill 在 camera.py 里提供了update_sensor_configs_from_dict你在gym.make时传一个sensor_configs字典就能整体覆盖相机参数env gym.make( PickCube-v1, robot_uidspanda_wristcam, sensor_configs{ # 不带相机名的键应用到所有相机 width: 256, height: 256, # 以相机 uid 为键只改 hand_camera 自己 hand_camera: {shader_pack: default}, }, )甚至可以在字典里加use_stereo_depth: True单目相机会被直接转换成SterioDepthCameraConfig—— 不对是StereoDepthCameraConfig双目深度相机零代码改动。 11 种控制模式别背表按你要让机器人做什么选PandaWristCam没有覆写_controller_configs所以它完整继承基类的 11 种手臂 夹爪组合控制器CombinedController机制见 base_agent.py。手臂参数统一为stiffness1e3、damping1e2、force_limit100夹爪参数相同。选型其实就看三个问题1️⃣ 你想直接命令关节还是命令末端你的目标推荐模式要点快速搭 baseline不想管运动学pd_joint_delta_pos默认关节增量 ±0.1 rad动作已归一化有明确的目标关节角pd_joint_pos关节绝对位置不归一化动作范围不受 ±1 限制想让策略在空间里思考IK 交给库pd_ee_delta_pos/pd_ee_delta_pose末端位置或位置轴角旋转增量 ±0.1控制器内部做逆运动学有绝对末端位姿目标如遥操作回放pd_ee_poseuse_deltaFalse±2.0 范围绝对控制跑 MPC需要目标和当前两套量pd_joint_target_delta_pos、pd_ee_target_delta_pos、pd_ee_target_delta_pose在上述基础上开启use_target2️⃣ 你想要速度级控制吗pd_joint_vel±1.0、pd_joint_pos_vel、pd_joint_delta_pos_vel三种直接操作速度。源码注释里明确提示这几类需谨慎使用——PDJointVelControllerConfig的阻尼需要单独调参不是拿来即用的。3️⃣ 夹爪怎么控制11 种模式里夹爪全部固定为pd_joint_posmimic镜像约束右手指跟随左手指你只需给 1 维开合量。细节上lower-0.01是个刻意的小技巧允许虚位夹持薄片物体时也能维持夹持力。运行时切换很简单gym.make时传control_mode...或env.agent.set_control_mode(...)当前模式用env.agent.control_mode查看。默认取配置字典的第一个键即pd_joint_delta_pos。 进阶实战从唯选机器人到双机器人协作panda_wristcam在内置任务里绝对不是配角分三档看均位于 mani_skill/envs/tasks/tabletop/只认它的任务plug_charger.py、peg_insertion_side.py、assembling_kits.py的SUPPORTED_ROBOTS [panda_wristcam]。充电、侧向插销、套件装配 —— 全是需要凑近目标后决策的手眼协调场景固定相机帮不上忙默认就是它的任务stack_cube.py、stack_pyramid.py、turn_faucet.py、pick_single_ycb.py默认robot_uidspanda_wristcam且带robot_init_qpos_noise0.02的初始位形噪声做轻量域随机化。这几个任务同时接受panda/fetch替换双机器人协作two_robot_pick_cube.py与two_robot_stack_cube.py使用SUPPORTED_ROBOTS [(panda_wristcam, panda_wristcam)]—— 同一场景加载两台带腕部相机的 Panda 分别抓同一个/不同的方块。加载方式就是把robot_uids传成元组env gym.make(TwoRobotPickCube-v1, robot_uids(panda_wristcam, panda_wristcam))遥操作侧同样无缝interactive_panda.py 的键位控制逻辑显式兼容panda与panda_wristcam两类机器人同一套操作接口直接共享。️ 自定义换个挂载点、拉高分辨率都不用动框架想做一个相机装在手指侧面或256px rt 渲染的变体标准姿势还是继承新建类继承Panda或PandaWristCam改一个新的uid覆写urdf_path指向含所需 link 的 URDF和_sensor_configs把CameraConfig的mount换成目标 link、分辨率/shader_pack按需调整加上register_agent()装饰器gym.make立即可用。注意文档侧的同步每个机器人页面如 docs/source/robots/panda_wristcam/index.md头部都注明由 docs/generate_robot_docs.py 自动生成、不要手工修改。脚本会遍历所有已注册 Agent读取 docs/metadata/robot.json 里的显示名与质量评级在空环境按首个 keyframe 渲染前后视图截图最终拼出index.md。新增机器人时记得在robot.json里补一条元数据。⚠️ 避坑质量评级 A 不等于开箱即用ManiSkill 沿用了 Mujoco Menagerie 的机器人质量评级体系详见 docs/source/robots/index.md评级含义A参数经系统辨识system identification得到A参数真实合理但尚未正式辨识 ——panda_wristcam在这一档B仿真稳定但部分参数不真实C条件稳定可显著改进框架只收录能稳定仿真的机器人A 级意味着日常仿真研究可放心用但官方同时明确建议即使 A/A做 sim2real 迁移前也请针对你的实物自行做参数辨识因为每台实机都可能有偏差。上图是同一机器人的碰撞网格侧视图绿色为凸分解网格蓝色为球/盒/胶囊等基础形状用于仿真中的接触检测视觉网格只负责渲染。参考与延伸阅读实现源码panda_wristcam.py、panda.py相机配置与挂载逻辑mani_skill/sensors/camera.py机器人基类与组合控制器mani_skill/agents/base_agent.py注册机制mani_skill/agents/registration.py机器人文档页docs/source/robots/panda_wristcam/index.md、机器人总览与评级说明任务示例stack_cube.py、peg_insertion_side.py、two_robot_pick_cube.py遥操作示例interactive_panda.py文档生成脚本与元数据docs/generate_robot_docs.py、docs/metadata/robot.json【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表