Isaac Sim 使用方式与典型场景
四、使用方式与典型场景
示例一:Python 独立脚本启动仿真并控制关节
Isaac Sim 的模块路径在不同大版本之间有过调整,下面的写法是较新版本的组织方式,实际模块名以所装版本的文档为准。
from isaacsim import SimulationApp
# 启动应用,headless=True 时不显示界面
simulation_app = SimulationApp({"headless": True})
import numpy as np
from isaacsim.core.api import World
from isaacsim.core.utils.stage import add_reference_to_stage
from isaacsim.core.utils.types import ArticulationAction
world = World(stage_units_in_meters=1.0)
asset_path = "/projects/assets/robot.usd"
add_reference_to_stage(usd_path=asset_path, prim_path="/World/Robot")
world.reset()
robot = world.scene.get_object("Robot")
joint_targets = np.zeros(robot.num_dof)
for step in range(500):
joint_targets[:] = 0.3 * np.sin(step * 0.02)
robot.apply_action(ArticulationAction(joint_positions=joint_targets))
world.step(render=False)
print("final joint positions:", robot.get_joint_positions())
simulation_app.close()
要点:SimulationApp 必须先创建,之后才能导入其它模块;world.step(render=False) 在只采数据时能显著提速。
示例二:用 Replicator 生成合成数据
import omni.replicator.core as rep
with rep.new_layer():
camera = rep.create.camera(position=(0, 0, 2.0), look_at=(0, 0, 0))
rp = rep.create.render_product(camera, (1280, 720))
target = rep.get.prims(path_pattern="/World/Target")
with rep.trigger.on_frame(num_frames=500):
with target:
rep.modify.pose(
position=rep.distribution.uniform((-0.5, -0.5, 0.05),
(0.5, 0.5, 0.4)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 360)),
)
rep.randomizer.lighting()
writer = rep.WriterRegistry.get("BasicWriter")
writer.initialize(output_dir="/projects/out",
rgb=True,
bounding_box_2d_tight=True,
semantic_segmentation=True)
writer.attach([rp])
这段脚本每帧随机改变目标物体的位姿与光照,并把彩色图与标注同步写出。真实项目里还会把背景纹理、相机内外参、材质粗糙度一起随机化,随机化的维度越接近真机的变化范围,迁移效果越好。
示例三:与 ROS2 联动
source /opt/ros/humble/setup.bash
# 启动带 ROS2 Bridge 的仿真,具体启动脚本名以所装版本为准
./python.sh /projects/scripts/run_ros2_bridge.py --ros_distro humble
ros2 topic list
ros2 topic hz /clock
ros2 topic echo /joint_states --once
ros2 run rviz2 rviz2
桥接起来之后,仿真里的机器人对 ROS2 来说就是一个普通节点:可以用 ros2_control 的控制器驱动,也可以直接在 RViz2 里看 TF 和传感器。
适合与不适合
- 适合:合成数据生成与感知模型训练、GPU 并行强化学习、需要物理真实感光照的数字孪生、规模化场景随机化测试。
- 不适合:没有 RTX 显卡的机器、只需要跑通导航逻辑的日常验证(Gazebo 更快更省事)、软体或特殊接触物理的精确分析、对启动时间敏感的 CI 单元测试。

