一.官方文档链接
Development Tools — Omniverse IsaacSim latest documentationPython Environment — Omniverse IsaacSim latest documentation
场景设置:
Scene Setup — Omniverse IsaacSim latest documentation
机器人模拟:
Robot Simulation — Omniverse IsaacSim latest documentation
传感器设置:
https://docs.omniverse.nvidia.com/isaacsim/latest/how_to_guides/sensors_simulation.html
小车控制器设置:
Adding a Controller — Omniverse IsaacSim latest documentation
渲染:
https://docs.omniverse.nvidia.com/isaacsim/latest/how_to_guides/tutorial_advanced_live_data.html
随机化:
Replicator — Omniverse IsaacSim latest documentationRandomizer Examples — Omniverse Extensions latest documentation
二.随机化代码
VSCode 和 IsaacSim存在热连接,可以通过VSCode来直接在Isaac Sim上运行,具体连接方式查看官网说明文档。
2.1 模型载入
1.加载NVIDIA库中的模型
# 短草(绿色)
PROPS_GRASS = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Grass_Short_A.usd'
2.加载Isaac Sim中的基础图形,并赋予语义
# 添加立方体,并赋予语义
cube = rep.create.cube(semantics=[('class', 'cube')], position=(0,0,7), count=10)
3.添加地面,并给地面添加材质
GROUND_MATERIAL = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/materials/Pampas_grass_Mat.mdl'
ground = rep.create.plane(scale=50, visible=True, parent='/World') # 单位:m
with ground:
rep.randomizer.materials(GROUND_MATERIAL)
2.2 世界初始化,设置默认地面
if World.instance():
World.instance().clear_instance()
world=World()
await world.initialize_simulation_context_async()
world.scene.add_default_ground_plane(z_position=0)
-
1~2行:检查是否已经存在一个World实例。如果存在,则调用clear_instance()方法清除该实例。这确保了在创建新世界之前,没有遗留的旧世界实例。
-
3行:创建一个新的World实例,用于管理仿真环境中的各种元素和设置。
-
4行:异步初始化仿真上下文。initialize_simulation_context_async方法设置仿真环境,加载必要的资源和配置,使仿真准备就绪。
-
5行:地面位置为z=0
注意:这个步骤必须存在,否则场景将没有物理效果,即使已经做好了场景,后续手动添加了物理效果,小车加载后仍不能正常运行。
2.3模型设置
# 树
# 4.5m 树(绿色)
def get_tree(size):
instances_tree = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_TREE,recursive=True),size=size)
with instances_tree:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.013, 0.013, 0.013))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_tree.node
rep.randomizer.register(get_tree)
首先调用一开始加载的模型文件,对这个模型设定随机化的区域范围,倾角,缩放大小。
(在确定具体缩放数值和倾斜角度之前,需要先进行测试。因为从网上下载的模型大小并不统一,可能过小也可能过大,每一个模型都要具体测试后调整,缩放大小和倾斜角度并不统一。具体数值也和场景单位有关)
2.4 随机化
with rep.trigger.on_frame(num_frames=1):
rep.randomizer.get_tree(15) # 4.5m 树(绿色)
根据代码设置,tree模型将随机化1帧,在(-17, -17, 0), (17, 17, 0)的区域范围内生成15个相同的模型。
三.个人代码示例
import omni.replicator.core as rep
import omni.usd
import asyncio
import numpy as np
from omni.isaac.core.world import World
from omni.isaac.core.prims import RigidPrimView
from omni.isaac.core.objects import DynamicCuboid
# 头顶灯
# distance_light = rep.create.light(rotation=(315,0,0), intensity=3000, light_type="distant")
# <-----树木----->
# 4.5m 树(绿色)
PROPS_TREE = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Trees/Blue_Berry_Elder.usd'
# 18m 树(绿色)
TREE_BLACK_OAK = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Trees/Black_Oak.usd'
# <-----草----->
# 短草(绿色)
PROPS_GRASS = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Grass_Short_A.usd'
# 一簇较高的草(偏黄)太丑,反光,不使用
GRASS_03 = 'omniverse://localhost/model/some_/Realistics_grass_03/scene.usdc'
# 一簇杂乱的草(绿)太绿,和草地之间有很大违和感,不使用
GRASS_10 = 'omniverse://localhost/model/some_/realistics_grass_10/scene.usdc'
# 中间带石头的条状草地 未配置
ROCK_GRASS = 'omniverse://localhost/model/some_/Rocks_Grass_2/scene.usdc'
# <-----灌木----->
# 1.2m(高度到人类胸口) 灌木(绿色)
PROPS_SHRUB = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Holly.usd'
# <-----花朵----->
# 小花(白色)
PROPS_FLOWER = 'omniverse://localhost/model/some_/Margarita_flower/scene.usdc'
# 一簇小花(白色)
DAISIES_FLOWERS = 'omniverse://localhost/model/some_/Margarita_flower_bush/scene.usdc'
# <-----场景障碍物----->
# 木质公园椅(浅黄色)
PARK_BENCH = 'omniverse://localhost/model/some_/Park_Bench2/scene.usdc'
# 铁质公园椅(橙色)
PARK_BENCH_2 = 'omniverse://localhost/model/some_/Park_Bech_Low-poly/scene.usdc'
# 帐篷
TENT = 'omniverse://localhost/model/some_/Camping_tent/scene.usdc'
# 铁质秋千
SEESAW = 'omniverse://localhost/model/some_/Recreational_place_Play_Children_Seesaw/scene.usdc'
# 铁质滑梯
SLIDE = 'omniverse://localhost/model/some_/the_slide_Park_Play_Child/scene.usdc'
# 消防栓(红色)
FIRE_HYDRANT = 'omniverse://localhost/model/some_/Rusty_Fire_Hydrant/scene.usdc'
# 公园草地灯(下黑上白)
LIGHT = 'omniverse://localhost/Library/NVIDIA Package/Residential/Outdoors/Lighting/CircularBollard.usd'
# 木质箱(黄)
PILES = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Piles/'
# 货架和货物(蓝色框架,纸质箱子)
RACKS = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Racks/'
# 货架(蓝色框架)
SHELVES = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Shelves/'
# 栏杆(黄色)
RAILING = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Railing/'
# <-----材质----->
GROUND_MATERIAL = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/materials/Pampas_grass_Mat.mdl'
# cube = rep.create.cube(semantics=[('class', 'cube')], position=(0,0,7), count=10)
# ground = rep.create.plane(scale=50, visible=True, parent='/World') # 单位:m
# with ground:
# rep.randomizer.materials(GROUND_MATERIAL)
async def example():
if World.instance():
World.instance().clear_instance()
world=World()
await world.initialize_simulation_context_async()
# world.scene.add_default_ground_plane(z_position=-1.0)
world.scene.add_default_ground_plane(z_position=0)
# 树
# 4.5m 树(绿色)
def get_tree(size):
instances_tree = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_TREE, recursive=True), size=size)
with instances_tree:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.013, 0.013, 0.013))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_tree.node
rep.randomizer.register(get_tree)
# 18m 树(绿色)
def get_tree_02(size):
instances_tree_02 = rep.randomizer.instantiate(rep.utils.get_usd_files(TREE_BLACK_OAK, recursive=True), size=size)
with instances_tree_02:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.013, 0.013, 0.013))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_tree_02.node
rep.randomizer.register(get_tree_02)
# 草
# 短草(绿色)
def get_grass(size):
instances_grass = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
with instances_grass:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass.node
rep.randomizer.register(get_grass)
def get_grass_area1(size):
instances_grass_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
with instances_grass_area1:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_area1.node
rep.randomizer.register(get_grass_area1)
def get_grass_area2(size):
instances_grass_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
with instances_grass_area2:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
# position=rep.distribution.uniform((-17, 17, 0), (-2, 2, 0)),
position=rep.distribution.uniform((-17, 2, 0), (-2, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_area2.node
rep.randomizer.register(get_grass_area2)
def get_grass_area3(size):
instances_grass_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
with instances_grass_area3:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
# position=rep.distribution.uniform((17, -17, 0), (2, -2, 0)),
position=rep.distribution.uniform((2, -17, 0), (17, -2, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_area3.node
rep.randomizer.register(get_grass_area3)
def get_grass_area4(size):
instances_grass_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
with instances_grass_area4:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((2, 2, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_area4.node
rep.randomizer.register(get_grass_area4)
# 一簇较高的草(偏黄)
def get_grass_02(size):
instances_grass_02 = rep.randomizer.instantiate(rep.utils.get_usd_files(GRASS_03, recursive=True), size=size)
with instances_grass_02:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.001, 0.001, 0.001), (0.003, 0.003, 0.002))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_02.node
rep.randomizer.register(get_grass_02)
# 一簇杂乱的草(绿)
def get_grass_03(size):
instances_grass_03 = rep.randomizer.instantiate(rep.utils.get_usd_files(GRASS_10, recursive=True), size=size)
with instances_grass_03:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.001, 0.001, 0.001), (0.0025, 0.0025, 0.0015))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_grass_03.node
rep.randomizer.register(get_grass_03)
# 花
# 小花(白色)
def get_flower(size):
instance_files = rep.utils.get_usd_files(PROPS_FLOWER, recursive=True)
instances_flower = rep.randomizer.instantiate(instance_files, size=size)
with instances_flower:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((90, -35, -10), (90, 35, 10)),
# scale=rep.distribution.uniform((0.05, 0.05, 0.05), (0.15, 0.15, 0.15))
)
return instances_flower.node
rep.randomizer.register(get_flower)
# 一簇小花(白色)
def get_daisies_flower(size):
instances_daisies_flower = rep.randomizer.instantiate(rep.utils.get_usd_files(DAISIES_FLOWERS, recursive=True), size=size)
with instances_daisies_flower:
rep.modify.semantics([('class', 'grass')])
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, -3.05), (17, 17, -3)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.001, 0.001, 0.001), (0.001, 0.001, 0.001))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((90, -35, -10), (90, 35, 10)),
# scale=rep.distribution.uniform((0.05, 0.05, 0.05), (0.15, 0.15, 0.15))
)
return instances_daisies_flower.node
rep.randomizer.register(get_daisies_flower)
# 灌木
# 1.2m(高度到人类胸口) 灌木(绿色)
def get_shrub(size):
instances_shrub = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_SHRUB, recursive=True), size=size)
with instances_shrub:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, -90), (0, 0, 90)),
scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.008, 0.008, 0.008))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_shrub.node
rep.randomizer.register(get_shrub)
# 障碍物
# 木质公园椅(浅黄色)
def get_park_bench(size):
instances_park_bench = rep.randomizer.instantiate(rep.utils.get_usd_files(PARK_BENCH, recursive=True), size=size)
with instances_park_bench:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.002, 0.002, 0.002), (0.002, 0.002, 0.002))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_bench.node
rep.randomizer.register(get_park_bench)
# 铁质公园椅(橙色)
def get_park_bench_02(size):
instances_park_bench_02 = rep.randomizer.instantiate(rep.utils.get_usd_files(PARK_BENCH_2, recursive=True), size=size)
with instances_park_bench_02:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.018, 0.018, 0.018), (0.018, 0.018, 0.018))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_bench_02.node
rep.randomizer.register(get_park_bench_02)
# 帐篷
def get_park_tent(size):
instances_park_tent = rep.randomizer.instantiate(rep.utils.get_usd_files(TENT, recursive=True), size=size)
with instances_park_tent:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-12, -12, 0), (12, 12, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.01, 0.01, 0.01))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_tent.node
rep.randomizer.register(get_park_tent)
# 铁质秋千
def get_park_seesaw(size):
instances_park_seesaw = rep.randomizer.instantiate(rep.utils.get_usd_files(SEESAW, recursive=True), size=size)
with instances_park_seesaw:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 1), (17, 17, 1)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.008, 0.008, 0.008))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_seesaw.node
rep.randomizer.register(get_park_seesaw)
# 铁质滑梯
def get_park_slide(size):
instances_park_slide = rep.randomizer.instantiate(rep.utils.get_usd_files(SLIDE, recursive=True), size=size)
with instances_park_slide:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_slide.node
rep.randomizer.register(get_park_slide)
# 消防栓(红色)
def get_park_fire_hydrant(size):
instances_park_fire_hydrant = rep.randomizer.instantiate(rep.utils.get_usd_files(FIRE_HYDRANT, recursive=True), size=size)
with instances_park_fire_hydrant:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
scale=rep.distribution.uniform((0.002, 0.002, 0.002), (0.002, 0.002, 0.002))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_fire_hydrant.node
rep.randomizer.register(get_park_fire_hydrant)
# 公园草地灯(下黑上白)
def get_park_light(size):
instances_park_light = rep.randomizer.instantiate(rep.utils.get_usd_files(LIGHT, recursive=True), size=size)
with instances_park_light:
rep.modify.pose(
# 单位:m
position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
# 单位:cm
# position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
# rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
)
return instances_park_light.node
rep.randomizer.register(get_park_light)
# 木质箱(黄)
def get_piles(size):
instances_piles = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size, mode='point_instance')
with instances_piles:
rep.modify.pose(
position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
)
return instances_piles.node
rep.randomizer.register(get_piles)
# 货架和货物(蓝色框架,纸质箱子)
def get_racks(size):
instances_racks = rep.randomizer.instantiate(rep.utils.get_usd_files(RACKS, recursive=True), size=size, mode='point_instance')
with instances_racks:
rep.modify.pose(
position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
scale=rep.distribution.uniform((0.004, 0.004, 0.004), (0.004, 0.004, 0.004))
)
return instances_racks.node
rep.randomizer.register(get_racks)
# 货架(蓝色框架)
def get_shelves(size):
instances_shelves = rep.randomizer.instantiate(rep.utils.get_usd_files(SHELVES, recursive=True), size=size, mode='point_instance')
with instances_shelves:
rep.modify.pose(
position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
scale=rep.distribution.uniform((0.004, 0.004, 0.004), (0.004, 0.004, 0.004))
)
return instances_shelves.node
rep.randomizer.register(get_shelves)
# 栏杆(黄色)
def get_railing(size):
instances_railing = rep.randomizer.instantiate(rep.utils.get_usd_files(RAILING, recursive=True), size=size, mode='point_instance')
with instances_railing:
rep.modify.pose(
position=rep.distribution.uniform((-10, -5, 0), (-9, 5, 0)),
rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
)
return instances_railing.node
rep.randomizer.register(get_railing)
# 随机化 运行1帧
with rep.trigger.on_frame(num_frames=1):
# rep.randomizer.get_grass_02(20) # 一簇较高的草(绿色偏黄)不要用这个,太丑了不需要它了,后续删掉
rep.randomizer.get_tree(15) # 4.5m 树(绿色)
rep.randomizer.get_tree_02(1) # 18m 树(绿色)
rep.randomizer.get_grass(1200) # 短草(绿色)
rep.randomizer.get_grass_03(25) # 一簇杂乱的草(绿)
rep.randomizer.get_flower(400) # 小花(白色)
rep.randomizer.get_daisies_flower(50) # 一簇小花(白色)
rep.randomizer.get_shrub(10) # 1.2m(高度到人类胸口) 灌木(绿色)
rep.randomizer.get_park_bench(6) # 木质公园椅(浅黄色)
rep.randomizer.get_park_bench_02(6) # 铁质公园椅(橙色)
rep.randomizer.get_park_tent(2) # 帐篷
rep.randomizer.get_park_seesaw(4) # 铁质秋千
rep.randomizer.get_park_slide(4) # 铁质滑梯
rep.randomizer.get_park_fire_hydrant(10) # 消防栓(红色)
rep.randomizer.get_park_light(20) # 公园草地灯(下黑上白)
# rep.randomizer.get_piles(10) # 木质箱(黄)
# rep.randomizer.get_racks(5) # 货架和货物(蓝色框架,纸质箱子)
# rep.randomizer.get_shelves(5) # 货架(蓝色框架)
# rep.randomizer.get_railing(10) # 栏杆(黄色)
# 区域分化
# rep.randomizer.get_grass_area1(400) # 短草(绿色)
# rep.randomizer.get_grass_area2(400)
# rep.randomizer.get_grass_area3(400)
# rep.randomizer.get_grass_area4(400)
asyncio.ensure_future(example())