robosuite添加无碰撞的模型

1 前言

最近在使用robosuite时,需要在仿真环境中可视化物体的目标位置,从而方便观察训练情况,可视化的物体有以下要求:

  1. 形状尺寸与操作的物体一样
  2. 半透明
  3. 只有visual,不与场景其他物体有碰撞
  4. 可以在每次step后设置位置,且固定在设定的位置,不受重力影响

2 方法

找了半天,最终确定了基本思路:

  1. 在环境reset时,初始化一个与操作物体的形状尺寸一样的物体,可以加在xml模型,或通过robosuite内置的模型API,设置模型只有visual,颜色半透明.
  2. 在任务每次step时,设置物体的位置

以下代码只用于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

3 可视化结果

在这里插入图片描述图中,桌子上的红色木纹方块是cube,更高的半透明红色方块是cube_target.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值