Software architecture diagram
This Markdown file contains different architecture diagrams for the project, and it should replace some outdated documentation by the previous team (CatScanner 2024-2025). Currently, we use Markdown Preview Mermaid Support by Matt Bierner to simplify the creation process. After installing the extension, the diagram will be shown in the preview.
If you cannot install the extension for some reason, you can download another Mermaid-compatible extension and modify the code manually to match the format.
If you are new to Mermaid and want to get familiar with it, please check the Youtube video by PetterTech, Youtube video by Red Gregory, or The official documentation by mermaid.js.org.
Changelog
| Date | Changes |
|---|---|
| 2026-01-09 | Add ROS2 node architecture diagram |
1. Relationship between different ROS2 nodes
Green: Files that are included in CMakeList.txt.
Gray: Files that are not compiled in CMakeList.txt (legacy code, testing, debug, etc).
Diagram
flowchart TB
%%Style for color
%% Activated
classDef A fill:green,stroke:black
%% Deactivated
classDef D fill:grey,stroke:black
%%PX4_handler
subgraph drone_movement_node
ball_finder.py:::A
end
subgraph offboard_control
offboard_control.cpp:::A
end
%%Vision package
subgraph argus-kitten
isaac_ros_argus_camera_mono:::A
end
subgraph object_detection_node
object_detector.py:::A
end
%%ball_finder.py
drone_movement_node --movement commands -->/custom_trajectory
drone_movement_node -->/fmu/in/vehicle_command
/fmu/out/vehicle_local_position --> drone_movement_node
/detections --> drone_movement_node
%%offboard_control.cpp
offboard_control --enable offboard mode --> /fmu/in/offboard_control_mode
offboard_control --movement commands --> /fmu/in/trajectory_setpoint
/custom_trajectory--> offboard_control
/fmu/out/vehicle_local_position -->offboard_control
%%argus-kitten
argus-kitten --video feed --> /argus/left/image_raw
%%object_detection_node
/argus/left/image_raw --> object_detection_node
object_detector.py --detected objects --> /detections
%% Point odometry
subgraph point_odometry
point_odometry.cpp:::A
end
/detections --> point_odometry
/fmu/out/vehicle_odometry --> point_odometry
point_odometry --> /fmu/in/vehicle_visual_odometry
%%Stereo camera
subgraph stereo_node
stereo_publisher.cpp:::A
end
subgraph stereo_topics["Stereo Topics"]
topics["
/left/image_rect
/left/camera_info
/right/image_rect
/right/camera_info
/imu
/tf_static
"]
end
stereo_publisher.cpp --camera feed --> stereo_topics
%%VSLAM
subgraph visual_slam_node
isaac_ros_visual_slam:::A
end
stereo_topics --> isaac_ros_visual_slam
isaac_ros_visual_slam --pose estimates --> /visual_slam/tracking/odometry
/visual_slam/tracking/odometry --vslam_message_transform.cpp --> /fmu/in/vehicle_visual_odometry
/fmu/in/vehicle_visual_odometry --> ekf2
%%Cameras
camera((Downward Camera)) --/dev/video0 --> isaac_ros_argus_camera_mono
stereo_camera((OAK-D Pro Stereo Camera)) --/dev/bus/usb --> stereo_publisher.cpp
%% Flight control / PX4
subgraph flight_controller_inputs["Flight Controller Inputs"]
IMU
Barometer
Magnetometer
end
px4(("Flight Controller (PX4)")) --measured data --> flight_controller_inputs
flight_controller_inputs --> ekf2[EKF2]:::A
ekf2 --position estimates --> /fmu/out/vehicle_local_position
/fmu/in/offboard_control_mode --> px4
/fmu/in/trajectory_setpoint --> px4
/fmu/in/vehicle_command --> px4