The initial pose of the robot is not corrent

When I add a robot from .usd file to the world scene, the initial pose of the robot is not correct (a bit 90 y-axis rotated and a bit 15 x-axis rotated). But if I use world.stop and, the robot pose becomes correct. I’m not sure if using world.stop is the correct way to reset the pose, but anybody knows what is the correct way to load the robot with the correct pose? I will do RL for my later implementation, using world.stop will stop the simulation completely, which is not good for the RL training.

I attached my code to below.

import os

curr_path = os.path.abspath(os.path.dirname(__file__))

asset_path = curr_path + "asset/WheeledTennisRobot/tennis_robot.usd"

from omni.isaac.kit import SimulationApp

simulation_app = SimulationApp({"headless": False})

from omni.isaac.core import World

from omni.isaac.core.robots import Robot

from omni.isaac.core.utils.stage import add_reference_to_stage, get_stage_units

from omni.isaac.core.utils.types import ArticulationAction

from omni.isaac.core import SimulationContext

import numpy as np

import argparse

import sys

my_world = World(stage_units_in_meters=1.0)


add_reference_to_stage(usd_path=asset_path, prim_path="/World/Robot")

tennis_robot = my_world.scene.add(Robot(prim_path="/World/Robot/tennis_robot", name="robot1"))

tennis_robot.set_world_pose(position=np.array([0.0, 0.0, 1.0]) / get_stage_units())



# ********************************using stop and play, the pose becomes correct
# *****************************************************

while simulation_app.is_running():




Hi there, this issue may be caused by a difference in parsing of the ArticulationRoot prim in the stage. Could you try attaching the ArticulationRootAPI to the root body link in your asset?

Yes. This is solved by reassign the correct link as articulation root.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.