# ATEC2026_Simulation_Challenge **Repository Path**: lpy1212/ATEC2026_Simulation_Challenge ## Basic Information - **Project Name**: ATEC2026_Simulation_Challenge - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-10 - **Last Updated**: 2026-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1. Introduction The ATEC 2026 Simulation Challenge provides a standardized suite of robot simulation environments built on IsaacLab, designed to evaluate both locomotion and loco-manipulation capabilities. Participants may select one or multiple legged robot platforms to complete a set of representative tasks, including *Off-road Navigation*, *Tabletop Manipulation*, *Garbage Collection*, and *Obstacle Traversal*. This repository includes simulation assets, task definitions, and reference scripts to support development, evaluation, and submission. --- ### 1.2 Robots and Sensors - **Robot platforms** - Humanoid: Unitree G1 (with two-finger gripper) - Dual-wheel legged + manipulator: Tron1 + AgileX Piper - Tron2A legged / wheel + manipulator - Quadruped + manipulator: Unitree B2 + AgileX Piper - Wheel-legged quadruped + manipulator: Unitree B2W + AgileX Piper - Manipulator-only: AgileX Piper - **Sensor suite** (standardized across platforms) - 1 × LiDAR - 1 × eye-to-hand RGB-D camera - 1 × eye-in-hand RGB-D camera *(humanoids use a stereo pair)* ## Robot Platforms | Humanoid | Dual-wheel legged + manipulator | Tron2A legged + manipulator | Tron2A wheel + manipulator | Quadruped + manipulator | Wheel-legged quadruped + manipulator | Manipulator | | :----------------------------------------------------: | :-------------------------------------------------------: | :-----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------: | :-----------------------------------------------------: | :-------------------------------------------------------: | |
|
|
|
|
|
|
|
> **Note:** Users may modify or optimize assets (e.g., collision geometry simplification) for training purposes. The provided assets serve as reference models for evaluation.
---
### 1.3 Challenge Arenas
| Arena | Video | Arena | Video |
| --- | --- | --- | --- |
| Task A · Off-road Navigation |
| Task E · Tabletop Manipulation |
|
| Task B · Garbage Collection |
| Task D · Obstacle Traversal |
|
> **Note:** For each task, participants are free to select any supported robot morphology.
---
### 1.4 Environment Matrix
The `atec_rl_lab.tasks` module registers all **arena–robot combinations** as Gym-compatible environments, enabling unified interfaces for evaluation and submission.
| Arena \ Robot | G1 | Tron1Piper | Tron2ALegged | Tron2AWheel | B2Piper | B2wPiper | Piper |
| ------------- | --------------- | ----------------------- | ------------------------- | ------------------------ | -------------------- | --------------------- | ------------------ |
| Task A | `ATEC-TaskA-G1` | `ATEC-TaskA-Tron1Piper` | `ATEC-TaskA-Tron2ALegged` | `ATEC-TaskA-Tron2AWheel` | `ATEC-TaskA-B2Piper` | `ATEC-TaskA-B2wPiper` | |
| Task B | `ATEC-TaskB-G1` | `ATEC-TaskB-Tron1Piper` | `ATEC-TaskB-Tron2ALegged` | `ATEC-TaskB-Tron2AWheel` | `ATEC-TaskB-B2Piper` | `ATEC-TaskB-B2wPiper` | |
| Task D | `ATEC-TaskD-G1` | `ATEC-TaskD-Tron1Piper` | `ATEC-TaskD-Tron2ALegged` | `ATEC-TaskD-Tron2AWheel` | `ATEC-TaskD-B2Piper` | `ATEC-TaskD-B2wPiper` | |
| Task E | | | | | | | `ATEC-TaskE-Piper` |
> **Note:** The provided environments are designed for evaluation and submission only and do not support parallelized training. For training, users should implement custom wrappers or leverage external frameworks for efficient learning.
---
## 2. Installation
This repository is developed and tested with **Isaac Lab v2.3.2**. Earlier versions (e.g., v1.4.1) are not validated and may require modification.
Follow the official Isaac Lab installation [guide](https://isaac-sim.github.io/IsaacLab/main/source/setup/installation/pip_installation.html).
### 2.1 Setup
Clone repository
```bash
git clone https://github.com/atecup/ATEC2026_Simulation_Challenge.git
cd ATEC2026_Simulation_Challenge
```
Activate Isaac Lab Environment
```bash
conda activate isaaclab
```
Install ATEC Extension
```bash
cd source/atec_rl_lab
pip install -e .
```
After installation, all `ATEC-*` environments will be available in the active Python environment.
Download Robot Models
```bash
cd ATEC2026_Simulation_Challenge
curl https://static.atecup.com/atec2026/atec_robot_model.zip -o atec_robot_model.zip
unzip atec_robot_model.zip -d atec_robot_model
```
---
## 3. Running the Environments
### 3.1 Environment Check
```bash
cd ATEC2026_Simulation_Challenge
python scripts/list_envs.py
```
Successful execution will list all registered environments, confirming correct module loading.
---
### 3.2 Visualization Utilities
```bash
scripts/view_robots.py – inspect robot models
scripts/view_task_a.py – Task A visualization
scripts/view_task_b.py – Task B visualization
scripts/view_task_d.py – Task D visualization
scripts/view_task_e.py – Task E visualization
```
Example:
```
python scripts/view_task_a.py --enable_cameras
```
---
### 3.3 Submission and Evaluation
Participants can test their solutions using:
```bash
cd ATEC2026_Simulation_Challenge
python scripts/play_atec_task.py --task ATEC-TaskA-G1 --enable_cameras
```
#### Implementation Requirement
Participants must implement demo/solution.py, and this file name can not be changed.
* Class: AlgSolution
* Optional Function: get_action_spec(), where participants may customize action mode, scale, and clip range. Return None to use the default action configuration.
* Function: predicts(obs, current_score), where **obs** is the observation, and **current_score** is the current score
* Return: {"action": action, "giveup": False}, where action is the prediction action represented by List, and **giveup** is the giveup flag. if **giveup** is True, the scoring job will be terminated.
### 3.4 Observations and Actions
#### Tasks A / B / D
Observations are grouped into:
- `Proprioception`: base velocity, joint states, previous actions
- `Exteroception`: LiDAR-based height scan
- `Vision`: RGB-D images from head and end-effector cameras
All observation terms are:
- noise-injected
- order-preserved
- concatenated per group
#### Task E (Manipulation-only)
Observations include:
- `Proprioception`: joint states (position + velocity)
- `Vision`: RGB-D images from end-effector and external camera
**Note:** Joint indices follow fixed ordering per robot (critical for policy deployment).
- b2_piper (20 DoF)
- b2w_piper (24 DoF)
- G1 (33 DoF)
- tron1a_piper (16 DoF)
- piper (8 DoF)
#### Action Space
Robot control actions are organized by joint type.
- Leg joints and manipulator joints are controlled by joint position commands.
- Wheel joints of wheeled robots are controlled by joint velocity commands.
The action configuration is as follows:
```
joint_leg = mdp.JointPositionActionCfg(
asset_name="robot",
joint_names=[""],
scale=0.5,
use_default_offset=True,
clip=None,
preserve_order=True,
)
joint_wheel = mdp.JointVelocityActionCfg(
asset_name="robot",
joint_names=[""],
scale=5.0,
use_default_offset=True,
clip=None,
preserve_order=True,
)
joint_arm = mdp.JointPositionActionCfg(
asset_name="robot",
joint_names=[""],
scale=0.5,
use_default_offset=True,
clip=None,
preserve_order=True,
)
```
##### Scaling rules
- Leg position commands are scaled by 0.5 before being applied to the robot.
- Arm position commands are scaled by 0.5 before being applied to the robot.
- Wheel velocity commands are scaled by 5.0 before being applied to the robot.
Different robots enable different action items according to their structure:
- Standard legged robots
(humanoid robots, quadruped mobile manipulator robots, manipulator) do not enable wheel velocity control.
- Wheeled legged robots
(Dual-wheel legged mobile manipulator robots, quadruped-wheel legged mobile manipulator robots)
enable wheel velocity control.
#### Custom Action Configuration
Participants may optionally customize the action configuration in `demo/solution.py` by implementing `AlgSolution.get_action_spec()`.
If `get_action_spec()` returns `None`, the official default action configuration is used.
```python
from typing import Any
class AlgSolution:
def get_action_spec(self) -> dict[str, dict[str, Any]] | None:
return None
def predicts(self, obs, current_score):
...
```
The returned action spec is a dictionary whose keys are action groups:
- `leg`: leg joints
- `wheel`: wheel joints
- `arm`: manipulator joints
Each group may define the following fields:
- `mode`: one of `"position"`, `"velocity"`, or `"effort"`
- `scale`: positive float
- `clip`: `None` or `[min, max]`
Example:
```python
from typing import Any
class AlgSolution:
def get_action_spec(self) -> dict[str, dict[str, Any]] | None:
return {
"leg": {
"mode": "position",
"scale": 1.0,
"clip": [-10.0, 10.0],
},
"wheel": {
"mode": "velocity",
"scale": 2.0,
"clip": [-11.0, 11.0],
},
"arm": {
"mode": "effort",
"scale": 3.0,
"clip": [-12.0, 12.0],
},
}
def predicts(self, obs, current_score):
...
```
Notes:
- Missing groups use the official default configuration.
- If a robot does not have a requested action group, that group is ignored.
- The joint names and joint order are inherited from the selected task and robot.
## Contributors
- **[CUHK Legged Robot Lab](https://cuhkleggedrobotlab.github.io/)**
- **[曾兆阳](https://zengzhaoyang.com/)**
- **[ATEC (Advanced Technology Exploration Community)](https://www.atecup.com)**
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.