# anonymousm3/rasp4wheel architecture

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

- Interactive diagram: https://gitdiagram.com/anonymousm3/rasp4wheel
- Repository: https://github.com/anonymousm3/rasp4wheel

## Overview

This is a Raspberry Pi four-wheel robot controller, not a general-purpose web product. The principal workflow is a remote operator issuing motion or mode commands; server-side control translates those commands into motor, steering, accessory, and sensor actions, while camera processing can provide video and vision-based behavior. The tree also includes a browser-serving interface, autonomous/vision modules, and several hardware-control layers. Evidence is limited to the README, source index, and sampled excerpts; links for unsampled subsystems are omitted rather than inferred.

Main entry points: [`server/server.py`](https://github.com/anonymousm3/rasp4wheel/blob/main/server/server.py) (TCP Control), [`server/camera_opencv.py`](https://github.com/anonymousm3/rasp4wheel/blob/main/server/camera_opencv.py) (Camera Stream), [`server/FPV.py`](https://github.com/anonymousm3/rasp4wheel/blob/main/server/FPV.py) (FPV and CV), [`server/move.py`](https://github.com/anonymousm3/rasp4wheel/blob/main/server/move.py) (Motor Control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["Operator Interfaces"]
  node_desktop["Desktop GUI<br/>[GUI.py]"]
  node_server["TCP Control<br/>[server.py]"]
  node_web["WebSocket Control<br/>[webServer.py]"]
  node_webapp["Video Web App<br/>[app.py]"]
end

subgraph group_control["Robot Control"]
  node_functions["Autonomy Functions<br/>[functions.py]"]
  node_pid["PID Control<br/>[PID.py]"]
  node_speech["Speech Control<br/>[speech.py]"]
  node_info["Robot Info<br/>[info.py]"]
end

subgraph group_vision["Vision and Sensing"]
  node_stream["Camera Stream<br/>[camera_opencv.py]"]
  node_basecamera["Camera Base<br/>[base_camera.py]"]
  node_fpv["FPV and CV<br/>[FPV.py]"]
  node_cvdrive["CV Drive<br/>[GUImove.py]"]
  node_linefollow["Line Following<br/>[findline.py]"]
  node_distance["Distance Sensing<br/>[ultra.py]"]
  node_kalman["Kalman Filter<br/>[Kalman_filter.py]"]
end

subgraph group_hardware["Hardware Drivers"]
  node_motors["Motor Control<br/>[move.py]"]
  node_steering["Steering Servos<br/>[servo.py]"]
  node_pwmservos["PWM Servo Driver<br/>[RPIservo.py]"]
  node_switches["Switch Outputs<br/>[switch.py]"]
  node_led["LED Effects<br/>[LED.py]"]
  node_robotlight["Robot Lights<br/>[robotLight.py]"]
  node_rgb["RGB Indicators<br/>[RGB.py]"]
  node_oled["OLED Display<br/>[OLED.py]"]
end

node_operator(("Operator"))

node_operator -.->|"uses"| node_desktop
node_operator -.->|"commands"| node_server
node_operator -.->|"commands"| node_web
node_server -->|"initializes"| node_steering
node_server -->|"starts control"| node_web
node_server -->|"starts thread"| node_info
node_server -->|"toggles CV"| node_fpv
node_server -->|"stops motors"| node_motors
node_server -->|"sets switches"| node_switches
node_server -->|"selects effects"| node_led
node_webapp -->|"creates camera"| node_stream
node_stream -->|"inherits from"| node_basecamera
node_stream -->|"initializes servos"| node_pwmservos
node_stream -->|"initializes motors"| node_motors
node_stream -->|"initializes switches"| node_switches
node_fpv -->|"calculates correction"| node_pid
node_fpv -->|"moves steering"| node_steering
node_fpv -->|"drives robot"| node_motors
node_fpv -->|"sets indicators"| node_led

click node_desktop "https://github.com/anonymousm3/rasp4wheel/blob/main/client/GUI.py"
click node_server "https://github.com/anonymousm3/rasp4wheel/blob/main/server/server.py"
click node_web "https://github.com/anonymousm3/rasp4wheel/blob/main/server/webServer.py"
click node_webapp "https://github.com/anonymousm3/rasp4wheel/blob/main/server/app.py"
click node_stream "https://github.com/anonymousm3/rasp4wheel/blob/main/server/camera_opencv.py"
click node_basecamera "https://github.com/anonymousm3/rasp4wheel/blob/main/server/base_camera.py"
click node_fpv "https://github.com/anonymousm3/rasp4wheel/blob/main/server/FPV.py"
click node_cvdrive "https://github.com/anonymousm3/rasp4wheel/blob/main/server/GUImove.py"
click node_linefollow "https://github.com/anonymousm3/rasp4wheel/blob/main/server/findline.py"
click node_functions "https://github.com/anonymousm3/rasp4wheel/blob/main/server/functions.py"
click node_distance "https://github.com/anonymousm3/rasp4wheel/blob/main/server/ultra.py"
click node_kalman "https://github.com/anonymousm3/rasp4wheel/blob/main/server/Kalman_filter.py"
click node_pid "https://github.com/anonymousm3/rasp4wheel/blob/main/server/PID.py"
click node_motors "https://github.com/anonymousm3/rasp4wheel/blob/main/server/move.py"
click node_steering "https://github.com/anonymousm3/rasp4wheel/blob/main/server/servo.py"
click node_pwmservos "https://github.com/anonymousm3/rasp4wheel/blob/main/server/RPIservo.py"
click node_switches "https://github.com/anonymousm3/rasp4wheel/blob/main/server/switch.py"
click node_led "https://github.com/anonymousm3/rasp4wheel/blob/main/server/LED.py"
click node_robotlight "https://github.com/anonymousm3/rasp4wheel/blob/main/server/robotLight.py"
click node_rgb "https://github.com/anonymousm3/rasp4wheel/blob/main/server/RGB.py"
click node_speech "https://github.com/anonymousm3/rasp4wheel/blob/main/server/speech.py"
click node_oled "https://github.com/anonymousm3/rasp4wheel/blob/main/server/OLED.py"
click node_info "https://github.com/anonymousm3/rasp4wheel/blob/main/server/info.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_desktop,node_server,node_web,node_webapp toneBlue
class node_functions,node_pid,node_speech,node_info toneAmber
class node_stream,node_basecamera,node_fpv,node_cvdrive,node_linefollow,node_distance,node_kalman toneMint
class node_motors,node_steering,node_pwmservos,node_switches,node_led,node_robotlight,node_rgb,node_oled toneRose
class node_operator toneIndigo
```

## Components

### Operator Interfaces

- [Desktop GUI](https://github.com/anonymousm3/rasp4wheel/blob/main/client/GUI.py): `client/GUI.py`
- [TCP Control](https://github.com/anonymousm3/rasp4wheel/blob/main/server/server.py): `server/server.py`
- [WebSocket Control](https://github.com/anonymousm3/rasp4wheel/blob/main/server/webServer.py): `server/webServer.py`
- [Video Web App](https://github.com/anonymousm3/rasp4wheel/blob/main/server/app.py): `server/app.py`

### Robot Control

- [Autonomy Functions](https://github.com/anonymousm3/rasp4wheel/blob/main/server/functions.py): `server/functions.py`
- [PID Control](https://github.com/anonymousm3/rasp4wheel/blob/main/server/PID.py): `server/PID.py`
- [Speech Control](https://github.com/anonymousm3/rasp4wheel/blob/main/server/speech.py): `server/speech.py`
- [Robot Info](https://github.com/anonymousm3/rasp4wheel/blob/main/server/info.py): `server/info.py`

### Vision and Sensing

- [Camera Stream](https://github.com/anonymousm3/rasp4wheel/blob/main/server/camera_opencv.py): `server/camera_opencv.py`
- [Camera Base](https://github.com/anonymousm3/rasp4wheel/blob/main/server/base_camera.py): `server/base_camera.py`
- [FPV and CV](https://github.com/anonymousm3/rasp4wheel/blob/main/server/FPV.py): `server/FPV.py`
- [CV Drive](https://github.com/anonymousm3/rasp4wheel/blob/main/server/GUImove.py): `server/GUImove.py`
- [Line Following](https://github.com/anonymousm3/rasp4wheel/blob/main/server/findline.py): `server/findline.py`
- [Distance Sensing](https://github.com/anonymousm3/rasp4wheel/blob/main/server/ultra.py): `server/ultra.py`
- [Kalman Filter](https://github.com/anonymousm3/rasp4wheel/blob/main/server/Kalman_filter.py): `server/Kalman_filter.py`

### Hardware Drivers

- [Motor Control](https://github.com/anonymousm3/rasp4wheel/blob/main/server/move.py): `server/move.py`
- [Steering Servos](https://github.com/anonymousm3/rasp4wheel/blob/main/server/servo.py): `server/servo.py`
- [PWM Servo Driver](https://github.com/anonymousm3/rasp4wheel/blob/main/server/RPIservo.py): `server/RPIservo.py`
- [Switch Outputs](https://github.com/anonymousm3/rasp4wheel/blob/main/server/switch.py): `server/switch.py`
- [LED Effects](https://github.com/anonymousm3/rasp4wheel/blob/main/server/LED.py): `server/LED.py`
- [Robot Lights](https://github.com/anonymousm3/rasp4wheel/blob/main/server/robotLight.py): `server/robotLight.py`
- [RGB Indicators](https://github.com/anonymousm3/rasp4wheel/blob/main/server/RGB.py): `server/RGB.py`
- [OLED Display](https://github.com/anonymousm3/rasp4wheel/blob/main/server/OLED.py): `server/OLED.py`

### Other components

- **Operator**

## Connections

- Operator → Desktop GUI: uses
- Operator → TCP Control: commands
- Operator → WebSocket Control: commands
- TCP Control → Steering Servos: initializes (evidence: `server/server.py`)
- TCP Control → WebSocket Control: starts control (evidence: `server/server.py`)
- TCP Control → Robot Info: starts thread (evidence: `server/server.py`)
- TCP Control → FPV and CV: toggles CV (evidence: `server/server.py`)
- TCP Control → Motor Control: stops motors (evidence: `server/server.py`)
- TCP Control → Switch Outputs: sets switches (evidence: `server/server.py`)
- TCP Control → LED Effects: selects effects (evidence: `server/server.py`)
- Video Web App → Camera Stream: creates camera (evidence: `server/app.py`)
- Camera Stream → Camera Base: inherits from (evidence: `server/camera_opencv.py`)
- Camera Stream → PWM Servo Driver: initializes servos (evidence: `server/camera_opencv.py`)
- Camera Stream → Motor Control: initializes motors (evidence: `server/camera_opencv.py`)
- Camera Stream → Switch Outputs: initializes switches (evidence: `server/camera_opencv.py`)
- FPV and CV → PID Control: calculates correction (evidence: `server/FPV.py`)
- FPV and CV → Steering Servos: moves steering (evidence: `server/FPV.py`)
- FPV and CV → Motor Control: drives robot (evidence: `server/FPV.py`)
- FPV and CV → LED Effects: sets indicators (evidence: `server/FPV.py`)
