最近在使用robosuite时,需要在仿真环境中可视化物体的目标位置,从而方便观察训练情况,可视化的物体有以下要求:
找了半天,最终确定了基本思路:
以下代码只用于robosuite中,原始mujoco不可用:
(1) 初始化物体并载入任务仿真场景
# 初始化操作物体
self.cube = BoxObject(name="cube",density=100,size_min=[0.03, 0.03, 0.03],size_max=[0.06, 0.06, 0.06],rgba=[1, 0, 0, 1],material=redwood,
)
# 初始化仅可视化的目标物体
self.cube_target = BoxObject(name="cube_target",size=self.cube.size,rgba=[1, 0, 0, 0.5],obj_type='visual',joints=None,
)
...
self.model = ManipulationTask(mujoco_arena=mujoco_arena,mujoco_robots=[robot.robot_model for robot in self.robots],mujoco_objects=[self.cube, self.cube_target],
)
(2) 在任务每次step时,设置物体的位置
cube_target_id = self.env.sim.model.body_name2id('cube_target_main') # 获取仅可视化的目标物体的id
self.env.sim.model.body_pos[cube_target_id] = np.array([0, 0, 1]) # 设置新位置
self.env.sim.model.body_quat[cube_target_id] = np.array([1, 0, 0, 0]) # 设置新四元数 wxyz
图中,桌子上的红色木纹方块是cube,更高的半透明红色方块是cube_target.
下一篇:单点登录的几种实现方式探讨