# generation-snowflake/tank_robot_camera architecture

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

- Interactive diagram: https://gitdiagram.com/generation-snowflake/tank_robot_camera
- Repository: https://github.com/generation-snowflake/tank_robot_camera

## Overview

This ROS 2 package streams webcam images from a publisher node to a subscriber node, which detects colored regions and displays their contours. The publisher periodically reads the default camera, converts frames to ROS image messages, and publishes them; the subscriber converts received messages back to OpenCV frames before processing them. The README documents running each node separately. The graph reflects the sampled node code; it does not assume other camera settings or processing stages.

Main entry points: [`cam_sub/cam_sub_node.py`](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py) (Subscriber node), [`cam_sub/cam_pub_node.py`](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_pub_node.py) (Publisher node)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_pub["Image publisher"]
  node_publisher["Publisher node<br/>[cam_pub_node.py]"]
  node_pub_conversion["Frame conversion<br/>[cam_pub_node.py]"]
end

subgraph group_sub["Image subscriber"]
  node_subscriber["Subscriber node<br/>[cam_sub_node.py]"]
  node_sub_conversion["Frame conversion<br/>[cam_sub_node.py]"]
  node_detection["Color detection<br/>[cam_sub_node.py]"]
  node_display["Contour display<br/>[cam_sub_node.py]"]
end

node_operator(("Operator"))
node_camera["Default webcam"]
node_topic["Image topic"]

node_operator -->|"runs"| node_publisher
node_operator -->|"runs"| node_subscriber
node_publisher -->|"captures frames"| node_camera
node_publisher -->|"converts frames"| node_pub_conversion
node_publisher -->|"publishes images"| node_topic
node_topic -->|"delivers images"| node_subscriber
node_subscriber -->|"converts messages"| node_sub_conversion
node_subscriber -->|"detects contours"| node_detection
node_subscriber -->|"shows contours"| node_display

click node_publisher "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_pub_node.py"
click node_pub_conversion "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_pub_node.py"
click node_subscriber "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py"
click node_sub_conversion "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py"
click node_detection "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py"
click node_display "https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.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_publisher,node_pub_conversion toneBlue
class node_subscriber,node_sub_conversion,node_detection,node_display toneAmber
class node_operator,node_camera,node_topic toneIndigo
```

## Components

### Image publisher

- [Publisher node](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_pub_node.py): `cam_sub/cam_pub_node.py`
- [Frame conversion](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_pub_node.py): `cam_sub/cam_pub_node.py`

### Image subscriber

- [Subscriber node](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py): `cam_sub/cam_sub_node.py`
- [Frame conversion](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py): `cam_sub/cam_sub_node.py`
- [Color detection](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py): `cam_sub/cam_sub_node.py`
- [Contour display](https://github.com/generation-snowflake/tank_robot_camera/blob/main/cam_sub/cam_sub_node.py): `cam_sub/cam_sub_node.py`

### Other components

- **Operator**
- **Default webcam**
- **Image topic**

## Connections

- Operator → Publisher node: runs (evidence: `README.md`)
- Operator → Subscriber node: runs (evidence: `README.md`)
- Publisher node → Default webcam: captures frames (evidence: `cam_sub/cam_pub_node.py`)
- Publisher node → Frame conversion: converts frames (evidence: `cam_sub/cam_pub_node.py`)
- Publisher node → Image topic: publishes images (evidence: `cam_sub/cam_pub_node.py`)
- Image topic → Subscriber node: delivers images (evidence: `cam_sub/cam_sub_node.py`)
- Subscriber node → Frame conversion: converts messages (evidence: `cam_sub/cam_sub_node.py`)
- Subscriber node → Color detection: detects contours (evidence: `cam_sub/cam_sub_node.py`)
- Subscriber node → Contour display: shows contours (evidence: `cam_sub/cam_sub_node.py`)
