写在前面:本文适用于首次部署EMQX云端服务器的用户。
一、背景与目标
1. 传统局域网方案的局限性
在无人机遥感、野外监测等场景中,往往需要地面站实时获取飞行状态并下发控制指令。传统的直连串口或局域网方案(websocket)无法跨地域,且部署灵活性差。
尝试过ZeroTier,网速太慢,会有卡顿,所以最终选择了4G+云服务器。
2. 云端部署的优势
我们选择 MQTT 协议(轻量、低带宽、发布/订阅模型)配合 EMQX Broker(高性能、易扩展)部署在阿里云ECS上。
采用云端 EMQX 部署后:
无人机端(4G) ←→ 云端 EMQX 服务器 ←→ 地面站(任意网络)
带来的好处:
- ✅ 无距离限制:无人机通过 4G 网络连接,可在任何有信号的地方作业
- ✅ 远程监控:地面站可在办公室、家中等任意地点监控
- ✅ 多点接入:多个地面站可同时监控同一台无人机
- ✅ 数据存储:可在云端记录历史数据(可选功能)
- ✅ 易于扩展:支持多台无人机、多个地面站的管理
适用场景
最适合的应用场景:
- 远程巡检:无人机在野外进行电力线路、管道巡检,地面站在办公室监控
- 应急救援:无人机在灾区作业,指挥中心远程查看实时数据
- 测绘作业:无人机在测绘现场,数据实时传回公司处理
- 多点协同:多台无人机同时作业,统一监控管理
不适合的场景:
- 仅在室内或固定场所使用(局域网方案更简单)
- 对网络延迟要求极高的应用(云端会增加 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 可视化显示
各组件作用
| 组件 | 作用 | 关键技术 |
|---|---|---|
| 无人机端 | 采集点云数据并发布到 MQTT | SPD-LiDAR、Qt MQTT、4G 模块 |
| 云端 EMQX | MQTT 消息代理,路由数据 | 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、购买与支付
- 打开阿里云官网: www.aliyun.com/,完成注册
进入购买页面
- 登录阿里云控制台:ecs.console.aliyun.com/
- 点击"创建实例"
[需要截图:ECS 控制台]
选择配置
基础配置:
- 地域:选择离你最近的地域(如华东、华北)
- 实例规格:
- 实例类型:共享型 s6
- 规格:2 核 2GB(ecs.s6-c1m2.small)
- 镜像:
- 类型:公共镜像
- 操作系统:Ubuntu 22.04 64位 或 Ubuntu 24.04 64位
网络配置:
- 网络:默认专有网络 VPC
- 公网 IP:分配公网 IPv4 地址
- 带宽:按使用流量计费
- 重要:峰值带宽选择 3 Mbps 或 5 Mbps
- ⚠️ 不要选择 1 Mbps(带宽不够用)
系统配置:
- 登录凭证:
- 推荐:自定义密码(设置 root 密码)
- 记住这个密码,后续登录服务器需要用
分组设置:
- 安全组:选择"新建安全组"或使用默认安全组
- 稍后需要配置安全组规则
购买时长:
- 建议先购买 1 个月测试
- 测试稳定后再续费或包年
- 我选择的是:1年(¥99)
确认订单
- 检查配置是否正确
- 勾选"云服务器 ECS 服务条款"
- 点击"立即购买"
- 完成支付
等待创建(2-5分钟) - 创建完成后,记录以下信息:
公网 IP:123.45.67.89(示例,每个人不同)
用户名:root
密码:(你刚才设置的)
1.2 配置安全组(5分钟)
什么是安全组?
- 云服务器的防火墙
- 控制哪些端口可以被访问
进入安全组配置
- 进入 ECS 控制台:ecs.console.aliyun.com/
- 点击左侧菜单"网络与安全" → "安全组"
- 找到你的安全组,点击"配置规则"
- 点击"入方向"标签页
点击"手动添加",添加以下规则:
| 优先级 | 协议类型 | 端口范围 | 授权对象 | 描述 |
|---|---|---|---|---|
| 1 | TCP | 1883/1883 | 0.0.0.0/0 | MQTT 端口 |
| 1 | TCP | 8883/8883 | 0.0.0.0/0 | MQTT SSL 端口 |
| 1 | TCP | 18083/18083 | 0.0.0.0/0 | EMQX Dashboard |
| 1 | TCP | 22/22 | 0.0.0.0/0 | SSH 远程登录 |
| 1 | TCP | 8888/8888 | 0.0.0.0/0 | 宝塔面板(可选) |
配置说明:
- 授权对象
0.0.0.0/0:表示允许所有 IP 访问 - 安全建议:
- 端口 1883 和 8883 需要对所有人开放(无人机和地面站需要连接)
- 端口 18083(Dashboard)建议限制为你的办公室 IP
- 端口 22(SSH)建议限制为你的办公室 IP
[需要截图:安全组规则配置页面]
点击"保存"完成配置。
1.3 获取公网 IP
在阿里云控制台查看
- 进入 ECS 控制台:ecs.console.aliyun.com/
- 在实例列表中,找到你的服务器
- 在"IP 地址"列,可以看到公网 IP
示例:123.45.67.89
[需要截图:ECS 实例列表,标注公网 IP 位置]
记录公网 IP
重要:把这个公网 IP 记录下来,后续配置都需要用到!
我的服务器公网 IP:___________________
第二步:部署 EMQX服务器
2.1 登录服务器
有两种方式登录服务器:
方式一:阿里云 Workbench(推荐新手)
- 在 ECS 控制台,找到你的服务器
- 点击"远程连接" → "通过 Workbench 远程连接"
- 输入用户名:
root - 输入密码:购买时设置的密码
- 点击"确定"
[需要截图: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
重要:复制保存这些信息!
-
开放宝塔面板端口
- 回到阿里云控制台
- 安全组添加规则:
端口范围: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
⚠️ 重要:登录后立即修改默认密码!
修改默认密码
- 登录后,点击右上角用户图标
- 选择"用户管理"
- 点击 admin 用户的"编辑"
- 修改密码
- 保存
第三步:测试连接
Step1:测试 EMQX Dashboard(5分钟)
用户名:admin
密码:public
-
看到 Dashboard ✅
- 说明 EMQX 安装成功
-
修改默认密码(重要!)
- 点击右上角头像
- 点击 "修改密码"
- 设置新密码
Step2:测试地面站连接(5分钟)
-
打开地面站程序
-
配置连接
Broker Host: 你的公网IP(如:123.45.67.89)
Port: 1883
Drone ID: drone001
-
点击 "连接"
-
看到 "Connected" ✅
- 说明地面站可以连接到云服务器
-
在 EMQX Dashboard 中查看
- 刷新 Dashboard
- 点击左侧 "客户端"
- 应该看到 1 个连接(地面站)
Step3:测试无人机端连接(5分钟)
注意:这一步需要无人机端有 4G 网络或手机热点(测试时用电脑WiFi也可以实现连接)
-
连接 4G 网络
- 插入 4G 模块
- 或连接手机热点
-
打开无人机端程序
-
配置连接
Broker Host: 你的公网IP(如:123.45.67.89)
Port: 1883
Drone ID: drone001
-
点击 "连接"
-
看到 "已连接" ✅
-
在 EMQX Dashboard 中查看
- 应该看到 2 个连接(地面站 + 无人机)
Step4:测试点云传输(5分钟)
-
无人机端开始采集数据
- 点击 "开始采集"
-
地面站应该能看到点云 ✅
-
在 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 为例)
-
插入 SIM 卡:
- 打开 4G 模块的 SIM 卡槽
- 插入 SIM 卡(注意方向)
- 关闭卡槽
-
连接到电脑:
- 将 4G 模块插入 Intel NUC 的 USB 接口
- 等待 Windows 识别设备(约 10-30 秒)
-
安装驱动(如果需要):
- 大部分情况下 Windows 会自动安装驱动
- 如果未自动安装,访问华为官网下载驱动
3.3 配置网络连接
Windows 网络配置
- 打开网络设置:
- 右键点击任务栏网络图标
- 选择"打开网络和 Internet 设置"
[需要截图:Windows 网络设置]
-
检查 4G 连接:
- 在"状态"页面,应该能看到"移动网络"或"蜂窝网络"
- 状态应该是"已连接"
-
设置为默认网络(如果有多个网络):
- 打开"更改适配器选项"
- 找到 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 中查看客户端
-
打开 Dashboard:
- 访问:
http://你的公网IP:18083 - 登录:
admin/你修改后的密码
- 访问:
-
查看连接的客户端:
- 点击左侧菜单 客户端 → 连接管理
- 应该看到两个客户端:
drone001(无人机端)viewer_<timestamp>(地面站)
[需要截图:Dashboard 客户端连接列表]
- 检查客户端状态:
- 状态应该是"已连接"(绿色)
- 可以看到连接时间、IP 地址等信息
5.2 测试点云数据传输
在无人机端
-
加载测试数据:
- 点击 加载测试数据 按钮
- 或连接实际的 LiDAR 设备
-
查看发送状态:
- 观察日志输出
- 应该看到类似以下内容:
[INFO] Publishing point cloud: topic=lidar/drone001/pointcloud, size=xxx bytes
[INFO] Message published successfully
在地面站
-
查看接收状态:
- 应该能看到点云数据在 3D 视图中显示
- 统计信息更新(Data Rate、Points 等)
-
验证数据完整性:
- 点云显示正常
- 没有明显的数据丢失或延迟
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