# ntnu-arl/olympus_lab architecture

> Architecture diagram of the GitHub repository ntnu-arl/olympus_lab, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ntnu-arl/olympus_lab
- Repository: https://github.com/ntnu-arl/olympus_lab

## Overview

Olympus-Lab provides Isaac Lab reinforcement-learning environments for quadruped walking, horizontal and vertical jumping, and in-flight attitude control. The main workflow is a training or playback invocation selecting a task, which creates a task-specific simulation environment; the RL policy supplies actions and receives observations and rewards as the simulated Olympus robot evolves. Task environments also handle initialization, curricula, and task state where applicable. The README documents Earth, Mars, and zero-gravity variants plus policy playback; paths and call links for some of these capabilities are only supported at directory level because their implementation was not sampled.

Main entry points: [`envs/jump/jump_env.py`](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_env.py) (Jump environment), [`envs/vertical_jump/vertical_jump_env.py`](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/vertical_jump_env.py) (Vertical jump environment), [`envs/walk/walk_env.py`](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/walk/walk_env.py) (Walking environment), [`play.py`](https://github.com/ntnu-arl/olympus_lab/blob/main/play.py) (Play policy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Policy workflows"]
  node_train["Train policy<br/>[train.py]"]
  node_play["Play policy<br/>[play.py]"]
end

subgraph group_tasks["Locomotion tasks"]
  node_walk["Walking environment<br/>[walk_env.py]"]
  node_jump["Jump environment<br/>[jump_env.py]"]
  node_vertical["Vertical jump environment"]
  node_attitude["Attitude environment"]
  node_jump_play["Jump playback setup<br/>[jump_play_env.py]"]
  node_vertical_play["Vertical playback setup"]
  node_mars["Mars task variants"]
end

subgraph group_robotics["Robot and control"]
  node_robot["Olympus articulation<br/>[olympus.py]"]
  node_actuator["CubeMars actuators"]
  node_motor_filter["Motor command filter"]
  node_kinematics["Kinematics"]
end

subgraph group_support["Task support"]
  node_initializers["Jump initializers"]
  node_vertical_initializers["Vertical initializers"]
  node_jump_state["Jump state machine"]
  node_vertical_state["Vertical state machine"]
  node_curriculum["Jump curricula<br/>[curriculum.py]"]
  node_vertical_curriculum["Vertical curriculum<br/>[curriculum.py]"]
  node_logs["Simulation logging<br/>[logger.py]"]
end

node_user(("Task user"))
node_isaac["Isaac Lab simulator"]
node_rlgames["RL Games"]

node_user -->|"selects task"| node_train
node_user -->|"selects task"| node_play
node_train -->|"trains policy"| node_rlgames
node_rlgames -->|"steps environment"| node_walk
node_rlgames -->|"steps environment"| node_jump
node_rlgames -->|"steps environment"| node_vertical
node_rlgames -->|"steps environment"| node_attitude
node_play -->|"runs task"| node_walk
node_play -->|"runs task"| node_jump_play
node_play -->|"runs task"| node_vertical_play
node_play -->|"runs task"| node_attitude
node_jump_play -->|"configures playback"| node_jump
node_vertical_play -->|"configures playback"| node_vertical
node_walk -->|"simulates"| node_isaac
node_jump -->|"simulates"| node_isaac
node_vertical -->|"simulates"| node_isaac
node_attitude -->|"simulates"| node_isaac
node_walk -->|"controls articulation"| node_robot
node_jump -->|"controls articulation"| node_robot
node_vertical -->|"controls articulation"| node_robot
node_attitude -->|"controls articulation"| node_robot
node_robot -->|"uses actuators"| node_actuator
node_walk -.->|"filters commands"| node_motor_filter
node_jump -.->|"filters commands"| node_motor_filter
node_walk -.->|"uses calculations"| node_kinematics
node_jump -.->|"initializes episodes"| node_initializers
node_vertical -.->|"initializes episodes"| node_vertical_initializers
node_jump -.->|"updates state"| node_jump_state
node_vertical -.->|"updates state"| node_vertical_state
node_jump -.->|"uses curriculum"| node_curriculum
node_vertical -.->|"uses curriculum"| node_vertical_curriculum
node_walk -.->|"logs episodes"| node_logs
node_jump -.->|"logs episodes"| node_logs
node_vertical -.->|"logs episodes"| node_logs
node_attitude -.->|"logs episodes"| node_logs
node_mars -.->|"provides Mars tasks"| node_walk
node_mars -.->|"provides Mars tasks"| node_jump
node_mars -.->|"provides Mars tasks"| node_vertical

click node_train "https://github.com/ntnu-arl/olympus_lab/blob/main/train.py"
click node_play "https://github.com/ntnu-arl/olympus_lab/blob/main/play.py"
click node_walk "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/walk/walk_env.py"
click node_jump "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_env.py"
click node_vertical "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/vertical_jump_env.py"
click node_attitude "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/attitude_control/attitude_control_env.py"
click node_jump_play "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_play_env.py"
click node_vertical_play "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/vertical_jump_play_env.py"
click node_initializers "https://github.com/ntnu-arl/olympus_lab/tree/main/envs/jump/initalization"
click node_vertical_initializers "https://github.com/ntnu-arl/olympus_lab/tree/main/envs/vertical_jump/initalization"
click node_jump_state "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_state_machine.py"
click node_vertical_state "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/jump_state_machine.py"
click node_curriculum "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/curriculum.py"
click node_vertical_curriculum "https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/curriculum.py"
click node_robot "https://github.com/ntnu-arl/olympus_lab/blob/main/robot/olympus.py"
click node_actuator "https://github.com/ntnu-arl/olympus_lab/blob/main/robot/cube_mars/cubmars_actuator_model.py"
click node_motor_filter "https://github.com/ntnu-arl/olympus_lab/blob/main/control/motor_command_filter.py"
click node_kinematics "https://github.com/ntnu-arl/olympus_lab/tree/main/kinematics"
click node_logs "https://github.com/ntnu-arl/olympus_lab/blob/main/logger/logger.py"
click node_mars "https://github.com/ntnu-arl/olympus_lab/tree/main/envs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_train,node_play toneBlue
class node_walk,node_jump,node_vertical,node_attitude,node_jump_play,node_vertical_play,node_mars toneAmber
class node_robot,node_actuator,node_motor_filter,node_kinematics toneMint
class node_initializers,node_vertical_initializers,node_jump_state,node_vertical_state,node_curriculum,node_vertical_curriculum,node_logs,node_user toneRose
class node_isaac,node_rlgames toneIndigo
```

## Components

### Policy workflows

- [Train policy](https://github.com/ntnu-arl/olympus_lab/blob/main/train.py): `train.py`
- [Play policy](https://github.com/ntnu-arl/olympus_lab/blob/main/play.py): `play.py`

### Locomotion tasks

- [Walking environment](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/walk/walk_env.py): `envs/walk/walk_env.py`
- [Jump environment](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_env.py): `envs/jump/jump_env.py`
- [Vertical jump environment](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/vertical_jump_env.py): `envs/vertical_jump/vertical_jump_env.py`
- [Attitude environment](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/attitude_control/attitude_control_env.py): `envs/attitude_control/attitude_control_env.py`
- [Jump playback setup](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_play_env.py): `envs/jump/jump_play_env.py`
- [Vertical playback setup](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/vertical_jump_play_env.py): `envs/vertical_jump/vertical_jump_play_env.py`
- [Mars task variants](https://github.com/ntnu-arl/olympus_lab/tree/main/envs): `envs`

### Robot and control

- [Olympus articulation](https://github.com/ntnu-arl/olympus_lab/blob/main/robot/olympus.py): `robot/olympus.py`
- [CubeMars actuators](https://github.com/ntnu-arl/olympus_lab/blob/main/robot/cube_mars/cubmars_actuator_model.py): `robot/cube_mars/cubmars_actuator_model.py`
- [Motor command filter](https://github.com/ntnu-arl/olympus_lab/blob/main/control/motor_command_filter.py): `control/motor_command_filter.py`
- [Kinematics](https://github.com/ntnu-arl/olympus_lab/tree/main/kinematics): `kinematics`

### Task support

- [Jump initializers](https://github.com/ntnu-arl/olympus_lab/tree/main/envs/jump/initalization): `envs/jump/initalization`
- [Vertical initializers](https://github.com/ntnu-arl/olympus_lab/tree/main/envs/vertical_jump/initalization): `envs/vertical_jump/initalization`
- [Jump state machine](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/jump_state_machine.py): `envs/jump/jump_state_machine.py`
- [Vertical state machine](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/jump_state_machine.py): `envs/vertical_jump/jump_state_machine.py`
- [Jump curricula](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/jump/curriculum.py): `envs/jump/curriculum.py`
- [Vertical curriculum](https://github.com/ntnu-arl/olympus_lab/blob/main/envs/vertical_jump/curriculum.py): `envs/vertical_jump/curriculum.py`
- [Simulation logging](https://github.com/ntnu-arl/olympus_lab/blob/main/logger/logger.py): `logger/logger.py`

### Other components

- **Task user**
- **Isaac Lab simulator**
- **RL Games**

## Connections

- Task user → Train policy: selects task
- Task user → Play policy: selects task
- Train policy → RL Games: trains policy
- RL Games → Walking environment: steps environment
- RL Games → Jump environment: steps environment
- RL Games → Vertical jump environment: steps environment
- RL Games → Attitude environment: steps environment
- Play policy → Walking environment: runs task
- Play policy → Jump playback setup: runs task
- Play policy → Vertical playback setup: runs task
- Play policy → Attitude environment: runs task
- Jump playback setup → Jump environment: configures playback
- Vertical playback setup → Vertical jump environment: configures playback
- Walking environment → Isaac Lab simulator: simulates
- Jump environment → Isaac Lab simulator: simulates
- Vertical jump environment → Isaac Lab simulator: simulates
- Attitude environment → Isaac Lab simulator: simulates
- Walking environment → Olympus articulation: controls articulation
- Jump environment → Olympus articulation: controls articulation
- Vertical jump environment → Olympus articulation: controls articulation
- Attitude environment → Olympus articulation: controls articulation
- Olympus articulation → CubeMars actuators: uses actuators
- Walking environment → Motor command filter: filters commands
- Jump environment → Motor command filter: filters commands
- Walking environment → Kinematics: uses calculations
- Jump environment → Jump initializers: initializes episodes
- Vertical jump environment → Vertical initializers: initializes episodes
- Jump environment → Jump state machine: updates state
- Vertical jump environment → Vertical state machine: updates state
- Jump environment → Jump curricula: uses curriculum
- Vertical jump environment → Vertical curriculum: uses curriculum
- Walking environment → Simulation logging: logs episodes
- Jump environment → Simulation logging: logs episodes
- Vertical jump environment → Simulation logging: logs episodes
- Attitude environment → Simulation logging: logs episodes
- Mars task variants → Walking environment: provides Mars tasks
- Mars task variants → Jump environment: provides Mars tasks
- Mars task variants → Vertical jump environment: provides Mars tasks
