基于阿里云ECS与EMQX的无人机-地面站MQTT通信系统搭建实战

169 阅读15分钟

写在前面:本文适用于首次部署EMQX云端服务器的用户。

一、背景与目标

1. 传统局域网方案的局限性

在无人机遥感、野外监测等场景中,往往需要地面站实时获取飞行状态并下发控制指令。传统的直连串口或局域网方案(websocket)无法跨地域,且部署灵活性差。

尝试过ZeroTier,网速太慢,会有卡顿,所以最终选择了4G+云服务器。

2. 云端部署的优势

我们选择 MQTT 协议(轻量、低带宽、发布/订阅模型)配合 EMQX Broker(高性能、易扩展)部署在阿里云ECS上。

采用云端 EMQX 部署后:

无人机端(4G) ←→ 云端 EMQX 服务器 ←→ 地面站(任意网络)

带来的好处

  • 无距离限制:无人机通过 4G 网络连接,可在任何有信号的地方作业
  • 远程监控:地面站可在办公室、家中等任意地点监控
  • 多点接入:多个地面站可同时监控同一台无人机
  • 数据存储:可在云端记录历史数据(可选功能)
  • 易于扩展:支持多台无人机、多个地面站的管理

适用场景

最适合的应用场景

  1. 远程巡检:无人机在野外进行电力线路、管道巡检,地面站在办公室监控
  2. 应急救援:无人机在灾区作业,指挥中心远程查看实时数据
  3. 测绘作业:无人机在测绘现场,数据实时传回公司处理
  4. 多点协同:多台无人机同时作业,统一监控管理

不适合的场景

  • 仅在室内或固定场所使用(局域网方案更简单)
  • 对网络延迟要求极高的应用(云端会增加 50-200ms 延迟)
  • 数据安全性要求极高且不允许上云的场景

🏗️ 二、系统架构说明

1. 整体网络拓扑

┌─────────────────────────────────────────────────────────────────┐
                         云端 EMQX 服务器                          
                                                                   
  ┌─────────────────────────────────────────────────────────┐    
    阿里云 ECS 服务器                                            
    - 公网 IP: 12.345.67.890                                   
    - 操作系统: Ubuntu 22.04/24.04                              
    - EMQX 5.8.8                                                
    - 端口: 1883 (MQTT), 18083 (Dashboard)                     
  └─────────────────────────────────────────────────────────┘    
                                                                   
└───────────────────┬─────────────────────────┬───────────────────┘
                                             
                     4G 网络                  WiFi/4G/有线网络
                                             
        ┌───────────▼──────────┐   ┌──────────▼──────────┐
           无人机端                  地面站             
                                                       
          - Intel NUC              - 任意 Windows PC   
          - 4G 模块                - 任意网络接入      
          - SPD-LiDAR              - PointCloudViewer  
          - Client: drone001       - Client: viewer_*  
        └──────────────────────┘   └──────────────────────┘

数据流向

1. 点云数据采集
   ↓
2. TDC 数据处理(无人机端)
   ↓
3. MQTT 序列化
   ↓
4. 4G 网络上传到云端 EMQX
   ↓
5. EMQX 消息路由(Topic: lidar/drone001/pointcloud)
   ↓
6. 地面站订阅并接收
   ↓
7. 反序列化
   ↓
8. 3D 可视化显示

各组件作用

组件作用关键技术
无人机端采集点云数据并发布到 MQTTSPD-LiDAR、Qt MQTT、4G 模块
云端 EMQXMQTT 消息代理,路由数据EMQX 5.8.8、Topic 路由
地面站订阅数据并可视化显示Qt MQTT、OpenGL 渲染
4G 网络无人机端公网接入4G LTE、公网 IP

📋 部署前准备

需要准备的资源

1. 云服务器

  • 推荐:阿里云 ECS(本文档基于阿里云)
  • 配置:2 核 2GB 内存(最低配置)
  • 带宽:3M 或 5M(1M 带宽不够用)
  • 操作系统:Ubuntu 22.04 或 Ubuntu 24.04

