GPT5.1-Cursor

先给你一个直白结论:
Articulation 里,self.poseself.qpos 完全不是一回事。

可以用“人”来打个比方:

  • self.pose:整个人在房间里的姿势

    • 比如:人站在房间的哪一个位置(x, y, z),
    • 身体朝向哪边、是站着还是倒着(用四元数/旋转表示)。
    • 在代码里,pose 对应的是整台机器人根部(base)的位姿,就是“机器人整体在世界坐标系里的位置 + 朝向”。
  • self.qpos:身上每个关节的角度

    • 比如:你的肩关节弯了多少度、肘关节弯了多少度、膝盖弯了多少度……
    • 这些一长串“关节角度/滑动量”放在一起,就形成一个向量:
      qpos=[q1,q2,q3,… ] qpos = [q_1, q_2, q_3, \dots] qpos=[q1,q2,q3,]
    • 在代码里,qpos 就是机器人各个关节(joint)的“位置参数”集合(关节角度、伸缩量等)。

再对应到 this codebase 的实现:

  • self.pose(实际上是 root_pose 的别名):

    @property
    def pose(self) -> Pose:
        return self.root_pose
    

    表示 root link 的 Pose(位置 + 方向),是“整体放在世界里的姿态”。

  • self.qpos

    @property
    def qpos(self):
        # 返回形状大概是 (N, max_dof) 的张量
    

    表示 所有关节的配置,也就是“内部关节怎么弯、怎么伸”的状态。

所以你可以这样记:

  • pose = whole-body pose → 机器人整体在世界里的姿势(相当于人站在屋子里的位置和朝向)。
  • qpos = joint positions → 机器人每个关节的角度/位移(相当于你的胳膊腿各个关节弯曲多少)。

它们一个管“整体放哪儿、朝哪儿”,一个管“关节怎么摆”,不一样,但一起决定了机器人在空间里的具体样子。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