Files
flyLink/skylink_ros2/FRAMERATE_FIX_CHECKLIST.md
flowerstonezl d90a98cd9d fpslow1
2026-01-19 21:24:59 +08:00

111 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 帧率低问题排查清单
## 🔍 问题症状
-`ros2 topic hz /camera/image_raw` 显示0.356 fps预期 30 fps
- ✅ 最大延迟快速增长0.032s → 68.640s
- ✅ UDP 发送节点日志显示 FPS: 0
## 🎯 根本原因
**每次发送 UDP 分片前都有 100 微秒的睡眠,且这个睡眠累加到数百毫秒级别,导致应用层严重阻塞**
## ✅ 已完成的修复
### 1. ❌ 删除致命的睡眠指令
**文件**`src/udp_sender_node.cpp` 第 345 行
```diff
- std::this_thread::sleep_for(std::chrono::microseconds(100));
```
**预期效果**:帧率提升 80-85 倍 (0.35 fps → 28-30 fps)
### 2. 📦 增加消息队列深度
**文件**`src/udp_sender_node.cpp` 第 98-107 行
```cpp
rclcpp::QoS qos_profile = rclcpp::SensorDataQoS();
qos_profile.keep_last(10); // 保留 10 条消息
```
**效果**:防止相机消息丢弃
### 3. 📊 修复 FPS 统计
**文件**`src/udp_sender_node.cpp` report_stats() 函数
**改动**:使用周期统计而非累计统计
**效果**:准确显示实时帧率
### 4. 🎬 优化相机格式
**文件**`config/params.yaml`
```yaml
pixel_format: "mjpeg" # 从 raw_mjpeg 改为 mjpeg
```
### 5. ⚙️ 新增性能参数
**文件**`config/params.yaml`
```yaml
qos_keep_last: 10
enable_batch_send: true
send_interval_ms: 0
```
## 🚀 后续测试步骤
### Step 1: 重新编译
```bash
cd ~/code/camera/flyLink/skylink_ros2
colcon build --packages-select skylink_bridge
source install/setup.bash
```
### Step 2: 运行 launch
```bash
ros2 launch skylink_bridge bridge.launch.py
```
### Step 3: 新终端测试帧率
```bash
ros2 topic hz /camera/image_raw
```
**预期输出**
```
average rate: 29.8
min: 0.032s max: 0.036s std dev: 0.002s window: 100
```
### Step 4: 检查日志
注意以下日志输出:
```
📊 统计 - FPS: 29, 速率: XXX KB/s, ...
```
(之前显示 FPS: 0
## 📋 检查清单
- [ ] 代码已修改3 处修改)
- [ ] 参数配置已更新
- [ ] 项目已重新编译
- [ ] 测试运行无编译错误
- [ ] 帧率恢复到 25-30 fps
- [ ] 日志显示正确的 FPS 统计
## ❓ 如果仍有问题
### 问题 1: 帧率仍低
- 检查 CPU 使用率 (`top` 命令)
- 检查网络拥塞 (`netstat -i`)
- 检查是否有其他进程占用 USB 摄像头
### 问题 2: 丢帧严重
- 增加 `qos_keep_last` 参数值
- 减少 JPEG 质量(`jpeg_quality: 70` → 60
- 检查网络带宽
### 问题 3: 消息未到达
- 检查 GPS Topic 是否存在:`ros2 topic list | grep mavros`
- 如果 GPS 不可用,设置 `enable_gps: false`
## 📚 相关文件
- 详细分析报告:`PERFORMANCE_OPTIMIZATION.md`
- 配置文件:`config/params.yaml`
- 源代码:`src/udp_sender_node.cpp`
- 头文件:`include/skylink_bridge/udp_sender_node.h`