2. 4G 网络(无人机端)

  • 4G 模块:华为 E8372h-320(USB 4G 模块,即插即用)
  • SIM 卡:支持 4G 网络的 SIM 卡(建议流量套餐 ≥ 10GB/月)
  • 备选方案:手机热点(临时测试用)

3. 开发环境

  • Qt Creator:用于编译无人机端和地面站程序
  • 代码修改:需要修改两个文件的 MQTT 配置

4. 预算估算

  • 云服务器:约 ¥100-200/月(按配置和带宽)
  • 4G 模块:约 ¥200-300(一次性)
  • 4G 流量:约 ¥50-100/月(按使用量)

三、概念关系梳理(科研通信场景)

1. MQTT 是什么?

  • MQTT(Message Queuing Telemetry Transport)是一种轻量级发布/订阅(pub-sub)消息协议,专为低带宽、高延迟或不稳定网络设计。
  • 在无人机与地面站这种远程、可能间歇性连接的场景非常合适。
  • 消息由 客户端(Publisher)发送到 Broker,Broker 再根据主题(Topic)分发给订阅该主题的 客户端(Subscriber)。

2. EMQX 是什么?

  • EMQX​ 是一个高性能、分布式的 MQTT Broker(服务器程序),实现了 MQTT 3.1、3.1.1、5.0 协议。
  • 它负责接收所有客户端的连接、转发消息、管理会话、权限、持久化等。
  • 你可以把它理解为“消息中转站”,无人机和地面电脑都连到 EMQX,就能互相发消息。

3. 阿里云服务器 与 EMQX 的关系

  • 阿里云服务器(ECS)是一台远程 Linux/Windows 主机,你在上面安装并运行 EMQX。
  • 无人机端程序(嵌入式或机载计算机)和地面电脑上的 Qt 程序,都通过网络连接到这台云服务器的公网 IP(或域名)+ MQTT 端口(默认 1883)。
  • 这样,通信链路就是:

无人机 (MQTT Client) --Internet--> 阿里云 ECS (运行 EMQX Broker) --Internet--> 地面电脑 Qt App (MQTT Client)

4. 与 Qt 开发的关系

  • 在 QtCreator 里,你可以用 Qt 的网络模块​ 或 第三方 MQTT 客户端库(如 QMQTT、paho.mqtt.c 的 Qt 封装)写 MQTT 客户端程序。
  • 地面电脑端程序直接连云服务器的 EMQX 地址即可收发无人机数据。

[无人机] --(WiFi/4G/LoRa网关转IP)--> [Internet] | [阿里云 ECS 公网IP] | (运行 EMQX Broker, 监听 1883/8883) [地面电脑 Qt App] <----MQTT over Internet----+

三、分步骤操作清单(Windows 开发视角)

第一步:阿里云服务器购买

1.1、购买与支付

进入购买页面

  1. 登录阿里云控制台:ecs.console.aliyun.com/
  2. 点击"创建实例"

[需要截图:ECS 控制台]

选择配置

基础配置

  • 地域:选择离你最近的地域(如华东、华北)
  • 实例规格
    • 实例类型:共享型 s6
    • 规格:2 核 2GB(ecs.s6-c1m2.small)
  • 镜像
    • 类型:公共镜像
    • 操作系统:Ubuntu 22.04 64位 或 Ubuntu 24.04 64位

网络配置

  • 网络:默认专有网络 VPC
  • 公网 IP:分配公网 IPv4 地址
  • 带宽:按使用流量计费
    • 重要:峰值带宽选择 3 Mbps5 Mbps
    • ⚠️ 不要选择 1 Mbps(带宽不够用)

系统配置

  • 登录凭证
    • 推荐:自定义密码(设置 root 密码)
    • 记住这个密码,后续登录服务器需要用

分组设置

  • 安全组:选择"新建安全组"或使用默认安全组
  • 稍后需要配置安全组规则

购买时长

  • 建议先购买 1 个月测试
  • 测试稳定后再续费或包年
  • 我选择的是:1年(¥99)

确认订单

  • 检查配置是否正确
  • 勾选"云服务器 ECS 服务条款"
  • 点击"立即购买"
  • 完成支付

等待创建(2-5分钟) - 创建完成后,记录以下信息:

