Iohannes
发布于 2025-02-08 / 3 阅读 / 0 评论 / 0 点赞

mujoco的nu、nq、nv

model.nu

模型中控制输入(actuator)的数量,用于定义动作空间

model.nq

模型中广义坐标(generalized coordinates)的数量,描述系统的位形

  • 对于简单的关节(如旋转关节),nq 通常等于关节的数量
  • 对于更复杂的关节(如自由关节,free joint),nq 可能会更大,因为自由关节需要6个自由度(3个平移 + 3个旋转)

model.nv

模型中广义速度(generalized velocities)的数量,描述系统的速度

  • 对于大多数关节,nv 等于 nq
  • 对于自由关节(free joint),nv = 6(3个平移速度 + 3个旋转速度)
import mujoco
import mujoco_viewer

# 加载模型
model = mujoco.MjModel.from_xml_path('go2.xml')
data = mujoco.MjData(model)

# 打印模型属性
print("Number of actuators (model.nu):", model.nu)
print("Number of generalized coordinates (model.nq):", model.nq)
print("Number of generalized velocities (model.nv):", model.nv)

# 初始化仿真
viewer = mujoco_viewer.MujocoViewer(model, data)

for _ in range(1000):
    # 设置控制输入(随机动作)
    data.ctrl[:] = np.random.uniform(-1, 1, size=model.nu)
    
    # 步进仿真
    mujoco.mj_step(model, data)
    
    # 获取当前状态
    qpos = data.qpos  # 广义坐标
    qvel = data.qvel  # 广义速度
    print("qpos:", qpos)
    print("qvel:", qvel)
    
    # 渲染
    viewer.render()

viewer.close()

评论