🛸 浮动基#

Body 中,我们介绍了 Body 与 World 有三种连接方式,分别是:

  • 固定连接(Fixed)

  • 关节连接(Joint)

  • 自由移动(FloatingBase)

自由移动的 Body,我们认为它的基座是浮动的,因而它拥有一个浮动基(FloatingBase)对象。FloatingBase 拥有 3 位移自由度和 3 旋转自由度。 通过 floatingbase 对象,MotrixSim 提供了一些额外的功能和属性,允许用户更方便地控制和获取浮动基的状态。

当我们对机器狗、或者人形机器人进行仿真时,他们通常都拥有浮动基。

MJCF 映射#

在 MJCF 中,如果一个 <body> 元素下有 <freejoint> 元素,则 MotrixSim 会自动将其解析为一个浮动基(FloatingBase)对象。 关于 MJCF 中 <freejoint> 的介绍,请参考官方文档: freejoint

访问 FloatingBase#

一般来说,您可以通过以下方式访问 FloatingBase 对象:

# 获取 Body 对象
cube = model.get_body('free_cube')
fb = cube.floatingbase
if fb is not None:
    # This body has a floating base
    # call some methods or properties on fb
    print(fb.get_translation(data))  # get position in global frame
    print(fb.set_translation(data, [1.0, 2.0, 3.0]))  # set position in global frame

备注

FloatingBase 对象拥有普通的 Joint 没有的方法,例如它可以直接通过笛卡尔坐标系来设置位置、旋转、速度等,MotrixSim 会自动将参数从笛卡尔坐标系转换为广义坐标系,并更新到 data.dof_pos 以及 data.dof_vel 中。

需要注意的是,通过 floatingbase.set_translation 等方法设置位置、旋转、速度时,MotrixSim 只更新了 Data 中的 dof 数据, 对整个 link tree 的 kinematics 状态更新需要在用户调用motrixsim.step或者motrixsim.forward方法后才会进行

API Reference#

更多与 FloatingBase 相关的 API,请参考 FloatingBase API