Skip to content

Merge pull request #1178 from StanfordVL/a1 #193

Merge pull request #1178 from StanfordVL/a1

Merge pull request #1178 from StanfordVL/a1 #193

GitHub Actions / Test Results succeeded Apr 22, 2025 in 0s

146 passed, 3 failed and 13 skipped

Tests failed

Report Passed Failed Skipped Time
test_controllers.xml 1❌ 305s
test_curobo.xml 1✅ 829s
test_data_collection.xml 1✅ 734s
test_dump_load_states.xml 4✅ 818s
test_envs.xml 5✅ 712s
test_multiple_envs.xml 8✅ 2⚪ 587s
test_object_removal.xml 2✅ 680s
test_object_states.xml 33✅ 957s
test_primitives.xml 6✅ 4⚪ 1457s
test_robot_states_flatcache.xml 1✅ 2❌ 392s
test_robot_states_no_flatcache.xml 3✅ 370s
test_robot_teleoperation.xml 1⚪ 33ms
test_scene_graph.xml 1✅ 484s
test_sensors.xml 2✅ 616s
test_symbolic_primitives.xml 14✅ 6⚪ 954s
test_systems.xml 1✅ 686s
test_transform_utils.xml 34✅ 143s
test_transition_rules.xml 30✅ 867s

❌ test_controllers.xml

1 tests were completed in 305s with 0 passed, 1 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1❌ 305s

❌ pytest

tests.test_controllers
  ❌ test_arm_control
	def test_arm_control():

✅ test_curobo.xml

1 tests were completed in 829s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1✅ 829s

✅ pytest

tests.test_curobo
  ✅ test_curobo

✅ test_data_collection.xml

1 tests were completed in 734s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1✅ 734s

✅ pytest

tests.test_data_collection
  ✅ test_data_collect_and_playback

✅ test_dump_load_states.xml

4 tests were completed in 818s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 4✅ 818s

✅ pytest

tests.test_dump_load_states
  ✅ test_dump_load
  ✅ test_dump_load_serialized
  ✅ test_save_restore_partial
  ✅ test_save_restore_full

✅ test_envs.xml

5 tests were completed in 712s with 5 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 5✅ 712s

✅ pytest

tests.test_envs
  ✅ test_dummy_task
  ✅ test_point_reaching_task
  ✅ test_point_navigation_task
  ✅ test_behavior_task
  ✅ test_rs_int_full_load

✅ test_multiple_envs.xml

10 tests were completed in 587s with 8 passed, 0 failed and 2 skipped.

Test suite Passed Failed Skipped Time
pytest 8✅ 2⚪ 587s

✅ pytest

tests.test_multiple_envs
  ✅ test_multi_scene_dump_load_states
  ✅ test_multi_scene_get_local_position
  ✅ test_multi_scene_set_local_position
  ✅ test_multi_scene_scene_prim
  ✅ test_multi_scene_particle_source
  ✅ test_multi_scene_position_orientation_relative_to_scene
  ✅ test_tiago_getter
  ✅ test_tiago_setter
  ⚪ test_behavior_getter
  ⚪ test_behavior_setter

✅ test_object_removal.xml

2 tests were completed in 680s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 2✅ 680s

✅ pytest

tests.test_object_removal
  ✅ test_removal_and_readdition
  ✅ test_readdition

✅ test_object_states.xml

33 tests were completed in 957s with 33 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 33✅ 957s

✅ pytest

tests.test_object_states
  ✅ test_on_top
  ✅ test_inside
  ✅ test_under
  ✅ test_touching
  ✅ test_contact_bodies
  ✅ test_next_to
  ✅ test_overlaid
  ✅ test_pose
  ✅ test_joint
  ✅ test_aabb
  ✅ test_adjacency
  ✅ test_temperature
  ✅ test_max_temperature
  ✅ test_heat_source_or_sink
  ✅ test_cooked
  ✅ test_burnt
  ✅ test_frozen
  ✅ test_heated
  ✅ test_on_fire
  ✅ test_toggled_on
  ✅ test_attached_to
  ✅ test_particle_source
  ✅ test_particle_sink
  ✅ test_particle_applier
  ✅ test_particle_remover
  ✅ test_saturated
  ✅ test_open
  ✅ test_folded_unfolded
  ✅ test_draped
  ✅ test_filled
  ✅ test_contains
  ✅ test_covered
  ✅ test_clear_sim

