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.
-
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)
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.
| 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.
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.
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.
Clone repository
git clone https://github.com/atecup/ATEC2026_Simulation_Challenge.git
cd ATEC2026_Simulation_ChallengeActivate Isaac Lab Environment
conda activate isaaclabInstall ATEC Extension
cd source/atec_rl_lab
pip install -e .After installation, all ATEC-* environments will be available in the active Python environment.
Download Robot Models
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_modelcd ATEC2026_Simulation_Challenge
python scripts/list_envs.pySuccessful execution will list all registered environments, confirming correct module loading.
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 visualizationExample:
python scripts/view_task_a.py --enable_cameras
Participants can test their solutions using:
cd ATEC2026_Simulation_Challenge
python scripts/play_atec_task.py --task ATEC-TaskA-G1 --enable_camerasParticipants 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.
Observations are grouped into:
Proprioception: base velocity, joint states, previous actionsExteroception: LiDAR-based height scanVision: RGB-D images from head and end-effector cameras
All observation terms are:
- noise-injected
- order-preserved
- concatenated per group
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)
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,
)
- 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.
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.
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 jointswheel: wheel jointsarm: manipulator joints
Each group may define the following fields:
mode: one of"position","velocity", or"effort"scale: positive floatclip:Noneor[min, max]
Example:
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.
This project is licensed under the MIT License - see the LICENSE file for details.










