# joshualikaist/motar architecture

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

- Interactive diagram: https://gitdiagram.com/joshualikaist/motar
- Repository: https://github.com/joshualikaist/motar

## Overview

MOTAR is a simulation research system for measuring how target motion, perception error, safety-filter geometry, and observation/rendering changes affect frozen UAV tracking policies. The documented evaluation loop runs from configured obstacle/target scenarios through camera and LiDAR sensing, perception and temporal state, policy action, speed limiting, vehicle control, and simulated outcomes. Research tooling and result records support the evidence workflow, but the sampled source does not establish every experiment-script connection; the graph therefore emphasizes documented runtime flow and omits uncertain wiring.

Main entry points: [`aerial_gym/task/navrl_task/navrl_task.py`](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_task.py) (Navigation Task), [`aerial_gym/robots/robot_manager.py`](https://github.com/joshualikaist/motar/blob/main/aerial_gym/robots/robot_manager.py) (Robot Manager), [`aerial_gym/env_manager/IGE_env_manager.py`](https://github.com/joshualikaist/motar/blob/main/aerial_gym/env_manager/IGE_env_manager.py) (Environment Manager), [`aerial_gym/sim/sim_builder.py`](https://github.com/joshualikaist/motar/blob/main/aerial_gym/sim/sim_builder.py) (Simulator Builder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scenario["Scenario Setup"]
  node_task_config["Task Config"]
  node_env_config["Environment Config<br/>[navrl_bars_env.py]"]
  node_robot_config["Robot Config"]
  node_target_motion["Target Motion<br/>[target_motion.py]"]
end

subgraph group_runtime["Simulation Runtime"]
  node_sim["Simulator Builder<br/>[sim_builder.py]"]
  node_env_manager["Environment Manager<br/>[IGE_env_manager.py]"]
  node_asset_manager["Obstacle Placement<br/>[asset_manager.py]"]
  node_robot_manager["Robot Manager<br/>[robot_manager.py]"]
  node_sensor["Camera and LiDAR<br/>[robot_manager.py]"]
end

subgraph group_policy["Tracking Loop"]
  node_navrl_task["Navigation Task<br/>[navrl_task.py]"]
  node_perception["Perception"]
  node_temporal["Track State"]
  node_policy_net["Transformer Policy"]
  node_speed_filter["LiDAR Speed Filter<br/>[speed_governor.py]"]
  node_controller["Lee Controller"]
end

subgraph group_research["Research Evidence"]
  node_sim_outcome["Episode Outcome<br/>[navrl_task.py]"]
  node_perception_tools["Perception Measurement"]
  node_renderer["Static Renderer<br/>[public_pipeline.py]"]
  node_rl_training["Policy Training<br/>[runner.py]"]
end

node_researcher(("Researcher"))

node_researcher -->|"selects task"| node_task_config
node_task_config -->|"configures"| node_sim
node_env_config -->|"configures"| node_sim
node_robot_config -->|"configures"| node_robot_manager
node_sim -->|"builds simulation"| node_env_manager
node_env_manager -->|"places obstacles"| node_asset_manager
node_env_manager -->|"creates environments"| node_robot_manager
node_robot_manager -->|"provides sensor data"| node_sensor
node_sensor -->|"observations"| node_navrl_task
node_navrl_task -->|"processes observations"| node_perception
node_perception -->|"updates tracks"| node_temporal
node_navrl_task -->|"requests action"| node_policy_net
node_navrl_task -->|"limits command"| node_speed_filter
node_navrl_task -->|"sends command"| node_controller
node_controller -->|"controls vehicle"| node_robot_manager
node_target_motion -->|"supplies target state"| node_navrl_task
node_navrl_task -->|"records episode"| node_sim_outcome
node_researcher -->|"measures error"| node_perception_tools
node_perception_tools -->|"reports measurements"| node_researcher
node_researcher -->|"runs render checks"| node_renderer
node_researcher -.->|"trains policies"| node_rl_training
node_rl_training -.->|"produces policy"| node_policy_net

click node_task_config "https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/task_config/navrl_task_config.py"
click node_env_config "https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/env_config/navrl_bars_env.py"
click node_robot_config "https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/robot_config/navrl_quad_config.py"
click node_sim "https://github.com/joshualikaist/motar/blob/main/aerial_gym/sim/sim_builder.py"
click node_env_manager "https://github.com/joshualikaist/motar/blob/main/aerial_gym/env_manager/IGE_env_manager.py"
click node_asset_manager "https://github.com/joshualikaist/motar/blob/main/aerial_gym/env_manager/asset_manager.py"
click node_robot_manager "https://github.com/joshualikaist/motar/blob/main/aerial_gym/robots/robot_manager.py"
click node_sensor "https://github.com/joshualikaist/motar/blob/main/aerial_gym/robots/robot_manager.py"
click node_navrl_task "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_task.py"
click node_perception "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_perception.py"
click node_temporal "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_search_state.py"
click node_policy_net "https://github.com/joshualikaist/motar/blob/main/aerial_gym/rl_training/rl_games/navrl_transformer_network.py"
click node_speed_filter "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/speed_governor.py"
click node_controller "https://github.com/joshualikaist/motar/blob/main/aerial_gym/control/controllers/base_lee_controller.py"
click node_target_motion "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/target_motion.py"
click node_sim_outcome "https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_task.py"
click node_perception_tools "https://github.com/joshualikaist/motar/tree/main/tools"
click node_renderer "https://github.com/joshualikaist/motar/blob/main/tools/renderer_validation/public_pipeline.py"
click node_rl_training "https://github.com/joshualikaist/motar/blob/main/aerial_gym/rl_training/rl_games/runner.py"

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_task_config,node_env_config,node_robot_config,node_target_motion toneBlue
class node_sim,node_env_manager,node_asset_manager,node_robot_manager,node_sensor toneAmber
class node_navrl_task,node_perception,node_temporal,node_policy_net,node_speed_filter,node_controller toneMint
class node_sim_outcome,node_perception_tools,node_renderer,node_rl_training toneRose
class node_researcher toneIndigo
```

## Components

### Scenario Setup

- [Task Config](https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/task_config/navrl_task_config.py): `aerial_gym/config/task_config/navrl_task_config.py`
- [Environment Config](https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/env_config/navrl_bars_env.py): `aerial_gym/config/env_config/navrl_bars_env.py`
- [Robot Config](https://github.com/joshualikaist/motar/blob/main/aerial_gym/config/robot_config/navrl_quad_config.py): `aerial_gym/config/robot_config/navrl_quad_config.py`
- [Target Motion](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/target_motion.py): `aerial_gym/task/navrl_task/target_motion.py`

### Simulation Runtime

- [Simulator Builder](https://github.com/joshualikaist/motar/blob/main/aerial_gym/sim/sim_builder.py): `aerial_gym/sim/sim_builder.py`
- [Environment Manager](https://github.com/joshualikaist/motar/blob/main/aerial_gym/env_manager/IGE_env_manager.py): `aerial_gym/env_manager/IGE_env_manager.py`
- [Obstacle Placement](https://github.com/joshualikaist/motar/blob/main/aerial_gym/env_manager/asset_manager.py): `aerial_gym/env_manager/asset_manager.py`
- [Robot Manager](https://github.com/joshualikaist/motar/blob/main/aerial_gym/robots/robot_manager.py): `aerial_gym/robots/robot_manager.py`
- [Camera and LiDAR](https://github.com/joshualikaist/motar/blob/main/aerial_gym/robots/robot_manager.py): `aerial_gym/robots/robot_manager.py`

### Tracking Loop

- [Navigation Task](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_task.py): `aerial_gym/task/navrl_task/navrl_task.py`
- [Perception](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_perception.py): `aerial_gym/task/navrl_task/navrl_perception.py`
- [Track State](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_search_state.py): `aerial_gym/task/navrl_task/navrl_search_state.py`
- [Transformer Policy](https://github.com/joshualikaist/motar/blob/main/aerial_gym/rl_training/rl_games/navrl_transformer_network.py): `aerial_gym/rl_training/rl_games/navrl_transformer_network.py`
- [LiDAR Speed Filter](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/speed_governor.py): `aerial_gym/task/navrl_task/speed_governor.py`
- [Lee Controller](https://github.com/joshualikaist/motar/blob/main/aerial_gym/control/controllers/base_lee_controller.py): `aerial_gym/control/controllers/base_lee_controller.py`

### Research Evidence

- [Episode Outcome](https://github.com/joshualikaist/motar/blob/main/aerial_gym/task/navrl_task/navrl_task.py): `aerial_gym/task/navrl_task/navrl_task.py`
- [Perception Measurement](https://github.com/joshualikaist/motar/tree/main/tools): `tools`
- [Static Renderer](https://github.com/joshualikaist/motar/blob/main/tools/renderer_validation/public_pipeline.py): `tools/renderer_validation/public_pipeline.py`
- [Policy Training](https://github.com/joshualikaist/motar/blob/main/aerial_gym/rl_training/rl_games/runner.py): `aerial_gym/rl_training/rl_games/runner.py`

### Other components

- **Researcher**

## Connections

- Researcher → Task Config: selects task
- Task Config → Simulator Builder: configures
- Environment Config → Simulator Builder: configures
- Robot Config → Robot Manager: configures
- Simulator Builder → Environment Manager: builds simulation
- Environment Manager → Obstacle Placement: places obstacles
- Environment Manager → Robot Manager: creates environments
- Robot Manager → Camera and LiDAR: provides sensor data
- Camera and LiDAR → Navigation Task: observations
- Navigation Task → Perception: processes observations
- Perception → Track State: updates tracks
- Navigation Task → Transformer Policy: requests action
- Navigation Task → LiDAR Speed Filter: limits command
- Navigation Task → Lee Controller: sends command
- Lee Controller → Robot Manager: controls vehicle
- Target Motion → Navigation Task: supplies target state
- Navigation Task → Episode Outcome: records episode
- Researcher → Perception Measurement: measures error
- Perception Measurement → Researcher: reports measurements
- Researcher → Static Renderer: runs render checks
- Researcher → Policy Training: trains policies
- Policy Training → Transformer Policy: produces policy