✅ test_primitives.xml

10 tests were completed in 1457s with 6 passed, 0 failed and 4 skipped.

Test suite Passed Failed Skipped Time
pytest 6✅ 4⚪ 1457s

✅ pytest

tests.test_primitives.TestPrimitives
  ✅ test_navigate[Tiago]
  ✅ test_navigate[R1]
  ✅ test_grasp[Tiago]
  ✅ test_grasp[R1]
  ✅ test_place[Tiago]
  ✅ test_place[R1]
  ⚪ test_open_prismatic[Tiago]
  ⚪ test_open_prismatic[R1]
  ⚪ test_open_revolute[Tiago]
  ⚪ test_open_revolute[R1]

❌ test_robot_states_flatcache.xml

3 tests were completed in 392s with 1 passed, 2 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1✅ 2❌ 392s

❌ pytest

tests.test_robot_states_flatcache
  ✅ test_camera_pose_flatcache_on
  ❌ test_robot_load_drive
	def test_robot_load_drive():
  ❌ test_grasping_mode
	def test_grasping_mode():

✅ test_robot_states_no_flatcache.xml

3 tests were completed in 370s with 3 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 3✅ 370s

✅ pytest

tests.test_robot_states_no_flatcache
  ✅ test_camera_pose_flatcache_off
  ✅ test_camera_semantic_segmentation
  ✅ test_object_in_FOV_of_robot

✅ test_robot_teleoperation.xml

1 tests were completed in 33ms with 0 passed, 0 failed and 1 skipped.

Test suite Passed Failed Skipped Time
pytest 1⚪ 33ms

✅ pytest

tests.test_robot_teleoperation
  ⚪ test_teleop

✅ test_scene_graph.xml

1 tests were completed in 484s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1✅ 484s

✅ pytest

tests.test_scene_graph
  ✅ test_scene_graph

✅ test_sensors.xml

2 tests were completed in 616s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 2✅ 616s

✅ pytest

tests.test_sensors
  ✅ test_segmentation_modalities
  ✅ test_bbox_modalities

✅ test_symbolic_primitives.xml

20 tests were completed in 954s with 14 passed, 0 failed and 6 skipped.

Test suite Passed Failed Skipped Time
pytest 14✅ 6⚪ 954s

✅ pytest

tests.test_symbolic_primitives.TestSymbolicPrimitives
  ✅ test_in_hand_state[R1]
  ✅ test_open[R1]
  ✅ test_close[R1]
  ✅ test_place_inside[R1]
  ✅ test_place_ontop[R1]
  ✅ test_toggle_on[R1]
  ⚪ test_soak_under[R1]
  ⚪ test_wipe[R1]
  ⚪ test_cut[R1]
  ✅ test_persistent_sticky_grasping[R1]
  ✅ test_in_hand_state[Tiago]
  ✅ test_open[Tiago]
  ✅ test_close[Tiago]
  ✅ test_place_inside[Tiago]
  ✅ test_place_ontop[Tiago]
  ✅ test_toggle_on[Tiago]
  ⚪ test_soak_under[Tiago]
  ⚪ test_wipe[Tiago]
  ⚪ test_cut[Tiago]
  ✅ test_persistent_sticky_grasping[Tiago]

✅ test_systems.xml

1 tests were completed in 686s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 1✅ 686s

✅ pytest

tests.test_systems
  ✅ test_system_spawn_and_clear

✅ test_transform_utils.xml

34 tests were completed in 143s with 34 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 34✅ 143s

✅ pytest

tests.test_transform_utils.TestQuaternionOperations
  ✅ test_quat2mat_special_cases
  ✅ test_quat_multiply
  ✅ test_quat_conjugate
  ✅ test_quat_inverse
  ✅ test_quat_distance
tests.test_transform_utils.TestVectorOperations
  ✅ test_normalize
  ✅ test_dot_product
  ✅ test_l2_distance
tests.test_transform_utils.TestMatrixOperations
  ✅ test_rotation_matrix_properties
  ✅ test_rotation_matrix
  ✅ test_transformation_matrix
  ✅ test_transformation_matrix_no_point
  ✅ test_matrix_inverse
