文章

QGC 学习资料

1. 资料

1.1. QGC使用入门资料

1.2. QGC优化

1.3. 界面相关资料

1.4. 其他地面站工程

1.5. QGC(master) 编译

需要同时按照runtime版本和devel版本,安装完成之后,设置环境变量GSTREAMER_1_0_ROOT_MSVC_X86_64

1
GSTREAMER_1_0_ROOT_MSVC_X86_64 = d:\dev_libs\gstreamer\1.0\msvc_x86_64\

2. QGC 核心架构图示

UML 核心类图(下载本地放大查看):

QGC 主要 UML

核心系统分析图(下载本地放大查看):

QGC 主要系统分析

引用:

flowchart TD
    A[QGC Application] --> B[VehicleLinkManager]
    B --> C1[UDP Link]
    B --> C2[Serial Link]
    B --> C3[TCP Link]
    
    C1 & C2 & C3 --> D[MAVLinkProtocol]
    D --> E[MAVLink Messages]
    E --> F[Vehicle Manager]
    F --> G1[Vehicle]
    G1 -- Telemetry/Status/Command --> E

    %% Additional flows for message routing and plugins
    E --> H[QGC Plugins and UI Components]
    H --> I[User Interaction / Display]

    %% Optional: GCS communication
    B --> J[Other GCS]
    J --> E

    %% Note
    style D fill:#f9f,stroke:#333,stroke-width:2px

    %% Legend
    subgraph Legend [Legend]
      direction LR
      L1[Boxes: QGC Components]
      L2[Arrows: Data/Message Flow]
    end

通信流程说明

  1. QGroundControl 启动后,由VehicleLinkManager管理与飞行器的所有链接(如UDP、串口、TCP等)。
  2. 各类物理/网络连接(UDP、串口、TCP)通过VehicleLinkManager建立。
  3. 所有数据流进入MAVLinkProtocol模块进行MAVLink消息的解析与封装。
  4. MAVLink消息被分发到Vehicle Manager,并进一步与车辆(如无人机)交互。
  5. 车辆端会通过回传消息(如遥测、状态、命令响应等)同样经过上述流程返回QGC。
  6. QGC插件和UI组件可订阅和处理这些消息,实现用户交互和数据显示。
  7. 多地面站(GCS)通信时,消息也可在多个QGC实例间流转。

以上流程图和说明基于 QGC dev guide – Communication Flow

  • LinkManager 建立一个UDP监听端口(14550),等待飞行器心跳包;
  • 字节流经过MAVLinkProtocol转换为MAVLink消息包;
  • 如果是心跳包,MAVLinkProtocol将消息包转发给MultiVehicleManager
  • MultiVehicleManager接收到心跳包,创建一个新的Vehicle对象,并将其添加到_vehicles列表中;
  • Vehicle根据对应的_firmwareType_vehicleType创建对应的FirmwarePlugin
    • FirmwarePlugin根据_vehicleType创建对应的AutoPilotPlugin
    • Vehicle实例创建完成,其持有的ParameterLoader实例发送PARAM_REQUEST_LIST给飞行器,请求飞行器参数列表(使用pramater protocol);
    • 飞行器参数列表加载完成之后,Vehicle对应的MissionManager实例持有的MissionManager请求飞行任务items(使用mission protol);

心跳数据流转:

UDPWorker::dataReceived -> UDPLink::_onDataReceived / LinkInterface::bytesReceived -> MAVLinkProtocol::receiveBytes / MAVLinkProtocol::vehicleHeartbeatInfo -> MultiVehicleManager::_vehicleHeartbeatInfo / new Vehicle

3.1. 资料

本文由作者按照 CC BY 4.0 进行授权