Isaac Sim 利用Python实现虚拟现实仿真,并输出语义数据全流程

        在 Isaac Sim 中,使用 Python 实现虚拟现实的仿真,并输出语义分割等数据,可以应用于ai模型训练等场景。注:我打算将传感器发布Ros话题的部分放到小车中。控制一个物体,对这个物体的状态发布imu等,觉得这样比较实际一点。

        主要分为以下几个步骤点:
        1.确定使用的模型文件,做好分类,写明调用路径。

        2.对场景Stage做初步的设置,比如设定单位m或cm,重力的大小及方向,对场景添加物理等。

        3.camera的角度设置,这是获取语义数据和rgb等数据的相机角度,多方位,全方面,不这样做的话图片数据相似度太高了。

        4.对每个模型进行大小,缩放,角度等精细设置。

        5.设置随机化帧数等。

        6.设置获取的渲染图像的大小和类别,输出路径。

        目前 Isaac Sim 的使用过程中遇到的Bug们:

        1.小车刚体连接错误,没有形成闭合链。前一天晚上用着还好好的,第二天就报错不能用了,我人麻了。

        2.时间戳为无效浮点值。

        3.无法更新保存USD文件。

        4.缓存更新失败。

        5. Nucleus 加载错误。

(问题1~4:卸载isaacsim重新下载。问题5:卸载Nucleus重新下载。sim论坛里的解决方法没有一点用,啧)

个人随机化代码:

注释部分按个人需要看看要不要开

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
from pxr import Usd, UsdGeom, UsdPhysics, UsdShade, Sdf, Gf, Tf
import os
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import json
import omni.usd
from pxr import Usd, UsdGeom, UsdLux
import random
import time

stage = omni.usd.get_context().get_stage()

async def example():
    if World.instance():
        World.instance().clear_instance()
    world = World()

    stage = omni.usd.get_context().get_stage()
    UsdGeom.SetStageUpAxis


with rep.new_layer():

    # 小车
    CAR = 'omniverse://localhost/model/car_0702.usd'

    # <-----树木----->
    # 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'
    # 中间带石头的条状草地 未配置
    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'
    # 0.9m(高度到人类腰部) 灌木(绿色)
    FOUNTAIN_GRASS_SHORT = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Fountain_Grass_Short.usd'
    # 0.75m(高度到人类大腿中段) 灌木(绿色)
    BOXWOOD = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Boxwood.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/'

    # 砖块 (淡灰色)
    BRICK_GREY = 'omniverse://localhost/model/some_/brick/Brick/scene.usdc'
    # 砖块 (红色)杂乱一堆
    BRICK_RED_PILE = 'omniverse://localhost/model/some_/brick/Heap_of_construction_old_debris_bricks/scene.usdc'
    # 砖块 (红色)工整一堆
    BRICK_RED_CUBEQILE = 'omniverse://localhost/model/some_/brick/Stacked_bricks/scene.usdc'
    # 砖块 (红色)一块
    BRICK_RED_ONE = 'omniverse://localhost/model/some_/brick/Red_Brick/scene.usdc'

    # 松果 (两个未配置)
    PINE = 'omniverse://localhost/model/some_/pine/Empty_pine_cone/scene.usdc'
    PINE_02 = 'omniverse://localhost/model/some_/pine/Pine_Cone/scene.usdc'

    # <-----材质----->
    GROUND_MATERIAL = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/materials/Pampas_grass_Mat.mdl'

ground = rep.create.plane(scale=33, semantics=[('class', 'grass')], visible=True, parent='/World')  # 单位:m

# 相机参数
# camera = rep.create.camera(
#     position=rep.distribution.uniform((0,0,0), (100, 100, 100)),
#     rotation=(-90, 0, 0),
#     focus_distance=rep.distribution.normal(400.0, 100),
#     f_stop=0.5,
# )