tests.test_transform_utils.TestCoordinateTransformations
  ✅ test_cartesian_to_polar
tests.test_transform_utils.TestPoseTransformations
  ✅ test_pose2mat_and_mat2pose
  ✅ test_pose_inv
tests.test_transform_utils.TestAxisAngleConversions
  ✅ test_axisangle2quat_and_quat2axisangle
  ✅ test_vecs2axisangle
  ✅ test_vecs2quat
tests.test_transform_utils.TestEulerAngleConversions
  ✅ test_euler2quat_and_quat2euler
  ✅ test_euler2mat_and_mat2euler
tests.test_transform_utils.TestQuaternionApplications
  ✅ test_quat_apply
  ✅ test_quat_slerp
tests.test_transform_utils.TestTransformPoints
  ✅ test_transform_points_2d
  ✅ test_transform_points_3d
tests.test_transform_utils.TestMiscellaneousFunctions
  ✅ test_convert_quat
  ✅ test_random_quaternion
  ✅ test_random_axis_angle
  ✅ test_align_vector_sets
  ✅ test_copysign
  ✅ test_anorm
  ✅ test_check_quat_right_angle
  ✅ test_z_angle_from_quat
  ✅ test_integer_spiral_coordinates

✅ test_transition_rules.xml

30 tests were completed in 867s with 30 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 30✅ 867s

✅ pytest

tests.test_transition_rules
  ✅ test_dryer_rule
  ✅ test_washer_rule
  ✅ test_slicing_rule
  ✅ test_dicing_rule_cooked
  ✅ test_dicing_rule_uncooked
  ✅ test_melting_rule
  ✅ test_cooking_physical_particle_rule_failure_recipe_systems
  ✅ test_cooking_physical_particle_rule_success
  ✅ test_mixing_rule_failure_recipe_systems
  ✅ test_mixing_rule_failure_nonrecipe_systems
  ✅ test_mixing_rule_success
  ✅ test_cooking_system_rule_failure_recipe_systems
  ✅ test_cooking_system_rule_failure_nonrecipe_systems
  ✅ test_cooking_system_rule_failure_nonrecipe_objects
  ✅ test_cooking_system_rule_success
  ✅ test_cooking_object_rule_failure_wrong_container
  ✅ test_cooking_object_rule_failure_recipe_objects
  ✅ test_cooking_object_rule_failure_unary_states
  ✅ test_cooking_object_rule_failure_binary_system_states
  ✅ test_cooking_object_rule_failure_binary_object_states
  ✅ test_cooking_object_rule_failure_wrong_heat_source
  ✅ test_cooking_object_rule_success
  ✅ test_single_toggleable_machine_rule_output_system_failure_wrong_container
  ✅ test_single_toggleable_machine_rule_output_system_failure_recipe_systems
  ✅ test_single_toggleable_machine_rule_output_system_failure_recipe_objects
  ✅ test_single_toggleable_machine_rule_output_system_failure_nonrecipe_systems
  ✅ test_single_toggleable_machine_rule_output_system_failure_nonrecipe_objects
  ✅ test_single_toggleable_machine_rule_output_system_success
  ✅ test_single_toggleable_machine_rule_output_object_failure_unary_states
  ✅ test_single_toggleable_machine_rule_output_object_success

Annotations

Check failure on line 0 in test_controllers.xml

See this annotation in the file changed.

@github-actions github-actions / Test Results

pytest ► tests.test_controllers ► test_arm_control

Failed test found in:
  test_controllers.xml
Error:
  def test_arm_control():
Raw output
def test_arm_control():
        # Create env
        cfg = {
            "scene": {
                "type": "Scene",
            },
            "objects": [],
            "robots": [
                {
                    "type": "FrankaPanda",
                    "name": "robot0",
                    "obs_modalities": [],
                    "position": [150, 150, 100],
                    "orientation": [0, 0, 0, 1],
                    "action_normalize": False,
                },
                {
                    "type": "Fetch",
                    "name": "robot1",
                    "obs_modalities": [],
                    "position": [150, 150, 105],
                    "orientation": [0, 0, 0, 1],
                    "action_normalize": False,
                },
                {
                    "type": "Tiago",
                    "name": "robot2",
                    "obs_modalities": [],
                    "position": [150, 150, 110],
                    "orientation": [0, 0, 0, 1],
                    "action_normalize": False,
                },
                {
                    "type": "A1",
                    "name": "robot3",
                    "obs_modalities": [],
                    "position": [150, 150, 115],
                    "orientation": [0, 0, 0, 1],
                    "action_normalize": False,
                },
                {
                    "type": "R1",
                    "name": "robot4",
                    "obs_modalities": [],
                    "position": [150, 150, 120],
                    "orientation": [0, 0, 0, 1],
                    "action_normalize": False,
                },
            ],
        }
    
