# Environment
This document provides the guide of environment installation, config parameters description and I/O Specifications.
## Table of Contents
1. [Calvin](#Calvin)
2. [Simpler-env](#Simpler-env)
3. [Genmanip](#Genmanip)
# Calvin (WIP)
# Simpler-env (WIP)
# Genmanip
## 1. Environment Dependency Installation (Conda)
Step 1: Verify installation of Anaconda and Isaac Sim 4.5.0. You can download Isaac Sim 4.5.0 from [here](https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.5.0-rc.36%2Brelease.19112.f59b3005.gl.linux-x86_64.release.zip) and extract to target directory.
Step 2: Execute installation script:
```bash
./install.sh --genmanip
# !Note
# - When prompted, provide Isaac Sim 4.5 folder path
# - Post-installation, activate Conda environment: `conda activate genmanip`
```
## 2. Evaluation Environment Configuration Parameters
Evaluation requires configuration file declaring `evalcfg.env.env_setting` as `GenmanipEnvSettings` implementation:
```python
eval_cfg = EvalCfg(
eval_type="genmanip",
agent=AgentCfg(...),
env=EnvCfg(
env_type="genmanip",
env_settings=GenmanipEnvSettings(
dataset_path="path/to/genmanip/benchmark_data",
eval_tasks=["task1", "task2", ...],
res_save_path="path/to/save/results",
is_save_img=False,
camera_enable=CameraEnable(realsense=False, obs_camera=False, obs_camera_2=False),
depth_obs=False,
gripper_type="panda",
env_num=1,
max_step=500,
max_success_step=100,
physics_dt=1/30,
rendering_dt=1/30,
headless=True,
ray_distribution=None,
)
),
...
)
```
**Core Parameters**
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dataset_path` | str | None | If None, it will be automatically downloaded from Hugging Face dataset [URL](https://huggingface.co/datasets/OpenRobotLab/InternBench-M1) on the first run. |
| `eval_tasks` | list[str] | ALL_EVAL_TASKS | Subset of 18 predefined tasks (validate against `internmanip.configs.env.genmanip_env.ALL_EVAL_TASKS`) |
| `res_save_path` | str | None | Evaluation results storage directory (disabled if None).|
| `is_save_img` | bool | False | Enable per-step multi-camera image capture (requires disk space) |
| `camera_enable` | CameraEnable | `CameraEnable(realsense=False, `
`obs_camera=False, obs_camera_2=False)` | Camera activation config:
• `realsense`: Ego-view gripper cam
• `obs_camera`: Fixed rear-view cam
• `obs_camera_2`: Fixed front-view cam |
| `depth_obs` | bool | False | Generate depth maps for active cameras |
| `gripper_type` | enum | "panda" | End effector selection (`"panda"` or `"robotiq"`) |
| `max_step` | int | 500 | Episode termination step threshold |
| `headless` | bool | True | Disable GUI |
**Advanced Parameters**
| Parameter | Scope |
|-----------|-------|
| `max_success_step` | Early termination upon task completion |
| `physics_dt` | Physics simulation timestep|
| `rendering_dt` | Render interval|
| `env_num` | Concurrent environment instances in one isaac sim |
| `ray_distribution` | Multi-process config (`RayDistributionCfg`):
• `proc_num`: Process count
• `gpu_num_per_proc`: GPUs per process #
e.g., `RayDistributionCfg(proc_num=2, gpu_num_per_proc=0.5, head_address=None, working_dir=None)`|
> **Concurrency Note**: When `env_num > 1` or `ray_distribution.proc_num > 1`, environment outputs become multi-instance tensors. Agents must process batched observations and return batched actions.
## 3. I/O Specifications: Environment Outputs and Action Data Formats
**Observation Structure**
```python
observations: List[Dict] = [
{
"franka_robot": {
"robot_pose": Tuple[array, array], # (position, oritention(quaternion))
"joints_state": {
"positions": array,
"velocities": array
},
"eef_pose": Tuple[array, array], # (position, oritention(quaternion))
"sensors": {
"realsense": {
"rgb": array, # uint8 (480, 640, 3)
"depth": array, # float32 (480, 640)
},
"obs_camera": {
"rgb": array,
"depth": array,
},
"obs_camera_2": {
"rgb": array,
"depth": array,
},
},
"instruction": str,
"metric": {
"task_name": str,
"episode_name": str,
"episode_sr": int,
"first_success_step": int,
"episode_step": int
},
"step": int,
"render": bool
}
},
...
]
```
**Action Space Specifications**
Agents must output `List[Union[ActionFormat1, ActionFormat2, ..., ActionFormat5]]` of the same length as the input observations.
```python
actions: List[Union[ActionFormat1, ActionFormat2, ..., ActionFormat5]] = [
ActionFormat1,
ActionFormat2,
...
]
```
Supported action formats:
**ActionFormat1**:
```python
List[float] # (9,) or (13,) -> panda or robotiq
```
**ActionFormat2**:
```python
{
'arm_action': List[float], # (7,)
'gripper_action': List[float], # (2,) or (9,) -> panda or robotiq
}
```
**ActionFormat3**:
```python
{
'arm_action': List[float], # (7,)
'gripper_action': int, # -1 or 1 -> open or close
}
```
**ActionFormat4**:
```python
{
'eef_position': List[float], # (3,) -> (x, y, z)
'eef_orientation': List[float], # (4,) -> (quaternion)
'gripper_action': List[float], # (2,) or (9,) -> panda or robotiq
}
```
**ActionFormat5**:
```python
{
'eef_position': List[float], # (3,) -> (x, y, z)
'eef_orientation': List[float], # (4,) -> (quaternion)
'gripper_action': int, # -1 or 1 -> open or close
}
```
**None Handling Protocol**: If observation element is `None` or invalid value, corresponding action must be `[]`.