# 1
# camera1_pos = [(-5, -5, 0.5),(0, 5, 0.5)]
# # camera2_pos = [(0, -5, 0.5),(5, 5, 0.5)]
# # 相机位置及旋转角度
# camera_look_at = (0, 0, 0)
# camera = rep.create.camera(position=camera1_pos[0], look_at = camera_look_at)


# camera2 = rep.create.camera(position=camera2_pos[0], look_at=(0,0,0))

# light = rep.create.light(
#     light_type="Distant",
#     intensity=3000,  # 光强度
#     angle=1,  # 角度
#     position=light_position,
#     rotation=(0, 0, 0)  # 光源旋转
# )

# 获取当前的 USD stage
stage = omni.usd.get_context().get_stage()

async def example():
    if World.instance():
        World.instance().clear_instance()
    world = World()

    stage = omni.usd.get_context().get_stage()
    UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.z)

    # 单位(m)
    # UsdGeom.SetStageMetersPerUnit(stage, 0.01)
    UsdGeom.SetStageMetersPerUnit(stage, 1.0)
    # # 新建一个物理场景
    # scene = UsdPhysics.Scene.Define(stage, "/physicsScene")

    # # 重力方向,下;重力大小,9.81m/s^2
    # scene.CreateGravityDirectionAttr().Set(Gf.Vec3f(0.0, 0.0, -1.0))
    # scene.CreateGravityMagnitudeAttr().Set(981.0)

    # 获取当前的 USD stage
    stage = omni.usd.get_context().get_stage()

    if stage:
        default_light_path = "/Environment/defaultLight"
        default_light_prim = stage.GetPrimAtPath(default_light_path)

        # 确保 defaultLight 原语存在
        if default_light_prim:
            # 设置 defaultLight 的可见性为不可见
            # visibility_attr = default_light_prim.GetAttribute('visibility')
            # if not visibility_attr:
            #     visibility_attr = default_light_prim.CreateAttribute('visibility', Sdf.ValueTypeNames.Token)
            # visibility_attr.Set('invisible')

            # 设置defaultLight 的 intensity
            intensity_attr = default_light_prim.GetAttribute('inputs:intensity')
            if not intensity_attr:
                intensity_attr = default_light_prim.CreateAttribute('inputs:intensity', Sdf.ValueTypeNames.Float)
            intensity_attr.Set(200.0)  # 设置 intensity 的值为 150.0

    # 使用系统时间戳作为随机数种子
    random_seed = int(time.time())
    np.random.seed(random_seed)
    random.seed(random_seed)

# 随机化光源
    # def disk_lights():
    #     lights = rep.create.light(
    #         light_type="Disk",
    #         # temperature=rep.distribution.normal(6500, 500),
    #         # intensity=rep.distribution.normal(3000, 500),
    #         temperature = 65000,
    #         # intensity = 20000,
    #         intensity = 4500,
    #         # 位置 均匀分布,范围
    #         position = camera1_pos[0],  # 光源位置与相机位置相同
    #         rotation = [90, -10, 0],
    #         # 比例 均匀分布
    #         scale = (2.0, 2.0, 1.0)
    #     )
    #     return lights.node
    # rep.randomizer.register(disk_lights)

    def dome_lights():
        lights = rep.create.light(
            light_type="Dome",

            # 色温 正态分布,均值6500,标准差500
            # 刚开始日出日落:2000k-3000k  蓝天白光:6500k  北方平均太阳光:7500k  
            # 模拟太阳光:5000k  白中明显带蓝:7000k-8000k
            # 欧洲商店灯光:4000k(美国4100k)
            temperature=rep.distribution.normal(2700, 100),
                    
            # 光强 正态分布,均值35000,标准差5000
            # 赤道地区光强大,随着纬度的增加而减少
            # 夏季光强大,冬季少
            # 植株密度大,植株间光强小
            # intensity=rep.distribution.normal(200, 50),
            intensity=rep.distribution.normal(200, 10),

            rotation= (360,0,0),
            texture=rep.distribution.choice([
                'omniverse://localhost/NVIDIA/Assets/Skies/Cloudy/champagne_castle_1_4k.hdr',
                'omniverse://localhost/NVIDIA/Assets/Skies/Clear/qwantani_4k.hdr'
                ])
                )
        return lights.node
    rep.randomizer.register(dome_lights)

