当前位置:   article > 正文

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

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论坛里的解决方法没有一点用,啧)

个人随机化代码:

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

  1. import omni.replicator.core as rep
  2. import omni.usd
  3. import asyncio
  4. import numpy as np
  5. from omni.isaac.core.world import World
  6. from omni.isaac.core.prims import RigidPrimView
  7. from omni.isaac.core.objects import DynamicCuboid
  8. from pxr import Usd, UsdGeom, UsdPhysics, UsdShade, Sdf, Gf, Tf
  9. import os
  10. from PIL import Image
  11. import matplotlib.pyplot as plt
  12. import matplotlib.patches as patches
  13. import json
  14. import omni.usd
  15. from pxr import Usd, UsdGeom, UsdLux
  16. import random
  17. import time
  18. stage = omni.usd.get_context().get_stage()
  19. async def example():
  20. if World.instance():
  21. World.instance().clear_instance()
  22. world = World()
  23. stage = omni.usd.get_context().get_stage()
  24. UsdGeom.SetStageUpAxis
  25. with rep.new_layer():
  26. # 小车
  27. CAR = 'omniverse://localhost/model/car_0702.usd'
  28. # <-----树木----->
  29. # 4.5m 树(绿色)
  30. PROPS_TREE = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Trees/Blue_Berry_Elder.usd'
  31. # 18m 树(绿色)
  32. TREE_BLACK_OAK = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Trees/Black_Oak.usd'
  33. # <-----草----->
  34. # 短草(绿色)
  35. PROPS_GRASS = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Grass_Short_A.usd'
  36. # 中间带石头的条状草地 未配置
  37. ROCK_GRASS = 'omniverse://localhost/model/some_/Rocks_Grass_2/scene.usdc'
  38. # <-----灌木----->
  39. # 1.2m(高度到人类胸口) 灌木(绿色)
  40. PROPS_SHRUB = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Holly.usd'
  41. # 0.9m(高度到人类腰部) 灌木(绿色)
  42. FOUNTAIN_GRASS_SHORT = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Fountain_Grass_Short.usd'
  43. # 0.75m(高度到人类大腿中段) 灌木(绿色)
  44. BOXWOOD = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/Boxwood.usd'
  45. # <-----花朵----->
  46. # 小花(白色)
  47. PROPS_FLOWER = 'omniverse://localhost/model/some_/Margarita_flower/scene.usdc'
  48. # 一簇小花(白色)
  49. DAISIES_FLOWERS = 'omniverse://localhost/model/some_/Margarita_flower_bush/scene.usdc'
  50. # <-----场景障碍物----->
  51. # 木质公园椅(浅黄色)
  52. PARK_BENCH = 'omniverse://localhost/model/some_/Park_Bench2/scene.usdc'
  53. # 铁质公园椅(橙色)
  54. PARK_BENCH_2 = 'omniverse://localhost/model/some_/Park_Bech_Low-poly/scene.usdc'
  55. # 帐篷
  56. TENT = 'omniverse://localhost/model/some_/Camping_tent/scene.usdc'
  57. # 铁质秋千
  58. SEESAW = 'omniverse://localhost/model/some_/Recreational_place_Play_Children_Seesaw/scene.usdc'
  59. # 铁质滑梯
  60. SLIDE = 'omniverse://localhost/model/some_/the_slide_Park_Play_Child/scene.usdc'
  61. # 消防栓(红色)
  62. FIRE_HYDRANT = 'omniverse://localhost/model/some_/Rusty_Fire_Hydrant/scene.usdc'
  63. # 公园草地灯(下黑上白)
  64. LIGHT = 'omniverse://localhost/Library/NVIDIA Package/Residential/Outdoors/Lighting/CircularBollard.usd'
  65. # 木质箱(黄)
  66. PILES = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Piles/'
  67. # 货架和货物(蓝色框架,纸质箱子)
  68. RACKS = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Racks/'
  69. # 货架(蓝色框架)
  70. SHELVES = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Shelves/'
  71. # 栏杆(黄色)
  72. RAILING = 'omniverse://localhost/Library/NVIDIA Package/Assets/ArchVis/Industrial/Railing/'
  73. # 砖块 (淡灰色)
  74. BRICK_GREY = 'omniverse://localhost/model/some_/brick/Brick/scene.usdc'
  75. # 砖块 (红色)杂乱一堆
  76. BRICK_RED_PILE = 'omniverse://localhost/model/some_/brick/Heap_of_construction_old_debris_bricks/scene.usdc'
  77. # 砖块 (红色)工整一堆
  78. BRICK_RED_CUBEQILE = 'omniverse://localhost/model/some_/brick/Stacked_bricks/scene.usdc'
  79. # 砖块 (红色)一块
  80. BRICK_RED_ONE = 'omniverse://localhost/model/some_/brick/Red_Brick/scene.usdc'
  81. # 松果 (两个未配置)
  82. PINE = 'omniverse://localhost/model/some_/pine/Empty_pine_cone/scene.usdc'
  83. PINE_02 = 'omniverse://localhost/model/some_/pine/Pine_Cone/scene.usdc'
  84. # <-----材质----->
  85. GROUND_MATERIAL = 'omniverse://localhost/Library/NVIDIA Package/Assets/Vegetation/Shrub/materials/Pampas_grass_Mat.mdl'
  86. ground = rep.create.plane(scale=33, semantics=[('class', 'grass')], visible=True, parent='/World') # 单位:m
  87. # 相机参数
  88. # camera = rep.create.camera(
  89. # position=rep.distribution.uniform((0,0,0), (100, 100, 100)),
  90. # rotation=(-90, 0, 0),
  91. # focus_distance=rep.distribution.normal(400.0, 100),
  92. # f_stop=0.5,
  93. # )
  94. # 1
  95. # camera1_pos = [(-5, -5, 0.5),(0, 5, 0.5)]
  96. # # camera2_pos = [(0, -5, 0.5),(5, 5, 0.5)]
  97. # # 相机位置及旋转角度
  98. # camera_look_at = (0, 0, 0)
  99. # camera = rep.create.camera(position=camera1_pos[0], look_at = camera_look_at)
  100. # camera2 = rep.create.camera(position=camera2_pos[0], look_at=(0,0,0))
  101. # light = rep.create.light(
  102. # light_type="Distant",
  103. # intensity=3000, # 光强度
  104. # angle=1, # 角度
  105. # position=light_position,
  106. # rotation=(0, 0, 0) # 光源旋转
  107. # )
  108. # 获取当前的 USD stage
  109. stage = omni.usd.get_context().get_stage()
  110. async def example():
  111. if World.instance():
  112. World.instance().clear_instance()
  113. world = World()
  114. stage = omni.usd.get_context().get_stage()
  115. UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.z)
  116. # 单位(m)
  117. # UsdGeom.SetStageMetersPerUnit(stage, 0.01)
  118. UsdGeom.SetStageMetersPerUnit(stage, 1.0)
  119. # # 新建一个物理场景
  120. # scene = UsdPhysics.Scene.Define(stage, "/physicsScene")
  121. # # 重力方向,下;重力大小,9.81m/s^2
  122. # scene.CreateGravityDirectionAttr().Set(Gf.Vec3f(0.0, 0.0, -1.0))
  123. # scene.CreateGravityMagnitudeAttr().Set(981.0)
  124. # 获取当前的 USD stage
  125. stage = omni.usd.get_context().get_stage()
  126. if stage:
  127. default_light_path = "/Environment/defaultLight"
  128. default_light_prim = stage.GetPrimAtPath(default_light_path)
  129. # 确保 defaultLight 原语存在
  130. if default_light_prim:
  131. # 设置 defaultLight 的可见性为不可见
  132. # visibility_attr = default_light_prim.GetAttribute('visibility')
  133. # if not visibility_attr:
  134. # visibility_attr = default_light_prim.CreateAttribute('visibility', Sdf.ValueTypeNames.Token)
  135. # visibility_attr.Set('invisible')
  136. # 设置defaultLight 的 intensity
  137. intensity_attr = default_light_prim.GetAttribute('inputs:intensity')
  138. if not intensity_attr:
  139. intensity_attr = default_light_prim.CreateAttribute('inputs:intensity', Sdf.ValueTypeNames.Float)
  140. intensity_attr.Set(200.0) # 设置 intensity 的值为 150.0
  141. # 使用系统时间戳作为随机数种子
  142. random_seed = int(time.time())
  143. np.random.seed(random_seed)
  144. random.seed(random_seed)
  145. # 随机化光源
  146. # def disk_lights():
  147. # lights = rep.create.light(
  148. # light_type="Disk",
  149. # # temperature=rep.distribution.normal(6500, 500),
  150. # # intensity=rep.distribution.normal(3000, 500),
  151. # temperature = 65000,
  152. # # intensity = 20000,
  153. # intensity = 4500,
  154. # # 位置 均匀分布,范围
  155. # position = camera1_pos[0], # 光源位置与相机位置相同
  156. # rotation = [90, -10, 0],
  157. # # 比例 均匀分布
  158. # scale = (2.0, 2.0, 1.0)
  159. # )
  160. # return lights.node
  161. # rep.randomizer.register(disk_lights)
  162. def dome_lights():
  163. lights = rep.create.light(
  164. light_type="Dome",
  165. # 色温 正态分布,均值6500,标准差500
  166. # 刚开始日出日落:2000k-3000k 蓝天白光:6500k 北方平均太阳光:7500k
  167. # 模拟太阳光:5000k 白中明显带蓝:7000k-8000k
  168. # 欧洲商店灯光:4000k(美国4100k)
  169. temperature=rep.distribution.normal(2700, 100),
  170. # 光强 正态分布,均值35000,标准差5000
  171. # 赤道地区光强大,随着纬度的增加而减少
  172. # 夏季光强大,冬季少
  173. # 植株密度大,植株间光强小
  174. # intensity=rep.distribution.normal(200, 50),
  175. intensity=rep.distribution.normal(200, 10),
  176. rotation= (360,0,0),
  177. texture=rep.distribution.choice([
  178. 'omniverse://localhost/NVIDIA/Assets/Skies/Cloudy/champagne_castle_1_4k.hdr',
  179. 'omniverse://localhost/NVIDIA/Assets/Skies/Clear/qwantani_4k.hdr'
  180. ])
  181. )
  182. return lights.node
  183. rep.randomizer.register(dome_lights)
  184. # 随机地面纹理
  185. def get_ground():
  186. with ground:
  187. rep.randomizer.texture(
  188. textures=[
  189. 'omniverse://localhost/model/some_/Grass_with_autumn_leaves/0/material_0_baseColor.jpg'
  190. ],
  191. texture_scale=rep.distribution.uniform((35.0,35.0), (35.0, 35.0)) # 缩放
  192. )
  193. return ground.node
  194. rep.randomizer.register(get_ground)
  195. # 车
  196. def get_car(size):
  197. instance_car = rep.randomizer.instantiate(rep.utils.get_usd_files(CAR, recursive=True), size=size)
  198. with instance_car:
  199. rep.modify.pose(
  200. # 单位:m
  201. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)), # 区域
  202. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)), # 角度
  203. scale=rep.distribution.uniform((1.0, 1.0, 1.0), (1.0, 1.0, 1.0)) # 缩放
  204. # 单位:cm
  205. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  206. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  207. )
  208. # rep.physics.rigid_body(
  209. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  210. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  211. # 设置固定路径
  212. fixed_path = "/Replicator/SampledAssets/car"
  213. instance_car.set_path(fixed_path)
  214. return instance_car.node
  215. rep.randomizer.register(get_car)
  216. # 树
  217. # 4.5m 树(绿色)
  218. def get_tree(size):
  219. instances_tree = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_TREE, recursive=True), size=size)
  220. with instances_tree:
  221. rep.modify.pose(
  222. # 单位:m
  223. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  224. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  225. scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.013, 0.013, 0.013))
  226. # 单位:cm
  227. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  228. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  229. )
  230. rep.physics.rigid_body(
  231. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  232. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  233. return instances_tree.node
  234. rep.randomizer.register(get_tree)
  235. # 18m 树(绿色)
  236. def get_tree_02(size):
  237. instances_tree_02 = rep.randomizer.instantiate(rep.utils.get_usd_files(TREE_BLACK_OAK, recursive=True), size=size)
  238. with instances_tree_02:
  239. rep.modify.pose(
  240. # 单位:m
  241. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  242. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  243. scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.013, 0.013, 0.013))
  244. # 单位:cm
  245. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  246. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  247. )
  248. rep.physics.rigid_body(
  249. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  250. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  251. return instances_tree_02.node
  252. rep.randomizer.register(get_tree_02)
  253. # 草
  254. # 短草(绿色)
  255. def get_grass(size):
  256. instances_grass = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
  257. with instances_grass:
  258. rep.modify.semantics([('class', 'grass')])
  259. rep.modify.pose(
  260. # 单位:m
  261. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  262. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  263. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.017))
  264. # 单位:cm
  265. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  266. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  267. )
  268. # rep.physics.rigid_body(
  269. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  270. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  271. return instances_grass.node
  272. rep.randomizer.register(get_grass)
  273. # 花
  274. # 小花(白色)
  275. def get_flower(size):
  276. instance_files = rep.utils.get_usd_files(PROPS_FLOWER, recursive=True)
  277. instances_flower = rep.randomizer.instantiate(instance_files, size=size)
  278. with instances_flower:
  279. rep.modify.semantics([('class', 'grass')])
  280. rep.modify.pose(
  281. # 单位:m
  282. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  283. rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
  284. scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
  285. # 单位:cm
  286. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  287. # rotation=rep.distribution.uniform((90, -35, -10), (90, 35, 10)),
  288. # scale=rep.distribution.uniform((0.05, 0.05, 0.05), (0.15, 0.15, 0.15))
  289. )
  290. # rep.physics.rigid_body(
  291. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  292. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  293. return instances_flower.node
  294. rep.randomizer.register(get_flower)
  295. # 一簇小花(白色)
  296. def get_daisies_flower(size):
  297. instances_daisies_flower = rep.randomizer.instantiate(rep.utils.get_usd_files(DAISIES_FLOWERS, recursive=True), size=size)
  298. with instances_daisies_flower:
  299. rep.modify.semantics([('class', 'grass')])
  300. rep.modify.pose(
  301. # 单位:m
  302. position=rep.distribution.uniform((-17, -17, -3.05), (17, 17, -3)),
  303. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  304. scale=rep.distribution.uniform((0.001, 0.001, 0.001), (0.001, 0.001, 0.001))
  305. # 单位:cm
  306. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  307. # rotation=rep.distribution.uniform((90, -35, -10), (90, 35, 10)),
  308. # scale=rep.distribution.uniform((0.05, 0.05, 0.05), (0.15, 0.15, 0.15))
  309. )
  310. # rep.physics.rigid_body(
  311. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  312. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  313. return instances_daisies_flower.node
  314. rep.randomizer.register(get_daisies_flower)
  315. # 灌木
  316. # 1.2m(高度到人类胸口) 灌木(绿色)
  317. def get_shrub(size):
  318. instances_shrub = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_SHRUB, recursive=True), size=size)
  319. with instances_shrub:
  320. rep.modify.pose(
  321. # 单位:m
  322. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  323. rotation=rep.distribution.uniform((0, 0, -90), (0, 0, 90)),
  324. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.008, 0.008, 0.008))
  325. # 单位:cm
  326. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  327. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  328. )
  329. # rep.physics.rigid_body(
  330. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  331. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  332. return instances_shrub.node
  333. rep.randomizer.register(get_shrub)
  334. # 0.9m(高度到人类腰部) 灌木(绿色)
  335. def get_Fountain_Grass_Short(size):
  336. Fountain_Grass_Short = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
  337. with Fountain_Grass_Short:
  338. rep.modify.pose(
  339. # 单位:m
  340. position=rep.distribution.uniform((-2, -2, 0), (0, 0, 0)),
  341. rotation=rep.distribution.uniform((0, 0, -90), (0, 0, 90)),
  342. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.008, 0.008, 0.008))
  343. # 单位:cm
  344. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  345. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  346. )
  347. # rep.physics.rigid_body(
  348. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  349. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  350. return Fountain_Grass_Short.node
  351. rep.randomizer.register(get_Fountain_Grass_Short)
  352. # 0.75m(高度到人类大腿中段) 灌木(绿色)
  353. def get_Boxwood(size):
  354. Boxwood = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
  355. with Boxwood:
  356. rep.modify.pose(
  357. # 单位:m
  358. position=rep.distribution.uniform((-5, -5, 0), (-5, 5, 0)),
  359. rotation=rep.distribution.uniform((0, 0, -90), (0, 0, 90)),
  360. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.008, 0.008, 0.008))
  361. # 单位:cm
  362. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  363. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  364. )
  365. # rep.physics.rigid_body(
  366. # velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  367. # angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  368. return Boxwood.node
  369. rep.randomizer.register(get_Boxwood)
  370. # 障碍物
  371. # 木质公园椅(浅黄色)
  372. def get_park_bench(size):
  373. instances_park_bench = rep.randomizer.instantiate(rep.utils.get_usd_files(PARK_BENCH, recursive=True), size=size)
  374. with instances_park_bench:
  375. rep.modify.pose(
  376. # 单位:m
  377. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  378. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  379. scale=rep.distribution.uniform((0.002, 0.002, 0.002), (0.002, 0.002, 0.002))
  380. # 单位:cm
  381. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  382. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  383. )
  384. rep.physics.rigid_body(
  385. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  386. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  387. return instances_park_bench.node
  388. rep.randomizer.register(get_park_bench)
  389. # 铁质公园椅(橙色)
  390. def get_park_bench_02(size):
  391. instances_park_bench_02 = rep.randomizer.instantiate(rep.utils.get_usd_files(PARK_BENCH_2, recursive=True), size=size)
  392. with instances_park_bench_02:
  393. rep.modify.pose(
  394. # 单位:m
  395. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  396. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  397. scale=rep.distribution.uniform((0.018, 0.018, 0.018), (0.018, 0.018, 0.018))
  398. # 单位:cm
  399. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  400. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  401. )
  402. rep.physics.rigid_body(
  403. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  404. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  405. return instances_park_bench_02.node
  406. rep.randomizer.register(get_park_bench_02)
  407. # 帐篷
  408. def get_park_tent(size):
  409. instances_park_tent = rep.randomizer.instantiate(rep.utils.get_usd_files(TENT, recursive=True), size=size)
  410. with instances_park_tent:
  411. rep.modify.pose(
  412. # 单位:m
  413. position=rep.distribution.uniform((-12, -12, 0), (12, 12, 0)),
  414. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  415. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.01, 0.01, 0.01))
  416. # 单位:cm
  417. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  418. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  419. )
  420. rep.physics.rigid_body(
  421. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  422. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  423. return instances_park_tent.node
  424. rep.randomizer.register(get_park_tent)
  425. # 铁质秋千
  426. def get_park_seesaw(size):
  427. instances_park_seesaw = rep.randomizer.instantiate(rep.utils.get_usd_files(SEESAW, recursive=True), size=size)
  428. with instances_park_seesaw:
  429. rep.modify.pose(
  430. # 单位:m
  431. position=rep.distribution.uniform((-17, -17, 1), (17, 17, 1)),
  432. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  433. scale=rep.distribution.uniform((0.008, 0.008, 0.008), (0.008, 0.008, 0.008))
  434. # 单位:cm
  435. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  436. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  437. )
  438. rep.physics.rigid_body(
  439. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  440. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  441. return instances_park_seesaw.node
  442. rep.randomizer.register(get_park_seesaw)
  443. # 铁质滑梯
  444. def get_park_slide(size):
  445. instances_park_slide = rep.randomizer.instantiate(rep.utils.get_usd_files(SLIDE, recursive=True), size=size)
  446. with instances_park_slide:
  447. rep.modify.pose(
  448. # 单位:m
  449. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  450. rotation=rep.distribution.uniform((90, 0, 0), (90, 0, 0)),
  451. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
  452. # 单位:cm
  453. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  454. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  455. )
  456. rep.physics.rigid_body(
  457. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  458. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  459. return instances_park_slide.node
  460. rep.randomizer.register(get_park_slide)
  461. # 消防栓(红色)
  462. def get_park_fire_hydrant(size):
  463. instances_park_fire_hydrant = rep.randomizer.instantiate(rep.utils.get_usd_files(FIRE_HYDRANT, recursive=True), size=size)
  464. with instances_park_fire_hydrant:
  465. rep.modify.pose(
  466. # 单位:m
  467. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  468. rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
  469. scale=rep.distribution.uniform((0.002, 0.002, 0.002), (0.002, 0.002, 0.002))
  470. # 单位:cm
  471. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  472. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  473. )
  474. rep.physics.rigid_body(
  475. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  476. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  477. return instances_park_fire_hydrant.node
  478. rep.randomizer.register(get_park_fire_hydrant)
  479. # 公园草地灯(下黑上白)
  480. def get_park_light(size):
  481. instances_park_light = rep.randomizer.instantiate(rep.utils.get_usd_files(LIGHT, recursive=True), size=size)
  482. with instances_park_light:
  483. rep.modify.pose(
  484. # 单位:m
  485. position=rep.distribution.uniform((-17, -17, 0), (17, 17, 0)),
  486. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  487. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  488. # 单位:cm
  489. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  490. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  491. )
  492. rep.physics.rigid_body(
  493. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  494. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  495. return instances_park_light.node
  496. rep.randomizer.register(get_park_light)
  497. # 木质箱(黄)
  498. def get_piles(size):
  499. instances_piles = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size, mode='point_instance')
  500. with instances_piles:
  501. rep.modify.pose(
  502. position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
  503. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  504. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  505. )
  506. rep.physics.rigid_body(
  507. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  508. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  509. return instances_piles.node
  510. rep.randomizer.register(get_piles)
  511. # 货架和货物(蓝色框架,纸质箱子)
  512. def get_racks(size):
  513. instances_racks = rep.randomizer.instantiate(rep.utils.get_usd_files(RACKS, recursive=True), size=size, mode='point_instance')
  514. with instances_racks:
  515. rep.modify.pose(
  516. position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
  517. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  518. scale=rep.distribution.uniform((0.004, 0.004, 0.004), (0.004, 0.004, 0.004))
  519. )
  520. rep.physics.rigid_body(
  521. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  522. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  523. return instances_racks.node
  524. rep.randomizer.register(get_racks)
  525. # 货架(蓝色框架)
  526. def get_shelves(size):
  527. instances_shelves = rep.randomizer.instantiate(rep.utils.get_usd_files(SHELVES, recursive=True), size=size, mode='point_instance')
  528. with instances_shelves:
  529. rep.modify.pose(
  530. position=rep.distribution.uniform((-10, -10, 0), (10, 10, 0)),
  531. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  532. scale=rep.distribution.uniform((0.004, 0.004, 0.004), (0.004, 0.004, 0.004))
  533. )
  534. rep.physics.rigid_body(
  535. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  536. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  537. return instances_shelves.node
  538. rep.randomizer.register(get_shelves)
  539. # 栏杆(黄色)
  540. def get_railing(size):
  541. instances_railing = rep.randomizer.instantiate(rep.utils.get_usd_files(RAILING, recursive=True), size=size, mode='point_instance')
  542. with instances_railing:
  543. rep.modify.pose(
  544. position=rep.distribution.uniform((-10, -5, 0), (-9, 5, 0)),
  545. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  546. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
  547. )
  548. rep.physics.rigid_body(
  549. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  550. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  551. return instances_railing.node
  552. rep.randomizer.register(get_railing)
  553. # 砖块 (淡灰色)
  554. def get_brick_grey(size):
  555. instances_brick_grey = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_GREY, recursive=True), size=size, mode='point_instance')
  556. with instances_brick_grey:
  557. rep.modify.pose(
  558. position=rep.distribution.uniform((-1, -1, 0), (1, 1, 0)),
  559. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  560. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
  561. )
  562. rep.physics.rigid_body(
  563. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  564. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  565. return instances_brick_grey.node
  566. rep.randomizer.register(get_brick_grey)
  567. # 砖块 (红色)杂乱一堆
  568. def get_brick_red_pile(size):
  569. instances_brick_red_pile = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_PILE, recursive=True), size=size, mode='point_instance')
  570. with instances_brick_red_pile:
  571. rep.modify.pose(
  572. position=rep.distribution.uniform((-4, -4, -0.4), (4, 4, -0.4)),
  573. rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
  574. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
  575. )
  576. rep.physics.rigid_body(
  577. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  578. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  579. return instances_brick_red_pile.node
  580. rep.randomizer.register(get_brick_red_pile)
  581. # 砖块 (红色)工整一堆
  582. def get_brick_red_cubepile(size):
  583. instances_red_cubepile2 = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_CUBEQILE, recursive=True), size=size, mode='point_instance')
  584. with instances_red_cubepile2:
  585. rep.modify.pose(
  586. position=rep.distribution.uniform((-2, -2, -2.2), (3, 3, -2.2)),
  587. rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
  588. scale=rep.distribution.uniform((0.005, 0.005, 0.005), (0.005, 0.005, 0.005))
  589. )
  590. rep.physics.rigid_body(
  591. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  592. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  593. return instances_red_cubepile2.node
  594. rep.randomizer.register(get_brick_red_cubepile)
  595. # 砖块 (红色)一块
  596. def get_brick_red_one(size):
  597. instances_brick_red_one = rep.randomizer.instantiate(rep.utils.get_usd_files(BRICK_RED_ONE, recursive=True), size=size, mode='point_instance')
  598. with instances_brick_red_one:
  599. rep.modify.pose(
  600. position=rep.distribution.uniform((-3.5, -3.5, 0.1), (-1, -1, 0.1)),
  601. rotation=rep.distribution.uniform((90, 0, -45), (90, 0, 45)),
  602. scale=rep.distribution.uniform((0.0002, 0.0002, 0.0002), (0.0002, 0.0002, 0.0002))
  603. )
  604. rep.physics.rigid_body(
  605. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  606. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  607. return instances_brick_red_one.node
  608. rep.randomizer.register(get_brick_red_one)
  609. # 分区域生成模型
  610. # 短草(绿色)
  611. def get_grass_area1(size):
  612. instances_grass_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
  613. with instances_grass_area1:
  614. rep.modify.semantics([('class', 'grass')])
  615. rep.modify.pose(
  616. # 单位:m
  617. position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 0)),
  618. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  619. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
  620. # 单位:cm
  621. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  622. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  623. )
  624. rep.physics.rigid_body(
  625. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  626. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  627. return instances_grass_area1.node
  628. rep.randomizer.register(get_grass_area1)
  629. def get_grass_area2(size):
  630. instances_grass_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
  631. with instances_grass_area2:
  632. rep.modify.semantics([('class', 'grass')])
  633. rep.modify.pose(
  634. # 单位:m
  635. position=rep.distribution.uniform((-17, 2, 0), (-2, 17, 0)),
  636. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  637. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
  638. # 单位:cm
  639. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  640. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  641. )
  642. rep.physics.rigid_body(
  643. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  644. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  645. return instances_grass_area2.node
  646. rep.randomizer.register(get_grass_area2)
  647. def get_grass_area3(size):
  648. instances_grass_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
  649. with instances_grass_area3:
  650. rep.modify.semantics([('class', 'grass')])
  651. rep.modify.pose(
  652. # 单位:m
  653. position=rep.distribution.uniform((2, -17, 0), (17, -2, 0)),
  654. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  655. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
  656. # 单位:cm
  657. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  658. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  659. )
  660. rep.physics.rigid_body(
  661. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  662. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  663. return instances_grass_area3.node
  664. rep.randomizer.register(get_grass_area3)
  665. def get_grass_area4(size):
  666. instances_grass_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_GRASS, recursive=True), size=size)
  667. with instances_grass_area4:
  668. rep.modify.semantics([('class', 'grass')])
  669. rep.modify.pose(
  670. # 单位:m
  671. position=rep.distribution.uniform((2, 2, 0), (17, 17, 0)),
  672. rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0)),
  673. scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.02, 0.02, 0.01))
  674. # 单位:cm
  675. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  676. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  677. )
  678. rep.physics.rigid_body(
  679. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  680. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  681. return instances_grass_area4.node
  682. rep.randomizer.register(get_grass_area4)
  683. # 小花(白色)
  684. def get_flower_area1(size):
  685. instances_flower_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
  686. with instances_flower_area1:
  687. rep.modify.pose(
  688. # 单位:m
  689. position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 0)),
  690. rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
  691. scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
  692. # 单位:cm
  693. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  694. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  695. )
  696. rep.physics.rigid_body(
  697. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  698. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  699. return instances_flower_area1.node
  700. rep.randomizer.register(get_flower_area1)
  701. def get_flower_area2(size):
  702. instances_flower_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
  703. with instances_flower_area2:
  704. rep.modify.pose(
  705. # 单位:m
  706. position=rep.distribution.uniform((-17, 2, 0), (-2, 17, 0)),
  707. rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
  708. scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
  709. # 单位:cm
  710. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  711. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  712. )
  713. rep.physics.rigid_body(
  714. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  715. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  716. return instances_flower_area2.node
  717. rep.randomizer.register(get_flower_area2)
  718. def get_flower_area3(size):
  719. instances_flower_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
  720. with instances_flower_area3:
  721. rep.modify.pose(
  722. # 单位:m
  723. position=rep.distribution.uniform((2, -17, 0), (17, -2, 0)),
  724. rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
  725. scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
  726. # 单位:cm
  727. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  728. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  729. )
  730. rep.physics.rigid_body(
  731. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  732. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  733. return instances_flower_area3.node
  734. rep.randomizer.register(get_flower_area3)
  735. def get_flower_area4(size):
  736. instances_flower_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PROPS_FLOWER, recursive=True), size=size)
  737. with instances_flower_area4:
  738. rep.modify.pose(
  739. # 单位:m
  740. position=rep.distribution.uniform((2, 2, 0), (17, 17, 0)),
  741. rotation=rep.distribution.uniform((85, -15, -10), (95, 15, 10)),
  742. scale=rep.distribution.uniform((0.00035, 0.00035, 0.00035), (0.00042, 0.00042, 0.00042))
  743. # 单位:cm
  744. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  745. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  746. )
  747. rep.physics.rigid_body(
  748. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  749. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  750. return instances_flower_area4.node
  751. rep.randomizer.register(get_flower_area4)
  752. # 木质箱(黄)
  753. def get_piles_area1(size):
  754. instances_piles_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
  755. with instances_piles_area1:
  756. rep.modify.pose(
  757. # 单位:m
  758. position=rep.distribution.uniform((-17, -17, 0), (-2, -2, 0)),
  759. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  760. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  761. # 单位:cm
  762. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  763. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  764. )
  765. rep.physics.rigid_body(
  766. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  767. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  768. return instances_piles_area1.node
  769. rep.randomizer.register(get_piles_area1)
  770. def get_piles_area2(size):
  771. instances_piles_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
  772. with instances_piles_area2:
  773. rep.modify.pose(
  774. # 单位:m
  775. # position=rep.distribution.uniform((-17, 17, 0), (-2, 2, 0)),
  776. position=rep.distribution.uniform((-17, 2, 0), (-2, 17, 0)),
  777. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  778. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  779. # 单位:cm
  780. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  781. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  782. )
  783. rep.physics.rigid_body(
  784. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  785. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  786. return instances_piles_area2.node
  787. rep.randomizer.register(get_piles_area2)
  788. def get_piles_area3(size):
  789. instances_piles_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
  790. with instances_piles_area3:
  791. rep.modify.pose(
  792. # 单位:m
  793. # position=rep.distribution.uniform((17, -17, 0), (2, -2, 0)),
  794. position=rep.distribution.uniform((2, -17, 0), (17, -2, 0)),
  795. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  796. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  797. # 单位:cm
  798. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  799. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  800. )
  801. rep.physics.rigid_body(
  802. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  803. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  804. return instances_piles_area3.node
  805. rep.randomizer.register(get_piles_area3)
  806. def get_piles_area4(size):
  807. instances_piles_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(PILES, recursive=True), size=size)
  808. with instances_piles_area4:
  809. rep.modify.pose(
  810. # 单位:m
  811. position=rep.distribution.uniform((2, 2, 0), (17, 17, 0)),
  812. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  813. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  814. # 单位:cm
  815. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  816. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  817. )
  818. rep.physics.rigid_body(
  819. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  820. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  821. return instances_piles_area4.node
  822. rep.randomizer.register(get_piles_area4)
  823. # 0.9m(高度到人类腰部) 灌木(绿色)
  824. def get_Fountain_area1(size):
  825. instances_Fountain_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
  826. with instances_Fountain_area1:
  827. rep.modify.pose(
  828. # 单位:m
  829. position=rep.distribution.uniform((-5, -5, 0), (-2, -2, 0)),
  830. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  831. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  832. # 单位:cm
  833. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  834. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  835. )
  836. rep.physics.rigid_body(
  837. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  838. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  839. return instances_Fountain_area1.node
  840. rep.randomizer.register(get_Fountain_area1)
  841. def get_Fountain_area2(size):
  842. instances_Fountain_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
  843. with instances_Fountain_area2:
  844. rep.modify.pose(
  845. # 单位:m
  846. position=rep.distribution.uniform((-5, 2, 0), (-2, 5, 0)),
  847. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  848. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  849. # 单位:cm
  850. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  851. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  852. )
  853. rep.physics.rigid_body(
  854. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  855. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  856. return instances_Fountain_area2.node
  857. rep.randomizer.register(get_Fountain_area2)
  858. def get_Fountain_area3(size):
  859. instances_Fountain_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
  860. with instances_Fountain_area3:
  861. rep.modify.pose(
  862. # 单位:m
  863. position=rep.distribution.uniform((2, -5, 0), (5, -2, 0)),
  864. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  865. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  866. # 单位:cm
  867. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  868. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  869. )
  870. rep.physics.rigid_body(
  871. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  872. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  873. return instances_Fountain_area3.node
  874. rep.randomizer.register(get_Fountain_area3)
  875. def get_Fountain_area4(size):
  876. instances_Fountain_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(FOUNTAIN_GRASS_SHORT, recursive=True), size=size)
  877. with instances_Fountain_area4:
  878. rep.modify.pose(
  879. # 单位:m
  880. position=rep.distribution.uniform((2, 2, 0), (5, 5, 0)),
  881. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  882. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  883. # 单位:cm
  884. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  885. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  886. )
  887. rep.physics.rigid_body(
  888. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  889. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  890. return instances_Fountain_area4.node
  891. rep.randomizer.register(get_Fountain_area4)
  892. # 0.75m(高度到人类大腿中段) 灌木(绿色)
  893. def get_Boxwood_area1(size):
  894. instances_Boxwood_area1 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
  895. with instances_Boxwood_area1:
  896. rep.modify.pose(
  897. # 单位:m
  898. position=rep.distribution.uniform((-5, -10, 0), (-5, -5, 0)),
  899. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  900. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  901. # 单位:cm
  902. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  903. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  904. )
  905. rep.physics.rigid_body(
  906. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  907. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  908. return instances_Boxwood_area1.node
  909. rep.randomizer.register(get_Boxwood_area1)
  910. def get_Boxwood_area2(size):
  911. instances_Boxwood_area2 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
  912. with instances_Boxwood_area2:
  913. rep.modify.pose(
  914. # 单位:m
  915. position=rep.distribution.uniform((-10, 5, 0), (-5, 5, 0)),
  916. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  917. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  918. # 单位:cm
  919. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  920. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  921. )
  922. rep.physics.rigid_body(
  923. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  924. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  925. return instances_Boxwood_area2.node
  926. rep.randomizer.register(get_Boxwood_area2)
  927. def get_Boxwood_area3(size):
  928. instances_Boxwood_area3 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
  929. with instances_Boxwood_area3:
  930. rep.modify.pose(
  931. # 单位:m
  932. position=rep.distribution.uniform((5, -5, 0), (10, -5, 0)),
  933. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  934. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  935. # 单位:cm
  936. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  937. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  938. )
  939. rep.physics.rigid_body(
  940. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  941. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  942. return instances_Boxwood_area3.node
  943. rep.randomizer.register(get_Boxwood_area3)
  944. def get_Boxwood_area4(size):
  945. instances_Boxwood_area4 = rep.randomizer.instantiate(rep.utils.get_usd_files(BOXWOOD, recursive=True), size=size)
  946. with instances_Boxwood_area4:
  947. rep.modify.pose(
  948. # 单位:m
  949. position=rep.distribution.uniform((5, 5, 0), (5, 10, 0)),
  950. rotation=rep.distribution.uniform((0, 0, -45), (0, 0, 45)),
  951. scale=rep.distribution.uniform((0.007, 0.007, 0.007), (0.007, 0.007, 0.007))
  952. # 单位:cm
  953. # position=rep.distribution.uniform((-1000, -1000, 0), (1000, 1000, 0)),
  954. # rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 0))
  955. )
  956. rep.physics.rigid_body(
  957. velocity=rep.distribution.uniform((-0,0,-0),(0,0,0)),
  958. angular_velocity=rep.distribution.uniform((-0,0,-100),(0,0,0)))
  959. return instances_Boxwood_area4.node
  960. rep.randomizer.register(get_Boxwood_area4)
  961. # 随机化
  962. with rep.trigger.on_frame(num_frames=1):
  963. # with rep.trigger.on_frame(num_frames=100,interval=10):
  964. # rep.randomizer.disk_lights() # 随机化光源
  965. rep.randomizer.dome_lights() # 随机穹顶
  966. rep.randomizer.get_ground() # 随机地面纹理
  967. # rep.randomizer.get_car(1) # 小车
  968. rep.randomizer.get_tree(15) # 4.5m 树(绿色)
  969. # rep.randomizer.get_tree_02(1) # 18m 树(绿色)
  970. rep.randomizer.get_grass(1200) # 短草(绿色)
  971. rep.randomizer.get_flower(450) # 小花(白色)
  972. rep.randomizer.get_daisies_flower(50) # 一簇小花(白色)
  973. # rep.randomizer.get_shrub(10) # 1.2m(高度到人类胸口) 灌木(绿色)
  974. # rep.randomizer.get_Fountain_Grass_Short(10) # 0.9m(高度到人类腰部) 灌木(绿色)
  975. # rep.randomizer.get_Boxwood(10) # 0.75m(高度到人类大腿中段) 灌木(绿色)
  976. # rep.randomizer.get_park_bench(3) # 木质公园椅(浅黄色)
  977. # rep.randomizer.get_park_bench_02(3) # 铁质公园椅(橙色)
  978. # rep.randomizer.get_park_tent(2) # 帐篷
  979. # rep.randomizer.get_park_seesaw(4) # 铁质秋千
  980. # rep.randomizer.get_park_slide(4) # 铁质滑梯
  981. # rep.randomizer.get_park_fire_hydrant(10) # 消防栓(红色)
  982. # rep.randomizer.get_park_light(20) # 公园草地灯(下黑上白)
  983. # rep.randomizer.get_piles(10) # 木质箱(黄)
  984. # rep.randomizer.get_racks(5) # 货架和货物(蓝色框架,纸质箱子)
  985. # rep.randomizer.get_shelves(5) # 货架(蓝色框架)
  986. # rep.randomizer.get_railing(10) # 栏杆(黄色)
  987. # rep.randomizer.get_brick_grey(10) # 砖块 淡灰色
  988. # rep.randomizer.get_brick_red_pile(3) # 砖块 (红色)杂乱一堆
  989. # rep.randomizer.get_brick_red_cubepile(2) # 砖块 (红色)工整一堆
  990. # rep.randomizer.get_brick_red_one(10) # 砖块 (红色)一块
  991. # 分区域进行随机化
  992. # 在isaacsim中,俯视角,横轴x水平向右,纵轴y垂直向上
  993. # 左下角为1区域,左上角为2区域,右下角为3区域,右上角为4区域
  994. # rep.randomizer.get_grass_area1(400) # 短草(绿色)
  995. # rep.randomizer.get_grass_area2(400)
  996. # rep.randomizer.get_grass_area3(400)
  997. # rep.randomizer.get_grass_area4(400)
  998. # rep.randomizer.get_flower_area1(100) # 小花(白色)
  999. # rep.randomizer.get_flower_area2(100)
  1000. # rep.randomizer.get_flower_area3(100)
  1001. # rep.randomizer.get_flower_area4(100)
  1002. # rep.randomizer.get_piles_area1(10) # 木质箱(黄)
  1003. # rep.randomizer.get_piles_area2(10)
  1004. # rep.randomizer.get_piles_area3(10)
  1005. # rep.randomizer.get_piles_area4(10)
  1006. # rep.randomizer.get_Fountain_area1(10) # 0.9m(高度到人类腰部) 灌木(绿色)
  1007. # rep.randomizer.get_Fountain_area2(10)
  1008. # rep.randomizer.get_Fountain_area3(10)
  1009. # rep.randomizer.get_Fountain_area4(10)
  1010. # rep.randomizer.get_Boxwood_area1(15) # 0.75m(高度到人类大腿中段) 灌木(绿色)
  1011. # rep.randomizer.get_Boxwood_area2(15)
  1012. # rep.randomizer.get_Boxwood_area3(15)
  1013. # rep.randomizer.get_Boxwood_area4(15)
  1014. # Initialize and attach writer
  1015. # writer = rep.WriterRegistry.get("BasicWriter")
  1016. # writer.initialize(
  1017. # output_dir= "/home/lxy/Desktop/Semantic_data/test",
  1018. # rgb=True,
  1019. # semantic_segmentation=True,
  1020. # colorize_semantic_segmentation=True,
  1021. # )
  1022. # 2
  1023. # writer.attach([render_product])
  1024. # with camera:
  1025. # rep.modify.pose(look_at=(0,0,0), position=rep.distribution.uniform(camera1_pos))
  1026. # # with camera2:
  1027. # # rep.modify.pose(look_at=(0,0,0), position=rep.distribution.uniform(camera2_pos))
  1028. # await asyncio.sleep(1)
  1029. # # 渲染图像大小
  1030. # # render_product = rep.create.render_product(camera, (1920, 1080))
  1031. # render_product = rep.create.render_product(camera, (640, 480))
  1032. # basic_writer = rep.WriterRegistry.get("BasicWriter")
  1033. # basic_writer.initialize(
  1034. # output_dir= "/home/lxy/Desktop/Semantic_data/0704",
  1035. # rgb=True, # RGB
  1036. # semantic_segmentation=True, # 语义分割
  1037. # # bounding_box_2d_loose=True, # 2D检测框(松散)
  1038. # # bounding_box_2d_tight=True, # 2D检测框(紧密)
  1039. # # bounding_box_3d=True, # 3D检测框
  1040. # # distance_to_camera=True, # 到相机距离
  1041. # # distance_to_image_plane=True, # 到图像平面的距离
  1042. # # instance_segmentation=True, # 实例分割
  1043. # # normals=True, # 法线
  1044. # # bbox_height_threshold=5, # 边界框高度阈值
  1045. # # fully_visible_threshold=0.75, # 视觉检测对象可见阈值
  1046. # # omit_semantic_type=True # 是否忽略特定语义类型的对象或信息
  1047. # )
  1048. # basic_writer.attach([render_product])
  1049. rep.orchestrator.run()
  1050. asyncio.ensure_future(example())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/792902
推荐阅读
相关标签
  

闽ICP备14008679号