feat: add test tube pick task with custom assets and grasp annotations

- Add pick_test_tube task: USDC asset repackaging, grasp generation, task config
- Add tools: usdc_to_obj.py, repackage_test_tube.py, fix_test_tube_materials.py
- Add custom_task_guide.md: full Chinese documentation for creating custom tasks
- Add crawled InternDataEngine online docs (23 pages)
- Add grasp generation script (gen_tube_grasp.py) and pipeline config
This commit is contained in:
Tangger
2026-04-05 11:01:59 +08:00
parent 6314603676
commit 3d6b73753a
36 changed files with 18013 additions and 0 deletions

View File

@@ -0,0 +1,372 @@
# Source: https://internrobotics.github.io/InternDataEngine-Docs/concepts/objects.html
# Objects [](#objects)
InternDataEngine supports various types of objects for simulation tasks. All object classes are located in `workflows/simbox/core/objects/ `.
## Supported Object Types [](#supported-object-types)
| Class | Description |
| `RigidObject ` | Rigid body objects with physics properties (graspable objects) |
| `GeometryObject ` | Static geometry objects without physics (tables, fixtures) |
| `ArticulatedObject ` | Articulated objects with joints (microwaves, drawers) |
| `PlaneObject ` | Simple planes with textures (floors, backgrounds) |
| `XFormObject ` | Transform-only objects |
| `ShapeObject ` | Basic geometric shapes |
| `ConveyorObject ` | Conveyor belt objects |
## RigidObject [](#rigidobject)
`RigidObject `is used for objects that have physical properties and can be manipulated by robots. It inherits from Isaac Sim's `RigidPrim `and supports collision detection, mass properties, and texture randomization.
__init__(self, asset_root, root_prim_path, cfg, *args, **kwargs)
Initialize a rigid object in the simulation scene.
Parameters:
- **asset_root **( str ): Root path for asset files.
- **root_prim_path **( str ): Root prim path in USD stage.
- **cfg **( dict ): Configuration dictionary containing:
- **name **( str ): Object name.
- **path **( str ): USD file path relative to asset_root.
- **prim_path_child **( str ): Child prim path for rigid body.
- **translation **( list , optional): Initial translation [x, y, z].
- **euler **( list , optional): Initial euler rotation [rx, ry, rz] in degrees.
- **scale **( list , optional): Scale factor [sx, sy, sz].
- **mass **( float , optional): Object mass.
- ** **kwargs **: Additional keyword arguments passed to `RigidPrim `.
### Config Example [](#config-example)
yaml
```
objects:
-
name: pick_object_left
path: pick_and_place/pre-train-pick/assets/omniobject3d-banana/omniobject3d-banana_001/Aligned_obj.usd
target_class: RigidObject
dataset: oo3d
category: "omniobject3d-banana"
prim_path_child: Aligned
translation: [0.0, 0.0, 0.0]
euler: [0.0, 0.0, 0.0]
scale: [0.001, 0.001, 0.001]
apply_randomization: True
orientation_mode: "suggested"
```
1
2
3
4
5
6
7
8
9
10
11
12
13
### Configuration Parameters [](#configuration-parameters)
- **name **( str ): Unique identifier for this object instance.
- **path **( str ): Path to the USD file containing the object mesh.
- **target_class **( str ): Must be `RigidObject `for rigid bodies.
- **dataset **( str ): Dataset source identifier.
- **category **( str ): Object category name.
- **prim_path_child **( str ): Name of the child prim that contains the mesh.
- **translation **( list ): Initial position [x, y, z] in world coordinates.
- **euler **( list ): Initial rotation in degrees [roll, pitch, yaw].
- **scale **( list ): Scale factors for each axis.
- **apply_randomization **( bool ): Whether to apply domain randomization.
- **orientation_mode **( str ): Orientation mode for randomization.
## GeometryObject [](#geometryobject)
`GeometryObject `is used for static objects without physics simulation. It's ideal for environmental objects like tables, shelves, or fixtures that don't need to interact physically with other objects.
__init__(self, asset_root, root_prim_path, cfg, *args, **kwargs)
Initialize a geometry object in the simulation scene.
Parameters:
- **asset_root **( str ): Root path for asset files.
- **root_prim_path **( str ): Root prim path in USD stage.
- **cfg **( dict ): Configuration dictionary containing:
- **name **( str ): Object name.
- **path **( str ): USD file path relative to asset_root.
- **prim_path_child **( str , optional): Child prim path suffix.
- ** **kwargs **: Additional keyword arguments passed to `GeometryPrim `.
Difference from RigidObject:
- No physics simulation (no mass, no collision response)
- Lighter weight for static environment objects
- Cannot be grasped or moved by robots
### Config Example [](#config-example-1)
yaml
```
objects:
-
name: table
path: table0/instance.usd
target_class: GeometryObject
translation: [0.0, 0.0, 0.375]
scale: [0.001, 0.001053, 0.001056]
```
1
2
3
4
5
6
7
### Configuration Parameters [](#configuration-parameters-1)
- **name **( str ): Unique identifier for this object.
- **path **( str ): Path to the USD file.
- **target_class **( str ): Must be `GeometryObject `for static geometry.
- **translation **( list ): Position in world coordinates.
- **scale **( list ): Scale factors for each axis.
## PlaneObject [](#planeobject)
`PlaneObject `creates simple planes with optional texture mapping. It's commonly used for floors, backgrounds, and other flat surfaces.
__init__(self, asset_root, root_prim_path, cfg, *args, **kwargs)
Initialize a plane object in the simulation scene.
Parameters:
- **asset_root **( str ): Root path for asset files.
- **root_prim_path **( str ): Root prim path in USD stage.
- **cfg **( dict ): Configuration dictionary containing:
- **name **( str ): Object name.
- **size **( list ): Plane dimensions [width, height].
- **translation **( list , optional): Position [x, y, z].
- **euler **( list , optional): Rotation in degrees [roll, pitch, yaw].
- **texture **( dict , optional): Texture configuration.
- ** **kwargs **: Additional keyword arguments.
### Config Example [](#config-example-2)
yaml
```
objects:
-
name: floor
target_class: PlaneObject
size: [5.0, 5.0]
translation: [0, 0, 0]
texture:
texture_lib: "floor_textures"
apply_randomization: True
texture_id: 1
texture_scale: [1.0, 1.0]
-
name: background0
target_class: PlaneObject
size: [3.0, 5.0]
translation: [-2, 0, 1]
euler: [0.0, 90.0, 0.0]
texture:
texture_lib: "background_textures"
apply_randomization: True
texture_id: 1
texture_scale: [1.0, 1.0]
-
name: background1
target_class: PlaneObject
size: [3.0, 5.0]
translation: [2, 0, 1]
euler: [0.0, 90.0, 0.0]
texture:
texture_lib: "background_textures"
apply_randomization: True
texture_id: 1
texture_scale: [1.0, 1.0]
-
name: background2
target_class: PlaneObject
size: [5.0, 3.0]
translation: [0, -2, 1]
euler: [90.0, 0.0, 0.0]
texture:
texture_lib: "background_textures"
apply_randomization: True
texture_id: 1
texture_scale: [1.0, 1.0]
-
name: background3
target_class: PlaneObject
size: [5.0, 3.0]
translation: [0, 2, 1]
euler: [90.0, 0.0, 0.0]
texture:
texture_lib: "background_textures"
apply_randomization: True
texture_id: 1
texture_scale: [1.0, 1.0]
```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
### Configuration Parameters [](#configuration-parameters-2)
- **name **( str ): Unique identifier for the plane.
- **target_class **( str ): Must be `PlaneObject `.
- **size **( list ): Plane dimensions [width, height].
- **translation **( list ): Position [x, y, z].
- **euler **( list ): Rotation angles [roll, pitch, yaw] in degrees.
- **texture.texture_lib **( str ): Name of texture library folder.
- **texture.apply_randomization **( bool ): Whether to randomize texture selection.
- **texture.texture_id **( int ): Specific texture ID (used when randomization is False).
- **texture.texture_scale **( list ): Scale factors for texture UV mapping.
## ArticulatedObject [](#articulatedobject)
`ArticulatedObject `handles objects with movable joints, such as microwaves, drawers, and cabinets. It inherits from Isaac Sim's `Articulation `class and provides methods for joint control and state retrieval.
__init__(self, asset_root, root_prim_path, cfg, *args, **kwargs)
Initialize an articulated object in the simulation scene. Loads articulation info from the specified `info.json `file.
Parameters:
- **asset_root **( str ): Root path for asset files.
- **root_prim_path **( str ): Root prim path in USD stage.
- **cfg **( dict ): Configuration dictionary containing:
- **name **( str ): Object name.
- **path **( str ): USD file path relative to asset_root.
- **info_name **( str ): Name of the skill folder containing `info.json `.
- **category **( str ): Object category identifier.
- **euler **( list , optional): Initial rotation [roll, pitch, yaw].
- **joint_position_range **( list , optional): Random range for initial joint position [min, max].
- **apply_randomization **( bool , optional): Whether to apply domain randomization.
- ** **kwargs **: Additional keyword arguments passed to `Articulation `.
get_articulated_info(self, object_info)
Parse and store articulation information from the object's info.json file. This method extracts keypoints, joint paths, scale information, and axis orientations.
Parameters:
- **object_info **( dict ): Dictionary loaded from `Kps/{skill}/info.json `containing:
- **object_keypoints **( dict ): Keypoint positions in link_0 frame.
- **object_scale **( list ): Object scale factors.
- **object_prim_path **( str ): Prim path for the object.
- **object_link_path **( str ): Prim path for the articulated link.
- **object_base_path **( str ): Prim path for the base link.
- **object_joint_path **( str ): Prim path for the joint.
- **joint_index **( int ): Index of the main joint.
- **object_link0_rot_axis **( str ): Rotation axis of the link.
- **object_base_front_axis **( str ): Front axis of the base.
get_joint_position(self, stage)
Count and configure joints in the articulated object. This method identifies prismatic and revolute joints, and optionally fixes the base of the articulated object.
Parameters:
- **stage **( UsdStage ): The USD stage containing the articulation.
Sets the following attributes:
- **object_joint_number **( int ): Total number of joints found.
### Config Example [](#config-example-3)
yaml
```
objects:
-
name: close_v_left
target_class: ArticulatedObject
info_name: "close_v"
euler: [0.0, 0.0, 90.0]
joint_position_range: [0.6, 0.8]
apply_randomization: False
path: "art/microwave_gr/microwave7119/instance.usd"
category: "microwave_gr"
```
1
2
3
4
5
6
7
8
9
10
### Configuration Parameters [](#configuration-parameters-3)
- **name **( str ): Unique identifier for the articulated object.
- **target_class **( str ): Must be `ArticulatedObject `.
- **info_name **( str ): Name of the skill folder containing `info.json `.
- **euler **( list ): Initial rotation [roll, pitch, yaw] in degrees.
- **joint_position_range **( list ): Random range for initial joint position [min, max].
- **apply_randomization **( bool ): Whether to apply domain randomization.
- **path **( str ): Path to the USD file (relative to asset_root).
- **category **( str ): Object category identifier.