# 随机地面纹理
    def get_ground():
        with ground:
            rep.randomizer.texture(
                textures=[
                    'omniverse://localhost/model/some_/Grass_with_autumn_leaves/0/material_0_baseColor.jpg'
                ],
                texture_scale=rep.distribution.uniform((35.0,35.0), (35.0, 35.0))  # 缩放
            )
        return ground.node

    rep.randomizer.register(get_ground)


# 车
    def get_car(size):
        instance_car = rep.randomizer.instantiate(rep.utils.get_usd_files(CAR, recursive=True), size=size)
        with instance_car:
            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((1.0, 1.0, 1.0), (1.0, 1.0, 1.0))                # 缩放
                # 单位:cm
                # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
                # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))

        # 设置固定路径
        fixed_path = "/Replicator/SampledAssets/car"
        instance_car.set_path(fixed_path)

        return instance_car.node
    rep.randomizer.register(get_car)

# 树
    # 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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.017))
                # 单位:cm
                # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
                # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_grass.node
    rep.randomizer.register(get_grass)

# 花
    # 小花(白色)
    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))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        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))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        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))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_shrub.node
    rep.randomizer.register(get_shrub)

    # 0.9m(高度到人类腰部) 灌木(绿色)
    def get_Fountain_Grass_Short(size):
        Fountain_Grass_Short = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
        with Fountain_Grass_Short:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-2, -2, 0), (0, 0, 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))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return Fountain_Grass_Short.node
    rep.randomizer.register(get_Fountain_Grass_Short)

    # 0.75m(高度到人类大腿中段) 灌木(绿色)
    def get_Boxwood(size):
        Boxwood = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
        with Boxwood:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-5, -5, 0), (-5, 5, 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))
            )
            # rep.physics.rigid_body(
            #     velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
            #     angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return Boxwood.node
    rep.randomizer.register(get_Boxwood)

