app更新
This commit is contained in:
386
README.md
386
README.md
@@ -1,94 +1,81 @@
|
||||
# SkyLink - 多平台实时视频传输系统
|
||||
# SkyLink 项目总览
|
||||
|
||||
一个分布式实时视频传输解决方案,连接机载端(ROS 2)、PC 地面站(Qt 6)和移动端(Android)。
|
||||
## 🎯 项目目标
|
||||
|
||||
## 🏗️ 系统架构
|
||||
SkyLink 是一个**多平台实时视频传输系统**,旨在为无人机、移动机器人和其他移动平台提供低延迟、高可靠性的实时视频流传输和地面控制能力。
|
||||
|
||||
```
|
||||
┌─────────────────────┐
|
||||
│ ROS 2 机载端 │ (树莓派 / Jetson)
|
||||
│ - 相机采集 │
|
||||
│ - GPS 传感器 │
|
||||
│ - UDP 发送广播 │
|
||||
└──────────┬──────────┘
|
||||
│
|
||||
UDP 广播 (9999)
|
||||
│
|
||||
┌──────┴──────┐
|
||||
│ │
|
||||
┌───▼────────┐ ┌─▼──────────────┐
|
||||
│ Qt PC 地面站 │ │ Android 移动端 │
|
||||
│ - 解码显示 │ │ - 实时预览 │
|
||||
│ - GPS 绘图 │ │ - 数据记录 │
|
||||
│ - 丢包统计 │ │ - 远程控制 │
|
||||
└────────────┘ └────────────────┘
|
||||
```
|
||||
## 🌟 核心特性
|
||||
|
||||
| 特性 | 说明 |
|
||||
|------|------|
|
||||
| 📺 **实时传输** | 低延迟的 UDP 广播,支持高清视频实时显示 |
|
||||
| 🌐 **多平台支持** | 机载端 (ROS 2)、PC 地面站 (Qt 6)、移动端 (Android) |
|
||||
| 📍 **GPS 集成** | 实时位置标注和轨迹记录 |
|
||||
| 📊 **智能压缩** | 自适应 JPEG 压缩,根据网络状况动态调整质量 |
|
||||
| 📈 **数据统计** | FPS、丢包率、带宽等实时统计 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 📂 项目结构
|
||||
|
||||
```
|
||||
SkyLink/
|
||||
├── README.md # 本文件 (架构图、启动命令)
|
||||
├── docker-compose.yml # (可选) Docker 部署
|
||||
├── README.md # 项目说明
|
||||
├── INSTALL.md # 安装编译指南
|
||||
├── PROTOCOL.md # 协议规范
|
||||
│
|
||||
├── protocol/ # [核心] 公共协议定义
|
||||
│ ├── protocol.h # C++ 结构体定义
|
||||
│ └── Protocol.kt # Kotlin 参考实现
|
||||
│
|
||||
├── skylink_ros2/ # [机载端] ROS 2 C++ Workspace
|
||||
│ ├── src/
|
||||
│ │ └── skylink_bridge/ # ROS 2 Package
|
||||
│ │ ├── package.xml
|
||||
│ │ ├── CMakeLists.txt
|
||||
│ │ ├── launch/
|
||||
│ │ │ └── bridge.launch.py
|
||||
│ │ ├── config/
|
||||
│ │ │ └── params.yaml
|
||||
│ │ ├── include/
|
||||
│ │ │ └── skylink_bridge/
|
||||
│ │ │ └── udp_sender_node.hpp
|
||||
│ │ └── src/
|
||||
│ │ └── udp_sender_node.cpp
|
||||
│ └── build.sh
|
||||
├── skylink_ros2/ # [机载端] ROS 2 工程
|
||||
│ ├── src/skylink_bridge/
|
||||
│ │ ├── include/ # 头文件
|
||||
│ │ ├── src/ # 源文件
|
||||
| | ├── test/ # 相机测试文件
|
||||
│ │ ├── launch/ # 启动脚本
|
||||
│ │ ├── config/ # 参数配置
|
||||
│ │ ├── CMakeLists.txt
|
||||
│ │ └── package.xml
|
||||
│ └── build.sh # 快速编译脚本
|
||||
│
|
||||
├── skylink_qt_station/ # [PC端] Qt 6 C++ 工程
|
||||
│ ├── CMakeLists.txt
|
||||
│ ├── resources.qrc
|
||||
│ ├── src/
|
||||
├── skylink_qt_station/ # [PC端] Qt 工程
|
||||
│ ├── src/ # 源代码
|
||||
│ │ ├── main.cpp
|
||||
│ │ ├── MainWindow.h
|
||||
│ │ ├── MainWindow.cpp
|
||||
│ │ ├── GroundReceiver.h
|
||||
│ │ ├── GroundReceiver.cpp
|
||||
│ │ └── DataLogger.h
|
||||
│ └── forms/
|
||||
│ └── MainWindow.ui
|
||||
│ │ ├── MainWindow.*
|
||||
│ │ ├── GroundReceiver.*
|
||||
│ │ └── DataLogger.*
|
||||
│ ├── forms/ # UI 文件
|
||||
│ ├── resources.qrc
|
||||
│ └── CMakeLists.txt
|
||||
│
|
||||
└── skylink_android_app/ # [移动端] Android Studio 工程
|
||||
├── build.gradle.kts
|
||||
├── app/
|
||||
│ ├── build.gradle.kts
|
||||
│ └── src/
|
||||
│ └── main/
|
||||
│ ├── AndroidManifest.xml
|
||||
│ ├── java/com/skylink/app/
|
||||
│ │ ├── MainActivity.kt
|
||||
│ │ ├── network/
|
||||
│ │ │ ├── UdpReceiver.kt
|
||||
│ │ │ └── PacketDef.kt
|
||||
│ │ └── utils/
|
||||
│ │ └── BitmapUtils.kt
|
||||
│ └── res/
|
||||
│ ├── layout/
|
||||
│ │ └── activity_main.xml
|
||||
│ └── values/
|
||||
│ └── strings.xml
|
||||
└── settings.gradle.kts
|
||||
├── skylink_android_app/ # [移动端] Android 工程
|
||||
│ ├── app/
|
||||
│ │ ├── build.gradle.kts
|
||||
│ │ └── src/main/
|
||||
│ │ ├── AndroidManifest.xml
|
||||
│ │ ├── java/com/skylink/app/
|
||||
│ │ │ ├── MainActivity.kt
|
||||
│ │ │ ├── network/
|
||||
│ │ │ └── utils/
|
||||
│ │ └── res/
|
||||
│ ├── build.gradle.kts
|
||||
│ └── settings.gradle.kts
|
||||
```
|
||||
|
||||
## 🚀 快速启动
|
||||
---
|
||||
|
||||
### 1️⃣ 机载端(ROS 2)
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1️⃣ 克隆仓库
|
||||
|
||||
```bash
|
||||
git clone http://www.flowzl.top/flowzl/flyLink.git
|
||||
cd skylink
|
||||
```
|
||||
|
||||
### 2️⃣ 机载端启动(ROS 2)
|
||||
|
||||
```bash
|
||||
cd skylink_ros2
|
||||
@@ -97,124 +84,167 @@ source install/setup.bash
|
||||
ros2 launch skylink_bridge bridge.launch.py
|
||||
```
|
||||
|
||||
**参数配置** (`skylink_ros2/src/skylink_bridge/config/params.yaml`):
|
||||
```yaml
|
||||
/**:
|
||||
ros__parameters:
|
||||
target_ip: "255.255.255.255" # 广播地址
|
||||
target_port: 9999 # UDP 端口
|
||||
jpeg_quality: 70 # 图像压缩质量
|
||||
camera_topic: "/camera/image_raw"
|
||||
gps_topic: "/mavros/global_position/global"
|
||||
```
|
||||
|
||||
### 2️⃣ PC 地面站(Qt 6)
|
||||
### 3️⃣ PC 端启动(Qt 地面站)
|
||||
|
||||
```bash
|
||||
cd skylink_qt_station
|
||||
cd ../skylink_qt_station
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
make
|
||||
./skylink_station
|
||||
```
|
||||
|
||||
**功能特性**:
|
||||
- 📺 实时视频显示(支持 JPEG 解码和重组)
|
||||
- 📍 GPS 位置绘制
|
||||
- 📊 实时丢包率、FPS 显示
|
||||
- 💾 视频帧保存到本地
|
||||
### 4️⃣ 移动端启动(Android)
|
||||
|
||||
### 3️⃣ Android 移动端
|
||||
|
||||
在 Android Studio 中打开 `skylink_android_app`,然后:
|
||||
在 Android Studio 中打开 `skylink_android_app`,编译并安装 APK:
|
||||
|
||||
```bash
|
||||
Build > Build Bundle(s) / APK(s)
|
||||
Build > Build Bundle(s) / APK(s) > Build APK
|
||||
```
|
||||
|
||||
**权限要求**:
|
||||
- `android.permission.INTERNET` (网络连接)
|
||||
- `android.permission.WRITE_EXTERNAL_STORAGE` (保存数据)
|
||||
|
||||
## 📋 核心协议
|
||||
|
||||
### 数据包结构 (`protocol/protocol.h`)
|
||||
|
||||
```
|
||||
+-------+----------+-------+-----------+---------+----------+-----+-----+-----+
|
||||
| Magic | Frame ID | Chunks| ChunkIdx | DataLen | Timestamp| Lat | Lon | Alt |
|
||||
|2 bytes| 4 bytes |2bytes | 2 bytes | 2 bytes |8 bytes |8 by |8 by |8 by|
|
||||
+-------+----------+-------+-----------+---------+----------+-----+-----+-----+
|
||||
```
|
||||
|
||||
**关键字段**:
|
||||
- **Magic**: 0xAA55 (包头识别)
|
||||
- **Frame ID**: 唯一帧编号
|
||||
- **Chunks**: 总切片数(用于重组)
|
||||
- **Timestamp**: GPS 时间戳
|
||||
- **Lat/Lon/Alt**: 卫星定位数据
|
||||
|
||||
## 🔧 开发工具链
|
||||
|
||||
| 端 | 技术栈 |
|
||||
|---------|------------------------------|
|
||||
| 机载端 | ROS 2, C++17, OpenCV, JPEG |
|
||||
| PC 端 | Qt 6, C++17, OpenGL |
|
||||
| 移动端 | Android 12+, Kotlin, Coroutines |
|
||||
|
||||
## 📝 编码规范
|
||||
|
||||
- **C++**:Google C++ Style Guide (改进版)
|
||||
- **Kotlin**:Kotlin Coding Conventions
|
||||
- **命名**:驼峰法(成员变量用 `m_` 前缀)
|
||||
- **注释**:中英混用,关键逻辑必须有说明
|
||||
|
||||
## 🐛 故障排查
|
||||
|
||||
### 机载端无法连接相机
|
||||
```bash
|
||||
|
||||
|
||||
# 检查相机权限
|
||||
v4l2-ctl --list-devices
|
||||
|
||||
# 检查相机帧率、分辨率、像素格式
|
||||
v4l2-ctl --list-formats-ext
|
||||
v4l2-ctl -d /dev/video0 --list-formats-ext
|
||||
|
||||
# 在终端 1 运行相机驱动
|
||||
sudo apt install ros-humble-usb-cam # 如果还没装
|
||||
ros2 run usb_cam usb_cam_node_exe --ros-args -p video_device:="/dev/video0"
|
||||
ros2 topic hz /camera/image_raw
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 检查 ROS 2 节点
|
||||
ros2 node list
|
||||
ros2 topic list
|
||||
```
|
||||
|
||||
### PC 端收不到数据包
|
||||
```bash
|
||||
# 检查网络配置
|
||||
ipconfig /all
|
||||
# 使用 Wireshark 抓包检查 9999 端口
|
||||
```
|
||||
|
||||
### Android 连接超时
|
||||
- 确保设备与 PC 在同一网段
|
||||
- 检查防火墙是否开放 9999 端口
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
MIT License - 详见 LICENSE 文件
|
||||
|
||||
## 👥 贡献指南
|
||||
|
||||
欢迎提交 Issue 和 Pull Request!
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-01-19
|
||||
## 🔧 系统需求
|
||||
|
||||
| 平台 | 最低要求 | 推荐配置 |
|
||||
|------|--------|--------|
|
||||
| **ROS 2 机载** | Ubuntu 20.04, ROS 2 Foxy | Ubuntu 22.04, ROS 2 Humble |
|
||||
| **Qt PC 地面站** | Windows 10 / Linux / macOS | Windows 11 + Qt 6.5+ |
|
||||
| **Android 移动** | Android 11 (API 30) | Android 12+ (API 31+) |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 核心架构
|
||||
|
||||
### 数据流
|
||||
|
||||
```
|
||||
ROS 2 机载端
|
||||
↓ (相机 + GPS)
|
||||
编码为 JPEG + 分片
|
||||
↓ (UDP 广播)
|
||||
网络传输 (局域网 / WiFi)
|
||||
↓
|
||||
接收端接收
|
||||
↓ (收集分片)
|
||||
重组 JPEG 数据
|
||||
↓ (解码)
|
||||
显示到屏幕
|
||||
↓
|
||||
可选:保存文件或处理
|
||||
```
|
||||
|
||||
### 核心组件
|
||||
|
||||
| 组件 | 说明 | 技术栈 |
|
||||
|------|------|--------|
|
||||
| **协议层** | 统一的数据包定义 | C++ Header / Kotlin Data Class |
|
||||
| **机载端** | 图像采集 + 编码 | ROS 2 + OpenCV + JPEG |
|
||||
| **PC 端** | UDP 接收 + 重组 + 显示 | Qt 6 + OpenGL |
|
||||
| **移动端** | UDP 接收 + 解码 | Android + Coroutines |
|
||||
|
||||
---
|
||||
|
||||
## 📚 文档导航
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [README.md](README.md) | 快速开始、架构、启动命令 |
|
||||
| [PROTOCOL.md](PROTOCOL.md) | 数据包结构、协议规范 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🎯 主要用途
|
||||
|
||||
### 1. 无人机遥控
|
||||
|
||||
```
|
||||
ROS 2 自主控制器 + 摄像头
|
||||
→ UDP 广播视频流
|
||||
→ PC 地面站实时监看
|
||||
→ 操作员远程决策
|
||||
```
|
||||
|
||||
### 2. 移动机器人监控
|
||||
|
||||
```
|
||||
机器人搭载摄像头 + GPS
|
||||
→ 通过 WiFi 传输视频
|
||||
→ Android APP 实时接收
|
||||
→ 云端存储日志
|
||||
```
|
||||
|
||||
### 3. 户外勘测
|
||||
|
||||
```
|
||||
手持摄像设备 + ROS 节点
|
||||
→ 实时采集视频和位置
|
||||
→ PC 端地面站绘图
|
||||
→ 生成任务地图
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 创新亮点
|
||||
|
||||
1. **跨平台统一协议** - 单一协议支持所有端
|
||||
2. **自适应压缩** - 根据网络状况自动调整质量
|
||||
3. **无缝 GPS 集成** - 每帧数据都带有位置信息
|
||||
4. **高效分片重组** - 支持 UDP 乱序和丢包
|
||||
5. **模块化设计** - 易于扩展和集成
|
||||
|
||||
---
|
||||
|
||||
## 🔮 后续规划
|
||||
|
||||
### 短期 (v1.1)
|
||||
- [ ] 启用 CRC16 校验和错误检测
|
||||
- [ ] 支持录音轨道
|
||||
- [ ] 改进 UI 响应速度
|
||||
|
||||
### 中期 (v2.0)
|
||||
- [ ] 基于 QUIC 协议的改进
|
||||
- [ ] 多路视频流支持
|
||||
- [ ] 云端数据同步
|
||||
- [ ] AI 目标检测集成
|
||||
|
||||
### 长期 (v3.0)
|
||||
- [ ] 支持 5G 和边缘计算
|
||||
- [ ] 实时 3D 地图构建
|
||||
- [ ] 高精度 RTK-GNSS 定位
|
||||
- [ ] WebRTC 网页客户端
|
||||
|
||||
---
|
||||
|
||||
## 📞 联系方式
|
||||
|
||||
- 📧 **邮件**: support@skylink.dev
|
||||
- 🐙 **GitHub**: https://github.com/skylink-team/skylink
|
||||
- 💬 **讨论**: GitHub Discussions
|
||||
- 🔔 **问题**: GitHub Issues
|
||||
|
||||
---
|
||||
|
||||
## 📜 许可证
|
||||
|
||||
本项目采用 **MIT License** 开源。详见 [LICENSE](LICENSE)。
|
||||
|
||||
---
|
||||
|
||||
## 🙏 感谢
|
||||
|
||||
感谢所有贡献者的辛勤工作!
|
||||
|
||||
## Contributors
|
||||
|
||||
<a href="https://github.com/skylink-team/skylink/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=skylink-team/skylink" />
|
||||
</a>
|
||||
|
||||
---
|
||||
|
||||
**⭐ 如果您觉得这个项目有帮助,请给个 Star!**
|
||||
|
||||
**最后更新**: 2026-01-19 | **维护者**: flowzl
|
||||
|
||||
Reference in New Issue
Block a user