公网 IP:123.45.67.89(示例,每个人不同)
用户名:root
密码:(你刚才设置的)

1.2 配置安全组(5分钟)

什么是安全组?

  • 云服务器的防火墙
  • 控制哪些端口可以被访问
进入安全组配置
  1. 进入 ECS 控制台:ecs.console.aliyun.com/
  2. 点击左侧菜单"网络与安全" → "安全组"
  3. 找到你的安全组,点击"配置规则"
  4. 点击"入方向"标签页

点击"手动添加",添加以下规则:

优先级协议类型端口范围授权对象描述
1TCP1883/18830.0.0.0/0MQTT 端口
1TCP8883/88830.0.0.0/0MQTT SSL 端口
1TCP18083/180830.0.0.0/0EMQX Dashboard
1TCP22/220.0.0.0/0SSH 远程登录
1TCP8888/88880.0.0.0/0宝塔面板(可选)

配置说明

  • 授权对象 0.0.0.0/0:表示允许所有 IP 访问
  • 安全建议
    • 端口 1883 和 8883 需要对所有人开放(无人机和地面站需要连接)
    • 端口 18083(Dashboard)建议限制为你的办公室 IP
    • 端口 22(SSH)建议限制为你的办公室 IP

[需要截图:安全组规则配置页面]

点击"保存"完成配置。


1.3 获取公网 IP

在阿里云控制台查看

  1. 进入 ECS 控制台:ecs.console.aliyun.com/
  2. 在实例列表中,找到你的服务器
  3. 在"IP 地址"列,可以看到公网 IP

示例123.45.67.89

[需要截图:ECS 实例列表,标注公网 IP 位置]

记录公网 IP

重要:把这个公网 IP 记录下来,后续配置都需要用到!

我的服务器公网 IP:___________________

第二步:部署 EMQX服务器

2.1 登录服务器

有两种方式登录服务器:

方式一:阿里云 Workbench(推荐新手)
  1. 在 ECS 控制台,找到你的服务器
  2. 点击"远程连接" → "通过 Workbench 远程连接"
  3. 输入用户名:root
  4. 输入密码:购买时设置的密码
  5. 点击"确定"

[需要截图:Workbench 登录界面]

方式二:SSH 客户端(推荐熟练用户)

使用 PuTTY、Xshell 或 Windows Terminal:

ssh root@你的公网IP
# 例如:ssh root@123.45.67.89

输入密码后即可登录。


2.2 安装宝塔面板

在登录界面,复制粘贴以下命令(根据你选择的系统): Ubuntu 系统

wget -O install.sh download.bt.cn/install/ins… && sudo bash install.sh ed8484bec

CentOS 系统

yum install -y wget && wget -O install.sh download.bt.cn/install/ins… && sh install.sh ed8484bec

等待安装(5-10分钟)

  • 安装完成后会显示:

============================================= Congratulations! Installed successfully!

=============================================

外网面板地址: http://123.45.67.89:8888/xxxxxxxx

内网面板地址: http://172.x.x.x:8888/xxxxxxxx

username: xxxxxxxx

password: xxxxxxxx

重要:复制保存这些信息!

  1. 开放宝塔面板端口

    • 回到阿里云控制台
    • 安全组添加规则:

端口范围:8888/8888
授权对象:0.0.0.0/0
描述:宝塔面板