# 障碍物
    # 木质公园椅(浅黄色)
    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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_railing.node
    rep.randomizer.register(get_railing)

    # 砖块 (淡灰色)
    def get_brick_grey(size):
        instances_brick_grey = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_GREY, recursive=True), size=size, mode='point_instance')
        with instances_brick_grey:
            rep.modify.pose(
                position=rep.distribution.uniform((-1, -1, 0), (1, 1, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_brick_grey.node
    rep.randomizer.register(get_brick_grey)

    # 砖块 (红色)杂乱一堆
    def get_brick_red_pile(size):
        instances_brick_red_pile = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_PILE, recursive=True), size=size, mode='point_instance')
        with instances_brick_red_pile:
            rep.modify.pose(
                position=rep.distribution.uniform((-4, -4, -0.4), (4, 4, -0.4)),
                rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
                scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_brick_red_pile.node
    rep.randomizer.register(get_brick_red_pile)

    # 砖块 (红色)工整一堆
    def get_brick_red_cubepile(size):
        instances_red_cubepile2 = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_CUBEQILE, recursive=True), size=size, mode='point_instance')
        with instances_red_cubepile2:
            rep.modify.pose(
                position=rep.distribution.uniform((-2, -2, -2.2), (3, 3, -2.2)),
                rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
                scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_red_cubepile2.node
    rep.randomizer.register(get_brick_red_cubepile)

    # 砖块 (红色)一块
    def get_brick_red_one(size):
        instances_brick_red_one = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_ONE, recursive=True), size=size, mode='point_instance')
        with instances_brick_red_one:
            rep.modify.pose(
                position=rep.distribution.uniform((-3.5, -3.5, 0.1), (-1, -1, 0.1)),
                rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
                scale=rep.distribution.uniform((0.0002, 0.0002, 0.0002), (0.0002, 0.0002, 0.0002))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_brick_red_one.node
    rep.randomizer.register(get_brick_red_one)

# 分区域生成模型
    # 短草(绿色)
    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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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((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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_grass_area4.node
    rep.randomizer.register(get_grass_area4)

    # 小花(白色)
    def get_flower_area1(size):
        instances_flower_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
        with instances_flower_area1:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 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((0, 0, 0), (0, 0, 0))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_flower_area1.node
    rep.randomizer.register(get_flower_area1)
    def get_flower_area2(size):
        instances_flower_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
        with instances_flower_area2:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-17, 2, 0), (-2, 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((0, 0, 0), (0, 0, 0))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_flower_area2.node
    rep.randomizer.register(get_flower_area2)
    def get_flower_area3(size):
        instances_flower_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
        with instances_flower_area3:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((2, -17, 0), (17, -2, 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((0, 0, 0), (0, 0, 0))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_flower_area3.node
    rep.randomizer.register(get_flower_area3)
    def get_flower_area4(size):
        instances_flower_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
        with instances_flower_area4:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((2, 2, 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((0, 0, 0), (0, 0, 0))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_flower_area4.node
    rep.randomizer.register(get_flower_area4)


    # 木质箱(黄)
    def get_piles_area1(size):
        instances_piles_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
        with instances_piles_area1:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_piles_area1.node
    rep.randomizer.register(get_piles_area1)
    def get_piles_area2(size):
        instances_piles_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
        with instances_piles_area2:
            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, -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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_piles_area2.node
    rep.randomizer.register(get_piles_area2)
    def get_piles_area3(size):
        instances_piles_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
        with instances_piles_area3:
            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, -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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_piles_area3.node
    rep.randomizer.register(get_piles_area3)
    def get_piles_area4(size):
        instances_piles_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
        with instances_piles_area4:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((2, 2, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_piles_area4.node
    rep.randomizer.register(get_piles_area4)

    # 0.9m(高度到人类腰部) 灌木(绿色)
    def get_Fountain_area1(size):
        instances_Fountain_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
        with instances_Fountain_area1:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-5, -5, 0), (-2, -2, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Fountain_area1.node
    rep.randomizer.register(get_Fountain_area1)
    def get_Fountain_area2(size):
        instances_Fountain_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
        with instances_Fountain_area2:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-5, 2, 0), (-2, 5, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Fountain_area2.node
    rep.randomizer.register(get_Fountain_area2)
    def get_Fountain_area3(size):
        instances_Fountain_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
        with instances_Fountain_area3:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((2, -5, 0), (5, -2, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Fountain_area3.node
    rep.randomizer.register(get_Fountain_area3)
    def get_Fountain_area4(size):
        instances_Fountain_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
        with instances_Fountain_area4:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((2, 2, 0), (5, 5, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Fountain_area4.node
    rep.randomizer.register(get_Fountain_area4)

    # 0.75m(高度到人类大腿中段) 灌木(绿色)
    def get_Boxwood_area1(size):
        instances_Boxwood_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
        with instances_Boxwood_area1:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-5, -10, 0), (-5, -5, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Boxwood_area1.node
    rep.randomizer.register(get_Boxwood_area1)
    def get_Boxwood_area2(size):
        instances_Boxwood_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
        with instances_Boxwood_area2:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((-10, 5, 0), (-5, 5, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Boxwood_area2.node
    rep.randomizer.register(get_Boxwood_area2)
    def get_Boxwood_area3(size):
        instances_Boxwood_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
        with instances_Boxwood_area3:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((5, -5, 0), (10, -5, 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))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Boxwood_area3.node
    rep.randomizer.register(get_Boxwood_area3)
    def get_Boxwood_area4(size):
        instances_Boxwood_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
        with instances_Boxwood_area4:
            rep.modify.pose(
                # 单位:m
                position=rep.distribution.uniform((5, 5, 0), (5, 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))
                # 单位:cm
                # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
                # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
            )
            rep.physics.rigid_body(
                velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
                angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
        return instances_Boxwood_area4.node
    rep.randomizer.register(get_Boxwood_area4)

# 随机化
    with rep.trigger.on_frame(num_frames=1):
    # with rep.trigger.on_frame(num_frames=100,interval=10):
        # rep.randomizer.disk_lights()                    # 随机化光源
        rep.randomizer.dome_lights()                    # 随机穹顶
        rep.randomizer.get_ground()                     # 随机地面纹理
        # rep.randomizer.get_car(1)                       # 小车

        rep.randomizer.get_tree(15)                     # 4.5m 树(绿色)
        # rep.randomizer.get_tree_02(1)                   # 18m 树(绿色)

        rep.randomizer.get_grass(1200)                  # 短草(绿色)

        rep.randomizer.get_flower(450)                  # 小花(白色)
        rep.randomizer.get_daisies_flower(50)           # 一簇小花(白色)

        # rep.randomizer.get_shrub(10)                    # 1.2m(高度到人类胸口) 灌木(绿色)
        # rep.randomizer.get_Fountain_Grass_Short(10)     # 0.9m(高度到人类腰部) 灌木(绿色)
        # rep.randomizer.get_Boxwood(10)                  # 0.75m(高度到人类大腿中段) 灌木(绿色)

        # rep.randomizer.get_park_bench(3)                # 木质公园椅(浅黄色)
        # rep.randomizer.get_park_bench_02(3)             # 铁质公园椅(橙色)
        # 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_brick_grey(10)               # 砖块 淡灰色  
        # rep.randomizer.get_brick_red_pile(3)            # 砖块 (红色)杂乱一堆
        # rep.randomizer.get_brick_red_cubepile(2)        # 砖块 (红色)工整一堆
        # rep.randomizer.get_brick_red_one(10)            # 砖块 (红色)一块


# 分区域进行随机化
# 在isaacsim中,俯视角,横轴x水平向右,纵轴y垂直向上
# 左下角为1区域,左上角为2区域,右下角为3区域,右上角为4区域
        # rep.randomizer.get_grass_area1(400)             # 短草(绿色)
        # rep.randomizer.get_grass_area2(400)
        # rep.randomizer.get_grass_area3(400)
        # rep.randomizer.get_grass_area4(400)

        # rep.randomizer.get_flower_area1(100)            # 小花(白色)
        # rep.randomizer.get_flower_area2(100)
        # rep.randomizer.get_flower_area3(100)
        # rep.randomizer.get_flower_area4(100)

        # rep.randomizer.get_piles_area1(10)              # 木质箱(黄)
        # rep.randomizer.get_piles_area2(10)
        # rep.randomizer.get_piles_area3(10)
        # rep.randomizer.get_piles_area4(10)

        # rep.randomizer.get_Fountain_area1(10)           # 0.9m(高度到人类腰部) 灌木(绿色)
        # rep.randomizer.get_Fountain_area2(10)
        # rep.randomizer.get_Fountain_area3(10)
        # rep.randomizer.get_Fountain_area4(10)

        # rep.randomizer.get_Boxwood_area1(15)            # 0.75m(高度到人类大腿中段) 灌木(绿色)
        # rep.randomizer.get_Boxwood_area2(15)
        # rep.randomizer.get_Boxwood_area3(15)
        # rep.randomizer.get_Boxwood_area4(15)

        # Initialize and attach writer

    # writer = rep.WriterRegistry.get("BasicWriter")
    # writer.initialize(
    #     output_dir= "/home/lxy/Desktop/Semantic_data/test",
    #     rgb=True,
    #     semantic_segmentation=True,
    #     colorize_semantic_segmentation=True,
    # )

# 2
    # writer.attach([render_product])
#         with camera:
#             rep.modify.pose(look_at=(0,0,0), position=rep.distribution.uniform(camera1_pos))
#         # with camera2:
#         #     rep.modify.pose(look_at=(0,0,0), position=rep.distribution.uniform(camera2_pos))
#         await asyncio.sleep(1)

# # 渲染图像大小
# # render_product = rep.create.render_product(camera, (1920, 1080))
# render_product = rep.create.render_product(camera, (640, 480))

# basic_writer = rep.WriterRegistry.get("BasicWriter")
# basic_writer.initialize(
#     output_dir= "/home/lxy/Desktop/Semantic_data/0704",
#     rgb=True,                               # RGB
#     semantic_segmentation=True,             # 语义分割
#     # bounding_box_2d_loose=True,             # 2D检测框(松散)
#     # bounding_box_2d_tight=True,             # 2D检测框(紧密)
#     # bounding_box_3d=True,                   # 3D检测框
#     # distance_to_camera=True,                # 到相机距离
#     # distance_to_image_plane=True,           # 到图像平面的距离
#     # instance_segmentation=True,             # 实例分割
#     # normals=True,                           # 法线
#     # bbox_height_threshold=5,                # 边界框高度阈值
#     # fully_visible_threshold=0.75,           # 视觉检测对象可见阈值
#     # omit_semantic_type=True                 # 是否忽略特定语义类型的对象或信息
# )

# basic_writer.attach([render_product])
rep.orchestrator.run()

asyncio.ensure_future(example())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/773836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搜维尔科技:详谈ART的工具追踪技术

您的生产流程中是否已经受益于刀具跟踪系统&#xff1f;您是否意识到它们的价值&#xff1f;因为它们可以优化您的装配顺序&#xff0c;从而节省您的时间和金钱。 目前我们提供两种工具跟踪解决方案&#xff1a; 1.ART与 VERPOSE的解决方案——易于使用的图像识别 安装在工…

探索智能合约在医疗健康领域的革新应用

随着区块链技术的发展&#xff0c;智能合约作为其重要应用之一&#xff0c;在医疗健康领域展示了巨大的潜力和革新性。智能合约是一种基于区块链的自动化执行协议&#xff0c;它可以在无需中介的情况下执行和验证合同。在医疗健康领域&#xff0c;智能合约不仅简化了数据管理和…

房屋租赁管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;中介管理&#xff0c;房屋信息管理&#xff0c;房屋类型管理&#xff0c;租房订单管理&#xff0c;租房信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;房屋信息&a…

ctfshow-web入门-命令执行(web66-web70)

目录 1、web66 2、web67 3、web68 4、web69 5、web70 1、web66 show_source 被禁用 highlight_file 发现 flag 不在 flag.php 里面 先使用 scandir() 进行目录扫描&#xff1a; cprint_r(scandir("./")); 当前目录下只有 index.php 和 flag.php 扫一下根目…

图书商城系统java项目ssm项目jsp项目java课程设计java毕业设计

文章目录 图书商城系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 图书商城系统 一、项目演示 图书商城系统 二、项目介绍 语言: Java 数据库&#xff1a;MySQL 技术栈&#xff1a;SpringS…

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

spark shuffle——shuffle管理

ShuffleManager shuffle系统的入口。ShuffleManager在driver和executor中的sparkEnv中创建。在driver中注册shuffle&#xff0c;在executor中读取和写入数据。 registerShuffle&#xff1a;注册shuffle&#xff0c;返回shuffleHandle unregisterShuffle&#xff1a;移除shuff…

LED显示屏跟COB显示屏有哪些不同?

COB显示屏跟LED显示屏的主要区别在于产品的显示效果、封装技术、耐用性、防护力、维护以及制造成本方面的不同&#xff0c;这里所说的LED显示屏主要指的是使用SMD封装的LED显示屏&#xff0c;今天跟随COB显示屏厂家中品瑞科技一起来详细看看具体分析&#xff1a; 一、封装技术 …

视图库对接系列(GA-T 1400)九、视图库对接系列(本级)机动车数据推送

背景 在上几章中,我们已经可以将视图库的平台写到我们的数据库中了。 换句话说就已经接入我们的平台了,这几期的话,我们就对接设备, 将设备的数据接入到我们平台来。 机动车数据推送 接入机动车数据推送相对比较简单,我们只需要实现对应的接口就ok了。 具体如图: 有增…

77. UE5 RPG 创建角色的技能栏

在前面的文章里&#xff0c;我们实现了角色属性技能和场景。接下来&#xff0c;我们要优化角色显示UI&#xff0c;在屏幕底部显示角色血量&#xff0c;蓝量&#xff0c;技能和经验值。 创建新的用户控件 选择创建新的控件蓝图 父类为我们自定义的RPGUserWidget&#xff0c;这…

这样拼板帮你省近万元,堪称PCB工程师成本终结者!

别再被骗了&#xff0c;打PCB板价格高不是单价高&#xff01;而是你的拼板导致利用率太低了&#xff01; 今天给大家讲个小故事&#xff0c;教大家如何省钱...... 一个爽朗的晴天&#xff0c;我听闻同事说有客户对他吐槽打板子价格太高&#xff0c;说着说着就开始吹起了牛逼...…

【论文阅读】VASA-1: Lifelike Audio-Driven Talking FacesGenerated in Real Time

整体框架。不直接生成视频帧&#xff0c;而是在潜在空间中生成整体面部动态和头部运动&#xff0c;条件是音频和其他信号。给定这些运动潜在编码&#xff0c;通过面部解码器生成视频帧&#xff0c;还接受从输入图像中提取的外观和身份特征作为输入。 构建了一个面部潜在空间并…

【C#】ProgressBar进度条异步编程思想

1.控件介绍 进度条通常用于显示代码的执行进程进度&#xff0c;在一些复杂功能交互体验时告知用户进程还在继续。 在属性栏中&#xff0c;有三个值常用&#xff1a; Value表示当前值&#xff0c;Minimum表示进度条范围下限&#xff0c;Maximum表示进度条范围上限。 2.简单实…

【网络安全】第8讲 网络安全协议(笔记)

一、网络安全协议概述 1、协议 是指两个或多个以上参与者为完成某项特定的任务而采取的一系列步骤。 2、网络协议 是指计算机网络中通信各方关于如何进行数据交换所达成的一致性规则、标准或约定的集合&#xff0c;即由参与通信的各方按确定的步骤做出一系列通信动作&#xff…

Linux系统安装青龙面板结合内网穿透实现使用公网地址远程访问

文章目录 前言一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

Embedded Coder生成C代码注释

学习目标 本教程将向您说明如何生成包含以下内容的代码&#xff1a; 在函数前注中包含函数签名和函数帮助文本。包含 MATLAB 源代码&#xff0c;以带有可追溯性标记的注释表示。在代码生成报告中&#xff0c;可追溯性标记链接到对应的 MATLAB 源代码。 前提条件 要完成本教…

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…

固相提取铕和铀

固相萃取&#xff08;Solid Phase Extraction&#xff0c;SPE&#xff09;是一种常用的化学分离技术&#xff0c;它利用固体吸附剂&#xff08;固定相&#xff09;与样品中的目标化合物&#xff08;流动相&#xff09;之间的相互作用力&#xff0c;将目标化合物从样品中分离出来…

JVM的五大内存区域

JVM的五大内存区域 JVM内存区域最粗略的划分可以分为 堆 和 栈 &#xff0c;当然&#xff0c;按照虚拟机规范&#xff0c;可以划分为以下几个区域&#xff1a; JVM内存分为线程独享区和线程共享区&#xff0c; 其中 方法区 和 堆 是线程共享区&#xff0c; 虚拟机栈, 本地方法…

为什么需要做网络安全服务?

网络安全服务之所以重要&#xff0c;是因为它在保护数字资产、维护企业运营、确保法规遵从、防范恶意行为以及建立信任等方面扮演着关键角色。以下是一些主要的理由&#xff1a; 保护核心资产和数据&#xff1a; 数字化转型使得企业数据变得极其宝贵&#xff0c;包括知识产权、…
最新文章