# han0301/gdut_rc26_vision_src architecture

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

- Interactive diagram: https://gitdiagram.com/han0301/gdut_rc26_vision_src
- Repository: https://github.com/han0301/gdut_rc26_vision_src

## Overview

RC26 Vision is an onboard ROS robotics stack combining camera, LiDAR, and odometry inputs for recognition, localization, mapping, and control, with a ground-side control center for monitoring and competition setup. The documented runtime begins at the merge node, which coordinates sensing and fusion; perception and localization support decisions and robot outputs. The README describes several capabilities whose named files are absent from this tree, so they are represented only where an existing enclosing module path supports them. Source excerpts are partial, so internal call wiring is not inferred beyond documented relationships.

Main entry points: [`src/merge/src/merge.cpp`](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/merge.cpp) (Fusion node), [`src/merge/shell_monitor2/control_center.py`](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/shell_monitor2/control_center.py) (Ground control center), [`src/merge/src/livox_ros_driver2/src/driver_node.cpp`](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/livox_ros_driver2/src/driver_node.cpp) (Livox driver), [`src/merge/src/superstratum/super.h`](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/superstratum/super.h) (Perception arbitration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime orchestration"]
  node_merge["Fusion node<br/>[merge.cpp]"]
  node_driver["Livox driver<br/>[driver_node.cpp]"]
  node_fusion["Perception arbitration<br/>[super.h]"]
end

subgraph group_perception["Perception and calibration"]
  node_camera_io["Camera capture<br/>[camera.cpp]"]
  node_vision["Image inference<br/>[openvino.cpp]"]
  node_yolo["YOLO detectors<br/>[yolo_base.h]"]
  node_apriltag["AprilTag detection<br/>[apriltag.cpp]"]
  node_calibration["Camera calibration<br/>[calibration.cpp]"]
  node_occlusion["Occlusion handling"]
  node_kfs["KFS detector<br/>[kfs_detector.cpp]"]
end

subgraph group_localization["Localization and mapping"]
  node_lidar_proc["LiDAR processing<br/>[lidar.cpp]"]
  node_pointlio["LiDAR-inertial odometry<br/>[laserMapping2.cpp]"]
  node_gicp["Point-cloud registration<br/>[nano_gicp.cc]"]
  node_mapping["Map management<br/>[mapping.cpp]"]
  node_coords["Coordinate transforms<br/>[coordinate.cpp]"]
  node_filter["Sensor filtering<br/>[fliter.cpp]"]
  node_ekf["Robust state estimation<br/>[rcekf.h]"]
end

subgraph group_robot["Robot operations"]
  node_control["Chassis control<br/>[controlR1.cpp]"]
  node_serial["Serial interface<br/>[serial.cpp]"]
  node_inspection["Device self-check<br/>[inspection.h]"]
  node_parameters["Runtime parameters<br/>[parameter.cpp]"]
  node_control_center["Ground control center<br/>[control_center.py]"]
  node_monitor["System monitor<br/>[run_shell.py]"]
end

node_operator(("Robot operator"))
node_camera(("Camera feeds"))
node_lidar_sensor(("LiDAR and IMU"))
node_odom(("Wheel odometry"))
node_actuators(("Robot actuators"))
node_ground_pc(("Ground computer"))

node_operator -->|"selects tasks"| node_control_center
node_ground_pc -->|"hosts"| node_control_center
node_control_center -->|"remote control"| node_merge
node_camera -->|"image frames"| node_camera_io
node_lidar_sensor -->|"sensor packets"| node_driver
node_driver -->|"publishes clouds"| node_lidar_proc
node_lidar_sensor -->|"LiDAR and IMU"| node_pointlio
node_odom -->|"odometry"| node_merge
node_camera_io -->|"camera data"| node_merge
node_merge -->|"dispatches images"| node_vision
node_vision -->|"runs detection"| node_yolo
node_merge -->|"dispatches images"| node_apriltag
node_merge -->|"calibrates sensors"| node_calibration
node_merge -->|"checks occlusion"| node_occlusion
node_merge -->|"runs detection"| node_kfs
node_merge -->|"processes clouds"| node_lidar_proc
node_pointlio -->|"registers clouds"| node_gicp
node_merge -->|"updates maps"| node_mapping
node_merge -->|"aligns sensor data"| node_filter
node_merge -->|"transforms poses"| node_coords
node_merge -->|"coordinates results"| node_fusion
node_fusion -->|"fused estimates"| node_ekf
node_merge -->|"dispatches commands"| node_control
node_control -->|"sends commands"| node_serial
node_serial -->|"serial control"| node_actuators
node_merge -->|"checks devices"| node_inspection
node_parameters -->|"provides settings"| node_merge
node_control_center -->|"sets parameters"| node_parameters
node_control_center -->|"shows self-check"| node_inspection
node_control_center -->|"starts monitoring"| node_monitor
node_monitor -->|"reports status"| node_ground_pc

click node_merge "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/merge.cpp"
click node_driver "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/livox_ros_driver2/src/driver_node.cpp"
click node_camera_io "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/camera.cpp"
click node_vision "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/openvino.cpp"
click node_yolo "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/yolo/yolo_base.h"
click node_apriltag "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/apriltag/apriltag.cpp"
click node_calibration "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/calibration.cpp"
click node_occlusion "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/recognition/occlusion_handing.cpp"
click node_kfs "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/kfs_detector/kfs_detector.cpp"
click node_lidar_proc "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/lidar.cpp"
click node_pointlio "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/point_lio/src/laserMapping2.cpp"
click node_gicp "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/nano_gicp/src/nano_gicp.cc"
click node_mapping "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/mapping/mapping.cpp"
click node_coords "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/coordinate.cpp"
click node_filter "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/fliter.cpp"
click node_fusion "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/superstratum/super.h"
click node_ekf "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/rcekf/rcekf.h"
click node_control "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/superstratum/controlR1.cpp"
click node_serial "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/serial.cpp"
click node_inspection "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/selfinspection/inspection.h"
click node_parameters "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/parameter/parameter.cpp"
click node_control_center "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/shell_monitor2/control_center.py"
click node_monitor "https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/shell_monitor2/run_shell.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_merge,node_driver,node_fusion toneBlue
class node_camera_io,node_vision,node_yolo,node_apriltag,node_calibration,node_occlusion,node_kfs toneAmber
class node_lidar_proc,node_pointlio,node_gicp,node_mapping,node_coords,node_filter,node_ekf toneMint
class node_control,node_serial,node_inspection,node_parameters,node_control_center,node_monitor toneRose
class node_operator,node_camera,node_lidar_sensor,node_odom,node_actuators,node_ground_pc toneIndigo
```

## Components

### Runtime orchestration

- [Fusion node](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/merge.cpp): `src/merge/src/merge.cpp`
- [Livox driver](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/livox_ros_driver2/src/driver_node.cpp): `src/merge/src/livox_ros_driver2/src/driver_node.cpp`
- [Perception arbitration](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/superstratum/super.h): `src/merge/src/superstratum/super.h`

### Perception and calibration

- [Camera capture](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/camera.cpp): `src/merge/src/camera.cpp`
- [Image inference](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/openvino.cpp): `src/merge/src/openvino.cpp`
- [YOLO detectors](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/yolo/yolo_base.h): `src/merge/src/yolo/yolo_base.h`
- [AprilTag detection](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/apriltag/apriltag.cpp): `src/merge/src/apriltag/apriltag.cpp`
- [Camera calibration](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/calibration.cpp): `src/merge/src/calibration.cpp`
- [Occlusion handling](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/recognition/occlusion_handing.cpp): `src/merge/src/recognition/occlusion_handing.cpp`
- [KFS detector](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/kfs_detector/kfs_detector.cpp): `src/merge/src/kfs_detector/kfs_detector.cpp`

### Localization and mapping

- [LiDAR processing](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/lidar.cpp): `src/merge/src/lidar.cpp`
- [LiDAR-inertial odometry](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/point_lio/src/laserMapping2.cpp): `src/merge/src/point_lio/src/laserMapping2.cpp`
- [Point-cloud registration](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/nano_gicp/src/nano_gicp.cc): `src/merge/src/nano_gicp/src/nano_gicp.cc`
- [Map management](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/mapping/mapping.cpp): `src/merge/src/mapping/mapping.cpp`
- [Coordinate transforms](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/coordinate.cpp): `src/merge/src/coordinate.cpp`
- [Sensor filtering](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/fliter.cpp): `src/merge/src/fliter.cpp`
- [Robust state estimation](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/rcekf/rcekf.h): `src/merge/src/rcekf/rcekf.h`

### Robot operations

- [Chassis control](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/superstratum/controlR1.cpp): `src/merge/src/superstratum/controlR1.cpp`
- [Serial interface](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/serial.cpp): `src/merge/src/serial.cpp`
- [Device self-check](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/selfinspection/inspection.h): `src/merge/src/selfinspection/inspection.h`
- [Runtime parameters](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/src/parameter/parameter.cpp): `src/merge/src/parameter/parameter.cpp`
- [Ground control center](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/shell_monitor2/control_center.py): `src/merge/shell_monitor2/control_center.py`
- [System monitor](https://github.com/han0301/gdut_rc26_vision_src/blob/main/src/merge/shell_monitor2/run_shell.py): `src/merge/shell_monitor2/run_shell.py`

### Other components

- **Robot operator**
- **Camera feeds**
- **LiDAR and IMU**
- **Wheel odometry**
- **Robot actuators**
- **Ground computer**

## Connections

- Robot operator → Ground control center: selects tasks
- Ground computer → Ground control center: hosts
- Ground control center → Fusion node: remote control
- Camera feeds → Camera capture: image frames
- LiDAR and IMU → Livox driver: sensor packets
- Livox driver → LiDAR processing: publishes clouds
- LiDAR and IMU → LiDAR-inertial odometry: LiDAR and IMU
- Wheel odometry → Fusion node: odometry
- Camera capture → Fusion node: camera data
- Fusion node → Image inference: dispatches images
- Image inference → YOLO detectors: runs detection
- Fusion node → AprilTag detection: dispatches images
- Fusion node → Camera calibration: calibrates sensors
- Fusion node → Occlusion handling: checks occlusion
- Fusion node → KFS detector: runs detection
- Fusion node → LiDAR processing: processes clouds
- LiDAR-inertial odometry → Point-cloud registration: registers clouds
- Fusion node → Map management: updates maps
- Fusion node → Sensor filtering: aligns sensor data
- Fusion node → Coordinate transforms: transforms poses
- Fusion node → Perception arbitration: coordinates results
- Perception arbitration → Robust state estimation: fused estimates
- Fusion node → Chassis control: dispatches commands
- Chassis control → Serial interface: sends commands
- Serial interface → Robot actuators: serial control
- Fusion node → Device self-check: checks devices
- Runtime parameters → Fusion node: provides settings
- Ground control center → Runtime parameters: sets parameters
- Ground control center → Device self-check: shows self-check
- Ground control center → System monitor: starts monitoring
- System monitor → Ground computer: reports status
