第一章 QGroundControl介绍QGroundControl简称QGC是当前无人机领域应用最广泛、功能最完善的开源地面站软件是无人机飞控系统的核心配套上位机工具。无论是消费级、工业级、行业级无人机还是无人车、无人船等无人载具的地面监控QGC都具备极强的适配能力。本章将系统性介绍QGC项目核心定位、应用场景、开源协议规范明确其支持的硬件机型与通信协议版本同时完整讲解Linux平台编译环境搭建、工程配置、依赖部署、编译运行全流程为后续二次开发、功能定制、源码改造奠定完整的环境与理论基础。1.1 QGC 项目定位、应用场景与开源协议QGroundControl是一款基于Qt框架开发的跨平台开源地面控制站软件主要面向MAVLink协议兼容的无人载具核心定位是为无人系统提供一站式地面监控、任务规划、设备调试、数据解析与固件管理解决方案。相较于市面上商业化地面站软件QGC最大的核心优势在于开源、跨平台、可高度定制、无功能阉割同时支持全品类无人设备适配是全球无人机开发者、科研机构、工业厂商的主流首选地面站方案。从技术架构层面来看QGC并非简单的无人机画面显示工具而是一套完整的上位机交互生态系统。其核心定位可分为三个维度第一基础监控定位实现无人设备姿态、位置、电量、传感器状态的实时可视化监控第二任务控制定位支持全自主航线规划、定点作业、任务下发与断点续控第三开发调试定位为飞控开发者提供参数校准、日志解析、协议调试、固件烧录的全流程工具完美适配飞控算法开发、硬件适配、功能二次开发等技术场景。同时QGC采用模块化、分层化架构设计UI界面、通信协议、业务逻辑、数据处理完全解耦极大降低了二次开发门槛。开发者可基于源码自由新增自定义功能、适配专属硬件、对接第三方平台无需改动核心底层架构这也是其成为无人系统开源标杆项目的核心原因。1.2 支持飞控机型、MAVLink 版本适配QGC不绑定单一硬件厂商核心适配所有支持MAVLink通信协议的开源飞控与商用飞控是目前兼容性最强的无人设备地面站。其主流适配硬件可分为两大核心系列QGC支持PX4飞控系列。ArduPilot飞控系列QGC还兼容大量商用开源飞控包括Betaflight、INAV、RTL990等主流飞控同时支持自定义MAVLink设备接入开发者可自行适配小众飞控、自研硬件设备具备极强的硬件兼容性。从设备机型维度划分QGC支持所有主流无人设备形态多旋翼无人机四轴、六轴、八轴、固定翼无人机、垂直起降复合翼无人机、无人车、无人船、水下机器人、云台吊舱设备等可满足不同硬件项目的开发管控需求。MAVLinkMicro Air Vehicle Link是面向无人载具的轻量化通信协议也是QGC与飞控设备数据交互的核心载体所有QGC的设备通信、数据解析、指令下发均基于MAVLink协议实现协议版本的适配兼容性直接决定设备能否正常接入地面站。QGC目前全面兼容**MAVLink 1.0经典版与MAVLink 2.0新版**两大主流版本默认优先启用MAVLink 2.0协议。MAVLink 1.0为早期经典版本报文长度较短、结构简单兼容性强适配老旧飞控硬件但数据传输量小、不支持拓展字段、校验机制简单容易出现数据丢包、解析异常问题。MAVLink 2.0为迭代升级版本支持变长报文、拓展数据字段、CRC双重校验、签名加密功能传输稳定性、安全性、数据完整性大幅提升是目前新飞控、新开发项目的主流协议版本。此外QGC支持自定义MAVLink消息报文开发者可根据自研设备需求新增自定义协议字段、自定义指令、自定义数据上报格式地面站可完成对应解析与显示这也是QGC适配自研硬件的核心能力。1.3 Ubuntu编译环境配置1.QGC编译1.1安装依赖sudo usermod -a -G dialout $USER sudo apt-get remove modemmanager -y sudo apt install gcc g make cmake git sudo apt install speech-dispatcher libudev-dev libsdl2-dev patchelf build-essential curl1.2下载代码git clone https://github.com/mavlink/qgroundcontrol.git cd qgroundcontrol/ git checkout Stable_V3.4 # 切换分支 git submodule update --init --recursive # 更新下载子模块更新子目录git submodule update1.3安装QT编译Qgc3.4使用Qt5.12安装包直接安装不需要在线安装解决网络问题也不需要编译QT源码解决许可证问题1.4编译qt打开QGC的*.pro文件点击编译即可2.PX4编译2.1安装依赖sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawkpip3 install pandas jinja2 pyserial cerberus pyulog0.7.0 numpy toml pyquaternion empy pyyaml pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse kconfiglib jsonschema future2.2PX4安装2.1下载PX4git clone https://github.com/PX4/PX4-Autopilot.git --recursive bash ./PX4-Autopilot/Tools/setup/ubuntu.shbash ./PX4-Autopilot/Tools/setup/ubuntu.sh --fix-missing2.2编译PX4make px4_sitl_default gazebo2.3环境变量设置source ~/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash ~/qx/PX4-Autopilot ~/qx/PX4-Autopilot/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/qx/PX4-Autopilot export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/qx/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classicsource ~/.bashrc2.4版本查看cd ~/PX4-Autopilot/ # 根据自己文件夹所在目录来 git describe --tags3安装Gazebo3.1先安装MAVROS大概率安装不起则进行下一步。sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras sudo -E ./opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh3.2添加 软件源sources.listsudo sh -c . /etc/lsb-release echo deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main /etc/apt/sources.list.d/ros-latest.list添加密钥sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654更新包sudo apt update再安装sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras sudo -E ./opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh配置环境变量注意自己的安装路径和环境变量的顺序否则会报错export ROS_MASTER_URIhttp://127.0.0.1:11311 export ROS_IP127.0.0.1 source /opt/ros/noetic/setup.bash export ROS_PACKAGE_PATH${ROS_PACKAGE_PATH}:/opt/ros/noetic source /home/xwc/qx/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash /home/xwc/qx/PX4-Autopilot /home/xwc/qx/PX4-Autopilot/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:/home/xwc/qx/PX4-Autopilot export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:/home/xwc/qx/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic4.运行程序先运行qgc,在运行Gazebo。roslaunch px4 mavros_posix_sitl.launch终端输入 commander takeoff 可以看到无人机起飞终端输入 commander land 可以看到无人机降落