>       env = og.Environment(configs=cfg)

tests/test_controllers.py:61: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
omnigibson/utils/python_utils.py:92: in wrapper
    func(*values.args, **values.kwargs)
omnigibson/envs/env_base.py:128: in __init__
    self.load()
omnigibson/envs/env_base.py:432: in load
    self._load_robots()
omnigibson/envs/env_base.py:291: in _load_robots
    self.scene.add_object(robot)
omnigibson/scenes/scene_base.py:627: in add_object
    obj.load(self)
omnigibson/objects/controllable_object.py:185: in load
    prim = super().load(scene)
omnigibson/objects/object_base.py:130: in load
    prim = super().load(scene)
omnigibson/prims/prim_base.py:113: in load
    self._prim = self._load()
omnigibson/objects/usd_object.py:128: in _load
    prim = add_asset_to_stage(asset_path=usd_path, prim_path=self.prim_path)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

asset_path = '/data/assets/models/a1/usd/a1.usda'
prim_path = '/World/scene_0/controllable__a1__robot3'

    def add_asset_to_stage(asset_path, prim_path):
        """
        Adds asset file (either USD or OBJ) at @asset_path at the location @prim_path
    
        Args:
            asset_path (str): Absolute or relative path to the asset file to load
            prim_path (str): Where loaded asset should exist on the stage
    
        Returns:
            Usd.Prim: Loaded prim as a USD prim
        """
        # Make sure this is actually a supported asset type
        asset_type = asset_path.split(".")[-1]
        assert asset_type in {"usd", "usda", "obj"}, "Cannot load a non-USD or non-OBJ file as a USD prim!"
    
        # Make sure the path exists
>       assert os.path.exists(asset_path), f"Cannot load {asset_type.upper()} file {asset_path} because it does not exist!"
E       AssertionError: Cannot load USDA file /data/assets/models/a1/usd/a1.usda because it does not exist!

omnigibson/utils/usd_utils.py:1857: AssertionError

Check failure on line 0 in test_robot_states_flatcache.xml

See this annotation in the file changed.

@github-actions github-actions / Test Results

pytest ► tests.test_robot_states_flatcache ► test_robot_load_drive

Failed test found in:
  test_robot_states_flatcache.xml
Error:
  def test_robot_load_drive():
Raw output
def test_robot_load_drive():
        if og.sim is None:
            # Set global flags
            gm.ENABLE_OBJECT_STATES = True
            gm.USE_GPU_DYNAMICS = True
            gm.ENABLE_TRANSITION_RULES = False
        else:
            # Make sure sim is stopped
            og.sim.stop()
    
        config = {
            "scene": {
                "type": "Scene",
            },
        }
    
        env = og.Environment(configs=config)
        og.sim.stop()
    
        # Iterate over all robots and test their motion
        for robot_name, robot_cls in REGISTERED_ROBOTS.items():
            if robot_name in ["FrankaMounted", "Stretch"]:
                # TODO: skipping FrankaMounted and Stretch for now because CI doesn't have the required assets
                continue
    
            if robot_name in ["Husky", "BehaviorRobot"]:
                # Husky base motion is a little messed up because of the 4-wheel drive; skipping for now
                # BehaviorRobot does not work with the primitive actions at the moment
                continue
    
            robot = robot_cls(
                name=robot_name,
                obs_modalities=[],
            )
>           env.scene.add_object(robot)

tests/test_robot_states_flatcache.py:163: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
omnigibson/scenes/scene_base.py:627: in add_object
    obj.load(self)
omnigibson/objects/controllable_object.py:185: in load
    prim = super().load(scene)
omnigibson/objects/object_base.py:130: in load
    prim = super().load(scene)
omnigibson/prims/prim_base.py:113: in load
    self._prim = self._load()
