Isaac Sim 7 使用Python随机生成环境

一.官方文档链接

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. 1~2行:检查是否已经存在一个World实例。如果存在,则调用clear_instance()方法清除该实例。这确保了在创建新世界之前,没有遗留的旧世界实例。

  2. 3行:创建一个新的World实例,用于管理仿真环境中的各种元素和设置。

  3. 4行:异步初始化仿真上下文。initialize_simulation_context_async方法设置仿真环境,加载必要的资源和配置,使仿真准备就绪。

  4. 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())

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值