iohannes
Published on 2025-05-23 / 5 Visits

mujoco 增加摄像头并获取图片

xml 添加cameral

<mujoco  model="your_model">
  <worldbody>
    <body  name="pelvis"  pos="0 0 1.05">
      <camera  name="depth_camera"  pos="0.1 0 0.3"  euler="1.5708 -1.5708 0"  mode="fixed"  fovy="110"/>
    </body>
  </worldbody>
</mujoco>
  • euler: x,y,z方向的欧拉角度
  • mode: fixed 固定到 body 上
  • fovy: 视野范围

获取摄像头图片

import  numpy  as  np
import  cv2

m  =  mujoco.MjModel.from_xml_path(xml_path)
d  =  mujoco.MjData(m)

renderer  =  mujoco.Renderer(m, 480, 640)
renderer.update_scene(d, camera=camera_id)
rgb_img  =  renderer.render()

renderer.enable_depth_rendering()
renderer.update_scene(d, camera=camera_id)
depth  =  renderer.render()
depth  -=  depth.min()
valid_depths  =  depth[depth  <  float('inf')]
if  len(valid_depths) >  0:
depth  /=  2  *  valid_depths.mean()
pixels  =  255  *  np.clip(depth, 0, 1)
depth_img  =  pixels.astype(np.uint8)
renderer.disable_depth_rendering()

cv2.namedWindow("H1 Cameras", cv2.WINDOW_AUTOSIZE  |  cv2.WINDOW_GUI_NORMAL)
cv2.moveWindow("H1 Cameras", 1100, 0)
cv2.imshow("H1 Cameras", rgb_img)
cv2.waitKey(1)