omnigibson/objects/usd_object.py:128: in _load
    prim = add_asset_to_stage(asset_path=usd_path, prim_path=self.prim_path)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

asset_path = '/data/assets/models/a1/usd/a1.usda'
prim_path = '/World/scene_0/controllable__a1__A1'

    def add_asset_to_stage(asset_path, prim_path):
        """
        Adds asset file (either USD or OBJ) at @asset_path at the location @prim_path
    
        Args:
            asset_path (str): Absolute or relative path to the asset file to load
            prim_path (str): Where loaded asset should exist on the stage
    
        Returns:
            Usd.Prim: Loaded prim as a USD prim
        """
        # Make sure this is actually a supported asset type
        asset_type = asset_path.split(".")[-1]
        assert asset_type in {"usd", "usda", "obj"}, "Cannot load a non-USD or non-OBJ file as a USD prim!"
    
        # Make sure the path exists
>       assert os.path.exists(asset_path), f"Cannot load {asset_type.upper()} file {asset_path} because it does not exist!"
E       AssertionError: Cannot load USDA file /data/assets/models/a1/usd/a1.usda because it does not exist!

omnigibson/utils/usd_utils.py:1857: AssertionError

Check failure on line 0 in test_robot_states_flatcache.xml

See this annotation in the file changed.

@github-actions github-actions / Test Results

pytest ► tests.test_robot_states_flatcache ► test_grasping_mode

Failed test found in:
  test_robot_states_flatcache.xml
Error:
  def test_grasping_mode():
Raw output
def test_grasping_mode():
        if og.sim is None:
            # Set global flags
            gm.ENABLE_FLATCACHE = True
        else:
            # Make sure sim is stopped
            og.sim.stop()
    
        scene_cfg = dict(type="Scene")
        objects_cfg = []
        objects_cfg.append(
            dict(
                type="DatasetObject",
                name="table",
                category="breakfast_table",
                model="lcsizg",
                bounding_box=[0.5, 0.5, 0.8],
                fixed_base=True,
                position=[0.7, -0.1, 0.6],
            )
        )
        objects_cfg.append(
            dict(
                type="PrimitiveObject",
                name="box",
                primitive_type="Cube",
                rgba=[1.0, 0, 0, 1.0],
                size=0.05,
                position=[0.53, 0.0, 0.87],
            )
        )
        cfg = dict(scene=scene_cfg, objects=objects_cfg)
    
>       env = og.Environment(configs=cfg)

tests/test_robot_states_flatcache.py:251: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
omnigibson/utils/python_utils.py:92: in wrapper
    func(*values.args, **values.kwargs)
omnigibson/envs/env_base.py:128: in __init__
    self.load()
omnigibson/envs/env_base.py:431: in load
    self._load_scene()
omnigibson/envs/env_base.py:257: in _load_scene
    og.sim.import_scene(self._scene)
omnigibson/simulator.py:718: in import_scene
    self._last_scene_edge = scene.load(
omnigibson/scenes/scene_base.py:450: in load
    self._pose = T.pose2mat(self._scene_prim.get_position_orientation())
omnigibson/prims/xform_prim.py:262: in get_position_orientation
    return PoseAPI.get_world_pose(self.prim_path)
omnigibson/utils/usd_utils.py:789: in get_world_pose
    position, orientation = get_world_pose(cls.PRIMS[prim_path])
omnigibson/utils/deprecated_utils.py:954: in get_world_pose
    return result_transform[:3, 3], R.from_matrix(result_transform[:3, :3]).as_quat()
_rotation.pyx:1144: in scipy.spatial.transform._rotation.Rotation.from_matrix
    ???
/isaac-sim/extscache/omni.kit.pip_archive-0.0.0+d02c707b.lx64.cp310/pip_prebundle/numpy/linalg/linalg.py:1681: in svd
    u, s, vh = gufunc(a, signature=signature, extobj=extobj)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

err = 'invalid value', flag = 8

    def _raise_linalgerror_svd_nonconvergence(err, flag):
>       raise LinAlgError("SVD did not converge")
E       numpy.linalg.LinAlgError: SVD did not converge

/isaac-sim/extscache/omni.kit.pip_archive-0.0.0+d02c707b.lx64.cp310/pip_prebundle/numpy/linalg/linalg.py:121: LinAlgError