(宝塔面板不是必须的,但是我觉得这一步的作用是可以获取外网面板地址

2.2 安装 EMQX

登录服务器后,执行以下命令:

更新系统

sudo apt-get update
sudo apt-get upgrade -y

安装 EMQX

# 下载 EMQX 安装脚本
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash

# 安装 EMQX
sudo apt-get install emqx -y

安装过程

  • 下载时间约 1-2 分钟(取决于网络速度)
  • 安装时间约 30 秒

启动 EMQX

# 启动 EMQX 服务
sudo systemctl start emqx

# 查看服务状态
sudo systemctl status emqx

正确的输出

 emqx.service - emqx daemon
     Loaded: loaded (/lib/systemd/system/emqx.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

看到 Active: active (running) 表示启动成功 ✅


2.3 配置开机自启

# 设置开机自启
sudo systemctl enable emqx

# 验证是否已启用
sudo systemctl is-enabled emqx

输出 enabled 表示配置成功 ✅


2.4 验证安装

检查端口监听

# 检查 MQTT 端口
sudo lsof -i :1883

# 检查 Dashboard 端口
sudo lsof -i :18083

正确的输出

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 1234 emqx   45u  IPv4  12345      0t0  TCP *:1883 (LISTEN)

检查 EMQX 版本

emqx version

输出示例

5.8.8

2.5 访问 EMQX Dashboard

在浏览器中访问

打开浏览器,访问:

http://你的公网IP:18083

示例http://12.345.67.89:18083

[需要截图:EMQX Dashboard 登录页面]

登录 Dashboard

  • 用户名admin
  • 密码public

⚠️ 重要:登录后立即修改默认密码!

修改默认密码

  1. 登录后,点击右上角用户图标
  2. 选择"用户管理"
  3. 点击 admin 用户的"编辑"
  4. 修改密码
  5. 保存

第三步:测试连接

Step1:测试 EMQX Dashboard(5分钟)

  1. http://你的公网IP:18083

    登录

用户名:admin
密码:public

  1. 看到 Dashboard ✅

    • 说明 EMQX 安装成功
  2. 修改默认密码(重要!)

    • 点击右上角头像
    • 点击 "修改密码"
    • 设置新密码

Step2:测试地面站连接(5分钟)

  1. 打开地面站程序

  2. 配置连接

    Broker Host: 你的公网IP(如:123.45.67.89)
    Port: 1883
    Drone ID: drone001

  1. 点击 "连接"

  2. 看到 "Connected" ✅

    • 说明地面站可以连接到云服务器
  3. 在 EMQX Dashboard 中查看

    • 刷新 Dashboard
    • 点击左侧 "客户端"
    • 应该看到 1 个连接(地面站)

Step3:测试无人机端连接(5分钟)

注意:这一步需要无人机端有 4G 网络或手机热点(测试时用电脑WiFi也可以实现连接)

  1. 连接 4G 网络

    • 插入 4G 模块
    • 或连接手机热点
  2. 打开无人机端程序

  3. 配置连接

Broker Host: 你的公网IP(如:123.45.67.89)
Port: 1883
Drone ID: drone001

  1. 点击 "连接"

  2. 看到 "已连接" ✅

  3. 在 EMQX Dashboard 中查看

    • 应该看到 2 个连接(地面站 + 无人机)

Step4:测试点云传输(5分钟)

  1. 无人机端开始采集数据

    • 点击 "开始采集"
  2. 地面站应该能看到点云 ✅

  3. 在 EMQX Dashboard 中查看消息统计

    • 点击左侧 "监控"
    • 应该看到消息数量在增加

完成! 🎉

第三步 4G网络配置

Step1 无人机端添加

3.1 硬件准备

推荐的 4G 模块

方案一:USB 4G 模块(推荐)

  • 型号:华为 E8372h-320
  • 价格:约 ¥200-300
  • 优点
    • 即插即用,无需驱动
    • 支持 Windows 10/11
    • 稳定性好
  • 购买渠道:淘宝、京东

方案二:Mini PCIe 4G 模块

  • 型号:Sierra Wireless EM7455
  • 价格:约 ¥300-500
  • 优点
    • 集成度高
    • 性能稳定
  • 缺点
    • 需要 Mini PCIe 插槽
    • 安装较复杂

方案三:手机热点(临时测试)

  • 使用手机开启热点
  • 无人机端连接手机热点
  • 仅适合临时测试,不适合长期使用

SIM 卡准备

  • 运营商:移动、联通、电信均可
  • 套餐:建议选择流量套餐
    • 每小时数据量约 500MB - 1GB(未优化)
    • 每小时数据量约 100MB - 200MB(优化后)
    • 建议套餐:≥ 10GB/月
  • 网络:确保支持 4G LTE

3.2 安装 4G 模块

USB 4G 模块安装(以华为 E8372h 为例)

  1. 插入 SIM 卡

    • 打开 4G 模块的 SIM 卡槽
    • 插入 SIM 卡(注意方向)
    • 关闭卡槽
  2. 连接到电脑

    • 将 4G 模块插入 Intel NUC 的 USB 接口
    • 等待 Windows 识别设备(约 10-30 秒)
  3. 安装驱动(如果需要):

    • 大部分情况下 Windows 会自动安装驱动
    • 如果未自动安装,访问华为官网下载驱动

3.3 配置网络连接

Windows 网络配置

  1. 打开网络设置
    • 右键点击任务栏网络图标
    • 选择"打开网络和 Internet 设置"

[需要截图:Windows 网络设置]

  1. 检查 4G 连接

    • 在"状态"页面,应该能看到"移动网络"或"蜂窝网络"
    • 状态应该是"已连接"
  2. 设置为默认网络(如果有多个网络):

    • 打开"更改适配器选项"
    • 找到 4G 网络适配器
    • 右键 → "属性" → "Internet 协议版本 4 (TCP/IPv4)",自动获取IP地址
    • 点击"高级" → 设置"接口跃点数"为 10(数字越小优先级越高)

3.4 测试公网连接

测试 1:检查公网 IP

打开命令提示符(CMD)或 PowerShell,执行:

# 方法 1
curl ifconfig.me

# 方法 2
curl ip.sb

输出示例

123.45.67.89

这个 IP 应该是你的 4G 网络公网 IP(不是 192.168.x.x 或 10.x.x.x)。

测试 2:测试到云端 EMQX 的连接

# 测试 MQTT 端口连通性
Test-NetConnection -ComputerName 你的服务器公网IP -Port 1883

示例

Test-NetConnection -ComputerName 123.45.67.89 -Port 1883

正确的输出

TcpTestSucceeded : True

如果显示 True,说明网络连接正常 ✅


第四步:客户端程序配置

修改代码支持4G网络, 测试网络连接。


**⚠️ 重要**:在地面站和无人机端都把 `123.45.67.89` 替换为你在第一步记录的公网 IP!

第五步:验收测试

5.1 在 EMQX Dashboard 中查看客户端

  1. 打开 Dashboard

    • 访问:http://你的公网IP:18083
    • 登录:admin / 你修改后的密码
  2. 查看连接的客户端

    • 点击左侧菜单 客户端连接管理
    • 应该看到两个客户端:
      • drone001(无人机端)
      • viewer_<timestamp>(地面站)

[需要截图:Dashboard 客户端连接列表]

  1. 检查客户端状态
    • 状态应该是"已连接"(绿色)
    • 可以看到连接时间、IP 地址等信息

5.2 测试点云数据传输

在无人机端

  1. 加载测试数据

    • 点击 加载测试数据 按钮
    • 或连接实际的 LiDAR 设备
  2. 查看发送状态

    • 观察日志输出
    • 应该看到类似以下内容:
[INFO] Publishing point cloud: topic=lidar/drone001/pointcloud, size=xxx bytes
[INFO] Message published successfully

在地面站

  1. 查看接收状态

    • 应该能看到点云数据在 3D 视图中显示
    • 统计信息更新(Data Rate、Points 等)
  2. 验证数据完整性

    • 点云显示正常
    • 没有明显的数据丢失或延迟

5.3 验收清单

完成以下检查,确保部署成功:

  • 阿里云服务器正常运行
  • EMQX 服务正常运行(sudo systemctl status emqx
  • 安全组规则配置正确(端口 1883、18083 已开放)
  • 无人机端 4G 网络连接正常
  • 无人机端成功连接到云端 EMQX
  • 地面站成功连接到云端 EMQX
  • Dashboard 中能看到两个客户端连接
  • 点云数据能正常传输和显示
  • EMQX Dashboard 默认密码已修改

🎉 部署完成

恭喜!你已经成功完成了 EMQX 云端部署。

下一步

  • 日常使用:查看《EMQX日常使用手册.md》
  • 性能优化:如果带宽不足,可以实施数据压缩和降采样
  • 安全加固:限制 Dashboard 和 SSH 端口的访问来源

文档版本:v1.0 创建日期:2025-11-21 适用版本:EMQX 5.8.8、Ubuntu 22.04/24.04