I am currently simulating a forklift in an Isaac Sim warehouse using Docker in headless mode. To initiate the simulation, I execute the following command within the Docker container:
./python.sh ./load_forklift_headless.py --usd_path ./forklift_cam_laser.usd
Where forklift_cam_laser.usd
is the USD file for simulation, and load_forklift_headless.py
is the Python script responsible for initializing the simulation environment.
However, I encounter an issue with enabling the “omni.anim.people” extension within the Python script. Specifically, the line enable_extension("omni.anim.people")
causes an error stating that the extension does not exist. This problem only occurs in headless mode; when I run the simulation without headless mode, I can successfully simulate people without any issues.
FInd below the load_forklift_headless.py code and an image on what is happening when the simulation gets played.
`
import argparse
from omni.isaac.kit import SimulationApp
import carb
import omni
import sys
import os
#This sample loads a usd stage and starts simulation
CONFIG = {
“width”: 1280,
“height”: 720,
“window_width”: 1920,
“window_height”: 1080,
“headless”: True,
“renderer”: “RayTracedLighting”,
“display_options”: 3286, # Set display options to show default grid
}
set up command line arguments
parser = argparse.ArgumentParser(“Usd Load sample”)
parser.add_argument(
“–usd_path”, type=str, help=“Path to usd file on your local machine”, required=True
)
parser.add_argument(“–test”, default=False, action=“store_true”, help=“Run in test mode”)
args, unknown = parser.parse_known_args()
kit = SimulationApp(launch_config=CONFIG)
from omni.isaac.core.utils.extensions import enable_extension
#Default Livestream settings
kit.set_setting(“/app/livestream/enabled”, True)
kit.set_setting(“/app/window/drawMouse”, True)
kit.set_setting(“/app/livestream/proto”, “ws”)
kit.set_setting(“/app/livestream/websocket/framerate_limit”, 120)
kit.set_setting(“/ngx/enabled”, False)
enable ROS bridge
enable_extension(“omni.isaac.ros_bridge”)
#EnableAnim People
enable_extension(“omni.anim.people”)
make sure the file exists before we try to open it
try:
result = os.path.isfile(args.usd_path)
except:
result = False
if result:
omni.usd.get_context().open_stage(args.usd_path)
else:
carb.log_error(
f"the usd file {args.usd_path} could not be opened, please make sure the path is correct."
)
kit.close()
sys.exit()
#Wait two frames so that stage starts loading
kit.update()
kit.update()
print(“Loading stage…”)
from omni.isaac.core.utils.stage import is_stage_loading
while is_stage_loading():
kit.update()
print(“Loading Complete”)
try:
#Attempt to play the timeline
omni.timeline.get_timeline_interface().play()
except Exception as e:
print(f"An error occurred while playing the timeline: {str(e)}")
#Run in test mode, exit after a fixed number of steps
if args.test is True:
for i in range(10):
# Run in realtime mode, we don’t specify the step size
kit.update()
else:
while kit.is_running():
# Run in realtime mode, we don’t specify the step size
kit.update()
omni.timeline.get_timeline_interface().stop()
kit.close()|
`