Difficulty Enabling the "omni.anim.people" Extension in Headless Mode with python

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()|
`

Hi @atop1 - Are you following this document for Omni.anim,people extension?
https://docs.omniverse.nvidia.com/isaacsim/latest/features/warehouse_logistics/ext_omni_anim_people.html

1 Like

Yes I was following that. It worked great. But activating it in a docker container is the issue.
I know to activate the ros bridge in a python script, I can use the function below.

enable ROS bridge enable_extension(“omni.isaac.ros_bridge”)

But I don’t know the function for using the omni anime people in a python script is my challenge.

Hello @rthaker . Any updates?

Hi @atop1 - I have reached out to Dev to prioritize this. They were busy with GTC related things until last week.

Thanks @rthaker. I will be waiting for hem

The enable_extension command should work for “omni.anim.people”. Can you please share which Isaac Sim container you are trying this in?