# ransml/simulator_lidar architecture

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

- Interactive diagram: https://gitdiagram.com/ransml/simulator_lidar
- Repository: https://github.com/ransml/simulator_lidar

## Overview

This repository is a Python simulator that generates 2D LIDAR data for environments containing static and moving obstacles. The user configures an environment and sensor parameters, supplies or interactively draws a robot path, then runs the simulation to calculate scans and free/occupied samples and produce visualizations and data files. The core runtime is concentrated in run_simulation.py, with obstacle motion and geometry in obstacle.py. Output formats and some workflow steps are documented in the README; unsampled implementation details are represented only where the documentation supports them.

Main entry points: [`run_simulation.py`](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py) (Simulation Runner), [`config`](https://github.com/ransml/simulator_lidar/tree/master/config) (Environment YAML), [`outputs`](https://github.com/ransml/simulator_lidar/tree/master/outputs) (Simulation Outputs), [`obstacle.py`](https://github.com/ransml/simulator_lidar/blob/master/obstacle.py) (Obstacle Motion)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_environment["Environment"]
  node_environment_yaml["Environment YAML"]
  node_config_loader["Config Loader<br/>[run_simulation.py]"]
  node_obstacle_motion["Obstacle Motion<br/>[obstacle.py]"]
end

subgraph group_inputs["Simulation Inputs"]
  node_robot_path["Robot Path<br/>[run_simulation.py]"]
end

subgraph group_runtime["Simulation Runtime"]
  node_simulator["Simulation Runner<br/>[run_simulation.py]"]
  node_lidar_raycast["LIDAR Raycasting<br/>[run_simulation.py]"]
  node_free_space["Free-Space Sampling<br/>[run_simulation.py]"]
end

subgraph group_results["Results"]
  node_visualization["Frame Visualization<br/>[run_simulation.py]"]
  node_data_export["Data Export<br/>[run_simulation.py]"]
  node_simulation_outputs["Simulation Outputs"]
end

node_user(("User"))

node_user -->|"defines scene"| node_environment_yaml
node_environment_yaml -->|"loads config"| node_config_loader
node_user -->|"sets trajectory"| node_robot_path
node_user -->|"runs simulation"| node_simulator
node_simulator -->|"updates obstacles"| node_obstacle_motion
node_simulator -->|"loads environment"| node_config_loader
node_simulator -->|"uses poses"| node_robot_path
node_simulator -->|"requests scan"| node_lidar_raycast
node_simulator -->|"samples scan"| node_free_space
node_simulator -->|"renders frames"| node_visualization
node_simulator -->|"writes results"| node_data_export
node_visualization -->|"saves images"| node_simulation_outputs
node_data_export -->|"saves data"| node_simulation_outputs

click node_environment_yaml "https://github.com/ransml/simulator_lidar/tree/master/config"
click node_config_loader "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_obstacle_motion "https://github.com/ransml/simulator_lidar/blob/master/obstacle.py"
click node_robot_path "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_simulator "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_lidar_raycast "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_free_space "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_visualization "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_data_export "https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py"
click node_simulation_outputs "https://github.com/ransml/simulator_lidar/tree/master/outputs"

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_environment_yaml,node_config_loader,node_obstacle_motion,node_user toneBlue
class node_robot_path toneAmber
class node_simulator,node_lidar_raycast,node_free_space toneMint
class node_visualization,node_data_export,node_simulation_outputs toneRose
```

## Components

### Environment

- [Environment YAML](https://github.com/ransml/simulator_lidar/tree/master/config): `config`
- [Config Loader](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`
- [Obstacle Motion](https://github.com/ransml/simulator_lidar/blob/master/obstacle.py): `obstacle.py`

### Simulation Inputs

- [Robot Path](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`

### Simulation Runtime

- [Simulation Runner](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`
- [LIDAR Raycasting](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`
- [Free-Space Sampling](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`

### Results

- [Frame Visualization](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`
- [Data Export](https://github.com/ransml/simulator_lidar/blob/master/run_simulation.py): `run_simulation.py`
- [Simulation Outputs](https://github.com/ransml/simulator_lidar/tree/master/outputs): `outputs`

### Other components

- **User**

## Connections

- User → Environment YAML: defines scene (evidence: `README.md`)
- Environment YAML → Config Loader: loads config (evidence: `run_simulation.py`)
- User → Robot Path: sets trajectory (evidence: `README.md`)
- User → Simulation Runner: runs simulation (evidence: `README.md`)
- Simulation Runner → Obstacle Motion: updates obstacles (evidence: `run_simulation.py`)
- Simulation Runner → Config Loader: loads environment (evidence: `run_simulation.py`)
- Simulation Runner → Robot Path: uses poses (evidence: `README.md`)
- Simulation Runner → LIDAR Raycasting: requests scan (evidence: `run_simulation.py`)
- Simulation Runner → Free-Space Sampling: samples scan (evidence: `run_simulation.py`)
- Simulation Runner → Frame Visualization: renders frames (evidence: `run_simulation.py`)
- Simulation Runner → Data Export: writes results (evidence: `README.md`)
- Frame Visualization → Simulation Outputs: saves images (evidence: `README.md`)
- Data Export → Simulation Outputs: saves data (evidence: `README.md`)
