Mujoco学习记录
1. 可视化
- 设置手动控制仿真
1.手动调用mj_step推进仿真
2.调用sync()更新视图
3.循环上述过程# 获得viewer所有控制接口的对象
self.handle = mujoco.viewer.launch_passive(self.model, self.data)# 检查 viewer 是否仍在运行
while self.is_running():mujoco.mj_forward(self.model, self.data) # 计算动力学mujoco.mj_step(self.model, self.data) # 手动推进仿真一步self.sync() # 同步视图time.sleep(self.model.opt.timestep) # # 控制仿真速度
- 获取body的id,id是按照body的顺序
mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_BODY, 'right_finger')
- 通过id获取空间坐标系位置和位姿
end_effector_pos = self.data.body(self.end_effector_id).xpos,self.data.body(self.end_effector_id).xquat
2. 场景渲染参数
cam = mujoco.MjvCamera() # 创建MjvCamera对象,用于存储相机的参数opt = mujoco.MjvOption() # 创建MjvOption对象,用于配置渲染选项(是否显示关节、碰撞体、力线等)mujoco.mjv_defaultCamera(cam) # 为相机对象cam设置默认参数mujoco.mjv_defaultOption(opt) # 为渲染选项opt设置默认值pert = mujoco.MjvPerturb() # 创建MjvPerturb对象,用于处理用户与仿真场景的交互(鼠标拖动物体、施加外力等)con = mujoco.MjrContext(model, mujoco.mjtFontScale.mjFONTSCALE_150.value) # 创建一个MjrContext对象,设置缩放比例scene = mujoco.MjvScene(model, maxgeom=10000) # 指定场景可容纳的最大几何元素数量# 更新渲染场景viewport = mujoco.MjrRect(0, 0, 1200, 900) # 创建一个视口对象,定义渲染窗口的尺寸和位置mujoco.mjv_updateScene(model, data, opt, pert, cam, mujoco.mjtCatBit.mjCAT_ALL.value, scene) # 更新场景渲染数据mujoco.mjr_render(viewport, scene, con) # 将更新后的场景数据渲染到屏幕上,生成可视化图像
- 关节角度
data.qpos[:7] = new_q
mj_forward的作用:更新data全局参数,例如下面的复制qpos,mj_forward会更新xpos位置
data.qpos[:7] = new_q
print("data1",data.xpos)
mujoco.mj_forward(model, data)
print("data",data.xpos)