Hi @928871883 - Can you start a regular thread to discuss the issue? this thread is specifically to provide the feedback for Isaac Sim
Hi @nathaniel7
- The Isaac Sim documentation clearly outlines the supported operating systems for Isaac Sim 4.5. The documentation will be updated accordingly when OS 24.04 is supported.
- Adding new assets to Isaac Sim must go through the proper channels, including legal procedures. We are unable to add any new assets directly into Isaac Sim. The Chinese manufacturer needs to collaborate with their NVIDIA counterparts in China to follow the necessary process before the asset can be included in Isaac Sim.
Hi @Big_Watermelon - Can you start a regular thread to discuss the issue? this thread is specifically to provide the feedback for Isaac Sim. It is probably some minor changes in your code that might require some update.
The scattered API with a huge surface area isn’t just an IsaacLab issue, though. It’s prob more of an IsaacSim issue than IsaacLab.
Standalone scripts often do not work properly with Isaac Sim 4.5.
Are standalone scripts deprecated?
@Big_Watermelon please post your question in the main thread to get answered, since this is a question/bug not a feedback.
@hijimasa no standalone scripts are not deprecated, and should work properly. If they don’t, please provide detail repro steps, so we can test and file a bug if broken.
@nathaniel7 you are right, 4.5 is not supported on Ubuntu 24.04, that is planned for next release coming this Spring. For robot support, although we are expanding our robot library, but you should be able to import any robot you want.
@928871883 please post this in the main thread so you get answered properly. This thread here is for feedbacks.
I am new to Isaac sim 4.5.
I couldn’t find enough resources to learn, I have taken the available Nvidia courses to start with Isaac Sim. I can implement them but I am still stuck and do not know how to do more and how to implement my application simulation. I have not found tutorials about controlling quadruped robotics, scripting to make controller, the right way to simulate such things… etc.
Tutorial 1: Create a Geometry Replicator Particle System — Omniverse Extensions
The tutorial doesn’t seem to work for IsaacSim. Importing USDA files causes it to freeze. Will there be support for this in the future?
2025-03-12 03:13:55 [63,362ms] [Warning] [omni.graph.core._impl.update_file_format] Prims of type ComputeGraphSettings no longer function. /World/particle_system/computegraphSettings has been disabled and should be deleted.
2025-03-12 03:13:55 [63,364ms] [Warning] [omni.graph.core._impl.update_file_format] Scene has migrated to use OmniGraph Schema - please save and reload. These changes were made:
{'Prim Nodes Removed': [], 'Prim Types Changed': [('/World/particle_system', 'ComputeGraph', 'OmniGraph'), ('/World/particle_system/solver', 'ComputeNode', 'OmniGraphNode'), ('/World/particle_system/emitter', 'ComputeNode', 'OmniGraphNode'), ('/World/particle_system/output', 'ComputeNode', 'OmniGraphNode'), ('/World/particle_system/direction_force_field', 'ComputeNode', 'OmniGraphNode'), ('/World/particle_system/particle_system_flow_emitter', 'ComputeNode', 'OmniGraphNode')], 'Root Prims Moved To Graph': [], 'Settings Removed': ['/World/particle_system/computegraphSettings']}
2025-03-12 03:13:55 [63,368ms] [Warning] [omni.graph.core.plugin] Could not find node type interface for 'omni.particle.system.core.Visualizer'
2025-03-12 03:13:55 [63,368ms] [Warning] [omni.graph.core.plugin] Could not find node type interface for 'omni.particle.system.core.FlowEmitter'
2025-03-12 03:13:55 [63,368ms] [Warning] [omni.graph.core.plugin] Could not find node type interface for 'omni.particle.system.core.Solver'
2025-03-12 03:13:55 [63,368ms] [Warning] [omni.graph.core.plugin] Could not find node type interface for 'omni.particle.system.core.DirectionField'
2025-03-12 03:13:55 [63,369ms] [Warning] [omni.graph.core.plugin] Could not find node type interface for 'omni.particle.system.core.Emitter'
Hi, could you open some examples/videos like converting the customized .stp file, .obj file, etc to the typical .usd file. I know that there are some tutorials on the website but could you provide some detailed example like drawing one cup/lamp with Onshape and convert it to the .usd file with typical prims structure.
The reason is that when I am importing some customized .step/.stp file into isaacsim as .usd file, it has complex prims structures and can not know explicit which one is collision mesh, which one should be set as articulation root prim.
Hello, I also want to use the geometry replicator for the particle system in isaacsim4.5. I would like to ask if this can be implemented through a python script?
I also want to know. Currently, I have only found physics examples, which seem to still be in the demo stage, and I haven’t found anything similar to the smoke in a particle system.
Does Isaac sim work on 5090d? I encountered some compatibility problem, not sure whether it is because of 5090d not supported.
Hello, I’m a beginner. I’m trying to implement a Carter example for the ROS2 Navigation2 package as a standalone Python script. To achieve this, I wrote the Carter robot’s action graph in a Python file and executed it as a standalone workflow. I confirmed that the camera, LiDAR, and clock data are being published correctly. However, when I try to check if the /tf data is being published properly by executing the command ros2 topic echo /tf
, the standalone Python file is forcibly terminated with a Segmentation fault (core dumped).
My complete code is as follows.
#!/usr/bin/env python3
import sys
import asyncio
import numpy as np
import rclpy
import time
import threading
import sensor_msgs.msg as sensor_msgs
import std_msgs.msg as std_msgs
from rclpy.node import Node
from builtin_interfaces.msg._time import Time
from astropy.coordinates import spherical_to_cartesian
from nav_msgs.msg import Odometry
from tf2_msgs.msg import TFMessage
from isaacsim import SimulationApp
CONFIG = {"renderer": "RaytracedLighting", "headless": False}
simulation_app = SimulationApp(CONFIG)
from isaacsim.core.utils.extensions import enable_extension
# Enable ROS bridge extension
enable_extension("isaacsim.ros2.bridge")
enable_extension("omni.graph.core")
enable_extension("omni.graph.action")
simulation_app.update()
import carb
import omni
import omni.graph.core as og
import usdrt.Sdf
import omni.replicator.core as rep
from isaacsim.core.api import SimulationContext
from isaacsim.core.utils import stage
from isaacsim.storage.native import get_assets_root_path
from omni.kit.viewport.utility import get_active_viewport
from pxr import Gf, Usd, UsdGeom, UsdShade, Sdf
from omni.isaac.core.utils.prims import is_prim_path_valid
# Locate Isaac Sim assets folder to load environment and robot stages
assets_root_path = get_assets_root_path()
if assets_root_path is None:
carb.log_error("Could not find Isaac Sim assets folder")
simulation_app.close()
sys.exit()
BACKGROUND_STAGE_PATH = "/Environment"
BACKGROUND_USD_PATH = "/Isaac/Environments/Simple_Warehouse/warehouse_with_forklifts.usd"
# Define the robot USD file path and stage path to load the robot.
ROBOT_USD_PATH = "/Isaac/Robots/Carter/nova_carter_sensors.usd"
ROBOT_STAGE_PATH = "/Nova_Carter_ROS"
# Basic environment setup
usd_stage = omni.usd.get_context().get_stage()
# Load the warehouse environment
stage.add_reference_to_stage(assets_root_path + BACKGROUND_USD_PATH, BACKGROUND_STAGE_PATH)
# Add the robot asset.
stage.add_reference_to_stage(assets_root_path + ROBOT_USD_PATH, ROBOT_STAGE_PATH)
robot_prim = omni.usd.get_context().get_stage().GetPrimAtPath(ROBOT_STAGE_PATH)
xformable = UsdGeom.Xformable(robot_prim)
# Clear all existing transform operations.
xformable.ClearXformOpOrder()
# Add a new translate operation.
translate_op = xformable.AddTranslateOp()
translate_op.Set(Gf.Vec3d(-6, -1, 0))
# Add a new rotate operation (in RotateXYZ order).
rotate_op = xformable.AddRotateXYZOp()
rotate_op.Set((0, 0, 180))
simulation_app.update()
# Create a graph for publishing clock information.
ROS_ClOCK_GRAPH_PATH = "/ROS_Clock"
clock_keys = og.Controller.Keys
(ros_clock_graph, _, _, _) = og.Controller.edit(
{
"graph_path": ROS_ClOCK_GRAPH_PATH,
"evaluator_name": "execution",
"pipeline_stage": og.GraphPipelineStage.GRAPH_PIPELINE_STAGE_ONDEMAND,
},
{
clock_keys.CREATE_NODES: [
("on_playback_tick", "omni.graph.action.OnPlaybackTick"),
("isaac_read_simulation_time", "isaacsim.core.nodes.IsaacReadSimulationTime"),
("ros2_publish_clock", "isaacsim.ros2.bridge.ROS2PublishClock"),
("ros2_context", "isaacsim.ros2.bridge.ROS2Context"),
],
clock_keys.CONNECT: [
("on_playback_tick.outputs:tick", "ros2_publish_clock.inputs:execIn"),
("ros2_context.outputs:context", "ros2_publish_clock.inputs:context"),
("isaac_read_simulation_time.outputs:simulationTime", "ros2_publish_clock.inputs:timeStamp"),
],
clock_keys.SET_VALUES: [
("ros2_context.inputs:domain_id", 0),
("ros2_publish_clock.inputs:topicName", "clock"),
],
},
)
# Create a graph for publishing camera information (depth, RGB, and camera info).
FRONT_HAWK_PATH = "/Nova_Carter_ROS/front_hawk"
FRONT_LEFT_CAMERA_PATH = "/Nova_Carter_ROS/chassis_link/front_hawk/left/camera_left"
front_hawk_keys = og.Controller.Keys
(front_hawk_graph, _, _, _) = og.Controller.edit(
{
"graph_path": FRONT_HAWK_PATH,
"evaluator_name": "execution",
"pipeline_stage": og.GraphPipelineStage.GRAPH_PIPELINE_STAGE_ONDEMAND,
},
{
front_hawk_keys.CREATE_NODES: [
("on_playback_tick", "omni.graph.action.OnPlaybackTick"),
("ros2_context", "isaacsim.ros2.bridge.ROS2Context"),
("left_camera_render_product", "isaacsim.core.nodes.IsaacCreateRenderProduct"),
("left_camera_publish_image", "isaacsim.ros2.bridge.ROS2CameraHelper"),
("left_camera_frame_id", "omni.graph.nodes.ConstantString"),
("isaac_run_one_simulation_frame", "isaacsim.core.nodes.OgnIsaacRunOneSimulationFrame"),
("camera_namespace", "omni.graph.nodes.ConstantString"),
("ros2_camera_info_helper", "isaacsim.ros2.bridge.ROS2CameraInfoHelper"),
("ros2_qos_profile", "isaacsim.ros2.bridge.ROS2QoSProfile"),
],
front_hawk_keys.CONNECT: [
("on_playback_tick.outputs:tick", "isaac_run_one_simulation_frame.inputs:execIn"),
("isaac_run_one_simulation_frame.outputs:step", "left_camera_render_product.inputs:execIn"),
("left_camera_render_product.outputs:execOut", "left_camera_publish_image.inputs:execIn"),
("left_camera_render_product.outputs:execOut", "ros2_camera_info_helper.inputs:execIn"),
("left_camera_render_product.outputs:renderProductPath", "left_camera_publish_image.inputs:renderProductPath"),
("left_camera_render_product.outputs:renderProductPath", "ros2_camera_info_helper.inputs:renderProductPath"),
("camera_namespace.inputs:value", "ros2_camera_info_helper.inputs:nodeNamespace"),
("camera_namespace.inputs:value", "left_camera_publish_image.inputs:nodeNamespace"),
("left_camera_frame_id.inputs:value", "ros2_camera_info_helper.inputs:frameId"),
("left_camera_frame_id.inputs:value", "left_camera_publish_image.inputs:frameId"),
("ros2_context.outputs:context", "ros2_camera_info_helper.inputs:context"),
("ros2_context.outputs:context", "left_camera_publish_image.inputs:context"),
("ros2_qos_profile.outputs:qosProfile", "ros2_camera_info_helper.inputs:qosProfile"),
("ros2_qos_profile.outputs:qosProfile", "left_camera_publish_image.inputs:qosProfile"),
],
front_hawk_keys.SET_VALUES: [
("camera_namespace.inputs:value", "/front_stereo_camera"),
("left_camera_frame_id.inputs:value", "map"),
("ros2_context.inputs:domain_id", 0),
("left_camera_render_product.inputs:cameraPrim", [Sdf.Path(FRONT_LEFT_CAMERA_PATH)]),
("left_camera_render_product.inputs:height", 1200),
("left_camera_render_product.inputs:width", 1920),
("left_camera_publish_image.inputs:topicName", "left/image_raw"),
("left_camera_publish_image.inputs:type", "rgb"),
("ros2_camera_info_helper.inputs:topicName", "left/camera_info"),
],
},
)
# Create a graph for publishing LiDAR information (/scan).
ROS_LIDAR_PATH = "/Nova_Carter_ROS/ros_lidars"
LIDAR_PATH = "/Nova_Carter_ROS/chassis_link/XT_32/PandarXT_32_10hz"
lidar_keys = og.Controller.Keys
(ros_lidar_graph, _, _, _) = og.Controller.edit(
{
"graph_path": ROS_LIDAR_PATH,
"evaluator_name": "execution",
"pipeline_stage": og.GraphPipelineStage.GRAPH_PIPELINE_STAGE_ONDEMAND,
},
{
lidar_keys.CREATE_NODES: [
("on_playback_tick", "omni.graph.action.OnPlaybackTick"),
("ros2_context", "isaacsim.ros2.bridge.ROS2Context"),
("front_3d_lidar_render_product", "isaacsim.core.nodes.IsaacCreateRenderProduct"),
("publish_front_3d_lidar_scan", "isaacsim.ros2.bridge.ROS2RtxLidarHelper"),
("isaac_run_one_simulation_frame", "isaacsim.core.nodes.OgnIsaacRunOneSimulationFrame"),
("node_namespace", "omni.graph.nodes.ConstantString"),
("ros2_qos_profile", "isaacsim.ros2.bridge.ROS2QoSProfile"),
],
lidar_keys.CONNECT: [
("on_playback_tick.outputs:tick", "isaac_run_one_simulation_frame.inputs:execIn"),
("isaac_run_one_simulation_frame.outputs:step", "front_3d_lidar_render_product.inputs:execIn"),
("front_3d_lidar_render_product.outputs:execOut", "publish_front_3d_lidar_scan.inputs:execIn"),
("front_3d_lidar_render_product.outputs:renderProductPath", "publish_front_3d_lidar_scan.inputs:renderProductPath"),
("node_namespace.inputs:value", "publish_front_3d_lidar_scan.inputs:nodeNamespace"),
("ros2_context.outputs:context", "publish_front_3d_lidar_scan.inputs:context"),
("ros2_qos_profile.outputs:qosProfile", "publish_front_3d_lidar_scan.inputs:qosProfile"),
],
lidar_keys.SET_VALUES: [
("ros2_context.inputs:domain_id", 0),
("front_3d_lidar_render_product.inputs:cameraPrim", [Sdf.Path(LIDAR_PATH)]),
("front_3d_lidar_render_product.inputs:height", 720),
("front_3d_lidar_render_product.inputs:width", 1280),
("publish_front_3d_lidar_scan.inputs:frameId", "front_3d_lidar"),
("publish_front_3d_lidar_scan.inputs:topicName", "front_3d_lidar/lidar_points"),
("publish_front_3d_lidar_scan.inputs:type", "point_cloud"),
],
},
)
# Create a graph for subscribing to twist information (/cmd_vel).
ROS_TWIST_PATH = "/Nova_Carter_ROS/differential_drive"
CONTROLLER_PATH = "/Nova_Carter_ROS/chassis_link"
twist_keys = og.Controller.Keys
(ros_twist_graph, _, _, _) = og.Controller.edit(
{
"graph_path": ROS_TWIST_PATH,
"evaluator_name": "execution",
"pipeline_stage": og.GraphPipelineStage.GRAPH_PIPELINE_STAGE_ONDEMAND,
},
{
twist_keys.CREATE_NODES: [
("on_playback_tick", "omni.graph.action.OnPlaybackTick"),
("ros2_context", "isaacsim.ros2.bridge.ROS2Context"),
("ros2_subscribe_twist", "isaacsim.ros2.bridge.ROS2SubscribeTwist"),
("break_3_vector", "omni.graph.nodes.BreakVector3"),
("break_3_vector_01", "omni.graph.nodes.BreakVector3"),
("joint_wheel_left_name", "omni.graph.nodes.ConstantToken"),
("joint_wheel_right_name", "omni.graph.nodes.ConstantToken"),
("joint_name_array", "omni.graph.nodes.ConstructArray"),
# Even if arraySize is set to 2 in the Python code, input1 is not recognized; therefore, an array_insert_value node is created and passed via the controller.
("joint_name_array_add", "omni.graph.nodes.ArrayInsertValue"),
("differential_controller_01", "isaacsim.robot.wheeled_robots.DifferentialController"),
("articulation_controller_01", "isaacsim.core.nodes.IsaacArticulationController"),
],
twist_keys.SET_VALUES: [
("ros2_context.inputs:domain_id", 0),
("articulation_controller_01.inputs:targetPrim", [Sdf.Path(CONTROLLER_PATH)]),
("ros2_subscribe_twist.inputs:topicName", "cmd_vel"),
("joint_name_array.inputs:arrayType", "token[]"),
("joint_name_array.inputs:input0", "joint_wheel_left"),
# Even if arraySize is set to 2 in the Python code, input1 is not recognized; therefore, an array_insert_value node is created and passed via the controller.
("joint_name_array_add.inputs:index", 1),
("joint_name_array_add.inputs:value", "joint_wheel_right"),
("differential_controller_01.inputs:maxAcceleration", 2),
("differential_controller_01.inputs:maxAngularAcceleration", 2.68),
("differential_controller_01.inputs:maxAngularSpeed", 3),
("differential_controller_01.inputs:maxDeceleration", 2),
("differential_controller_01.inputs:maxLinearSpeed", 2),
("differential_controller_01.inputs:wheelDistance", 0.413),
("differential_controller_01.inputs:wheelRadius", 0.14),
],
twist_keys.CONNECT: [
("on_playback_tick.outputs:tick", "ros2_subscribe_twist.inputs:execIn"),
("on_playback_tick.outputs:tick", "differential_controller_01.inputs:execIn"),
("on_playback_tick.outputs:tick", "articulation_controller_01.inputs:execIn"),
("on_playback_tick.outputs:deltaSeconds", "differential_controller_01.inputs:dt"),
("ros2_context.outputs:context", "ros2_subscribe_twist.inputs:context"),
("ros2_subscribe_twist.outputs:linearVelocity", "break_3_vector_01.inputs:tuple"),
("ros2_subscribe_twist.outputs:angularVelocity", "break_3_vector.inputs:tuple"),
("break_3_vector_01.outputs:x", "differential_controller_01.inputs:linearVelocity"),
("break_3_vector.outputs:z", "differential_controller_01.inputs:angularVelocity"),
("differential_controller_01.outputs:velocityCommand", "articulation_controller_01.inputs:velocityCommand"),
("joint_name_array.outputs:array", "joint_name_array_add.inputs:array"),
# Even if arraySize is set to 2 in the Python code, input1 is not recognized; therefore, an array_insert_value node is created and passed via the controller.
("joint_name_array_add.outputs:array", "articulation_controller_01.inputs:jointNames"),
],
},
)
# TF TREE and odometry data publish graph creation.
TF_TREE_PATH = "/Nova_Carter_ROS/transform_tree_odometry"
BASE_LINK_PATH = "/Nova_Carter_ROS/chassis_link/base_link"
CHASSIS_LINK_PATH = "/Nova_Carter_ROS/chassis_link"
FRONT_LEFT_PATH = "/Nova_Carter_ROS/chassis_link/front_hawk/left"
WHEEL_LEFT_PATH = "/Nova_Carter_ROS/caster_wheel_left"
odom_keys = og.Controller.Keys
(ros_odom_graph, _, _, _) = og.Controller.edit(
{
"graph_path": TF_TREE_PATH,
"evaluator_name": "execution",
},
{
odom_keys.CREATE_NODES: [
("on_playback_tick", "omni.graph.action.OnPlaybackTick"),
("ros2_context", "isaacsim.ros2.bridge.ROS2Context"),
("ros2_qos_profile", "isaacsim.ros2.bridge.ROS2QoSProfile"),
("isaac_compute_odometry_node", "isaacsim.core.nodes.IsaacComputeOdometry"),
("ros2_publish_raw_transform_tree", "isaacsim.ros2.bridge.ROS2PublishRawTransformTree"),
("ros2_publish_odometry", "isaacsim.ros2.bridge.ROS2PublishOdometry"),
("isaac_read_simulation_time", "isaacsim.core.nodes.IsaacReadSimulationTime"),
("tf_tree_base_link_to_chassis", "isaacsim.ros2.bridge.ROS2PublishTransformTree"),
("tf_tree_base_link_to_sensors", "isaacsim.ros2.bridge.ROS2PublishTransformTree"),
("tf_tree_base_link_to_wheel_base", "isaacsim.ros2.bridge.ROS2PublishTransformTree"),
],
odom_keys.CONNECT: [
("on_playback_tick.outputs:tick", "isaac_compute_odometry_node.inputs:execIn"),
("on_playback_tick.outputs:tick", "ros2_publish_odometry.inputs:execIn"),
("on_playback_tick.outputs:tick", "ros2_publish_raw_transform_tree.inputs:execIn"),
("on_playback_tick.outputs:tick", "tf_tree_base_link_to_chassis.inputs:execIn"),
("on_playback_tick.outputs:tick", "tf_tree_base_link_to_sensors.inputs:execIn"),
("on_playback_tick.outputs:tick", "tf_tree_base_link_to_wheel_base.inputs:execIn"),
("isaac_compute_odometry_node.outputs:angularVelocity", "ros2_publish_odometry.inputs:angularVelocity"),
("isaac_compute_odometry_node.outputs:linearVelocity", "ros2_publish_odometry.inputs:linearVelocity"),
("isaac_compute_odometry_node.outputs:orientation", "ros2_publish_odometry.inputs:orientation"),
("isaac_compute_odometry_node.outputs:orientation", "ros2_publish_raw_transform_tree.inputs:rotation"),
("isaac_compute_odometry_node.outputs:position", "ros2_publish_odometry.inputs:position"),
("isaac_compute_odometry_node.outputs:position", "ros2_publish_raw_transform_tree.inputs:translation"),
("ros2_qos_profile.outputs:qosProfile", "ros2_publish_odometry.inputs:qosProfile"),
("ros2_qos_profile.outputs:qosProfile", "ros2_publish_raw_transform_tree.inputs:qosProfile"),
("ros2_qos_profile.outputs:qosProfile", "tf_tree_base_link_to_chassis.inputs:qosProfile"),
("ros2_qos_profile.outputs:qosProfile", "tf_tree_base_link_to_sensors.inputs:qosProfile"),
("ros2_qos_profile.outputs:qosProfile", "tf_tree_base_link_to_wheel_base.inputs:qosProfile"),
("isaac_read_simulation_time.outputs:simulationTime", "ros2_publish_odometry.inputs:timeStamp"),
("isaac_read_simulation_time.outputs:simulationTime", "ros2_publish_raw_transform_tree.inputs:timeStamp"),
("isaac_read_simulation_time.outputs:simulationTime", "tf_tree_base_link_to_chassis.inputs:timeStamp"),
("isaac_read_simulation_time.outputs:simulationTime", "tf_tree_base_link_to_sensors.inputs:timeStamp"),
("isaac_read_simulation_time.outputs:simulationTime", "tf_tree_base_link_to_wheel_base.inputs:timeStamp"),
("ros2_context.outputs:context", "ros2_publish_odometry.inputs:context"),
("ros2_context.outputs:context", "ros2_publish_raw_transform_tree.inputs:context"),
("ros2_context.outputs:context", "tf_tree_base_link_to_chassis.inputs:context"),
("ros2_context.outputs:context", "tf_tree_base_link_to_sensors.inputs:context"),
("ros2_context.outputs:context", "tf_tree_base_link_to_wheel_base.inputs:context"),
],
odom_keys.SET_VALUES: [
("ros2_context.inputs:domain_id", 0),
("isaac_compute_odometry_node.inputs:chassisPrim", [Sdf.Path(CHASSIS_LINK_PATH)]),
("ros2_publish_raw_transform_tree.inputs:childFrameId", "base_link"),
("ros2_publish_raw_transform_tree.inputs:parentFrameId", "odom"),
("ros2_publish_raw_transform_tree.inputs:topicName", "tf"),
("ros2_publish_odometry.inputs:chassisFrameId", "base_link"),
("ros2_publish_odometry.inputs:odomFrameId", "odom"),
("ros2_publish_odometry.inputs:topicName", "chassis/odom"),
("tf_tree_base_link_to_chassis.inputs:parentPrim", [Sdf.Path(BASE_LINK_PATH)]),
("tf_tree_base_link_to_chassis.inputs:targetPrims", [Sdf.Path(CHASSIS_LINK_PATH)]),
("tf_tree_base_link_to_chassis.inputs:topicName", "tf"),
("tf_tree_base_link_to_sensors.inputs:parentPrim", [Sdf.Path(BASE_LINK_PATH)]),
("tf_tree_base_link_to_sensors.inputs:targetPrims", [Sdf.Path(FRONT_LEFT_CAMERA_PATH)]),
("tf_tree_base_link_to_sensors.inputs:targetPrims", [Sdf.Path(LIDAR_PATH)]),
("tf_tree_base_link_to_sensors.inputs:targetPrims", [Sdf.Path(FRONT_HAWK_PATH)]),
("tf_tree_base_link_to_sensors.inputs:targetPrims", [Sdf.Path(FRONT_LEFT_PATH)]),
("tf_tree_base_link_to_sensors.inputs:topicName", "tf"),
("tf_tree_base_link_to_wheel_base.inputs:parentPrim", [Sdf.Path(CHASSIS_LINK_PATH)]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path(WHEEL_LEFT_PATH)]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/caster_wheel_right")]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/caster_swivel_right")]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/caster_swivel_left")]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/wheel_left")]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/wheel_right")]),
("tf_tree_base_link_to_wheel_base.inputs:targetPrims", [Sdf.Path("/Nova_Carter_ROS/caster_frame_base")]),
("tf_tree_base_link_to_wheel_base.inputs:topicName", "tf"),
],
},
)
simulation_app.update()
simulation_context = SimulationContext(physics_dt=1.0 / 60.0, rendering_dt=1.0 / 60.0, stage_units_in_meters=1.0)
simulation_context.play()
simulation_context.step(render=True)
async def run_graph_evaluation():
# await og.Controller.evaluate()
# Execute the ROS clock graph.
await og.Controller.evaluate(ros_clock_graph)
# Execute the ROS camera graph so that the configured ROS image publishers are activated within the SDG Pipeline.
await og.Controller.evaluate(front_hawk_graph)
# Execute the ROS LiDAR publish graph.
await og.Controller.evaluate(ros_lidar_graph)
# Execute the ROS Twist subscribe graph.
await og.Controller.evaluate(ros_twist_graph)
# Execute the ROS TF tree and odometry publish graph.
await og.Controller.evaluate(ros_odom_graph)
# Main simulation loop: Evaluate the other ROS graphs.
def main_simulation_loop():
frame = 0
ros_task_started = False
# Simulate for one second to warm up sim and let everything settle.
for frame in range(60):
simulation_context.step(render=True)
simulation_app.update()
while simulation_app.is_running():
simulation_app.update()
simulation_context.step(render=True)
frame += 1
asyncio.run(run_graph_evaluation())
# Execute the main simulation loop.
try:
main_simulation_loop()
except KeyboardInterrupt:
pass
finally:
simulation_context.stop()
simulation_app.close()
rclpy.shutdown()
Regarding the above code, when the command
og.Controller.evaluate(ros_odom_graph)
is present in the code and I try to verify the /tf data with topic echo
, a segfault occurs, and the Python file is forcibly terminated. Also, when I try to run rviz2, the same segfault happens and the Python file is forcibly terminated. If I remove this command and run the code, the segfault problem does not occur. However, since the tf topic is essential for using the Navigation2 package, I need a solution for this issue. Could you please let me know what might be causing this problem?
Blackwell series were not supported on 4.5. They will be in the next release. coming soon.
please post this in the main thread to get help. This thread is for general feedback.
Hi IsaacSim Team,
Here are two key areas where we’d love to see improvement:
- Improved (quicker) ROS2 Support
ROS2 Jazzy has been out for nearly a year, and there is still no compatible bridge available. This delay makes it difficult for teams relying on up-to-date ROS2 versions to integrate Isaac Sim into their workflows effectively. Timely support for new ROS2 distributions is essential for keeping pace with the ecosystem and ensuring compatibility with other tools. - Clearer Release Timeline and Roadmap
Currently, planning around a vague release window like “sometime in 2025” is extremely challenging. While we understand that timelines for complex software projects can shift, clearer and more frequent communication would go a long way. Even a tentative date like “ROS2 Jazzy bridge support is expected May 30th, 2025” would be much more helpful, even if it later needs to be revised. Transparency builds trust and helps us make informed decisions.
We’ve been happy overall with IsaacSim, but due to these challenges (i.e. delayed ROS2 support + lack of roadmap), my team is currently evaluating alternative simulators.
I hope they get behind this - it is frustrating bouncing between Isaacsim 4.2 and 4.5 periodically.