Skip to content

Latest commit

 

History

History
806 lines (611 loc) · 19 KB

File metadata and controls

806 lines (611 loc) · 19 KB

OpenNeuro 阶段二计划 - "实时与同步核心" (The Real-time Core)

文档版本: v1.0
发布日期: 2026 年 1 月 20 日
计划覆盖期: 2026 Q2 - 2026 Q4 (9 个月)
目标状态: ✅ 规划中 (Planning Phase)


📋 执行摘要

阶段二愿景

"为机器人系统引入微秒级精度的分布式时间同步确定性网络调度, 使多个节点能够以硬实时精度协同运动。"

关键目标

  1. PTP 时间同步 (<10µs 精度)
  2. TSN 网络调度 (确定性延迟)
  3. 硬实时控制 (可预测的执行时间)
  4. 参考硬件设计 (开源 PCB)

成功指标

指标 目标 验收标准
时间同步精度 <10µs 99th percentile <10µs
确定性延迟 <1ms 峰值延迟 <1.2ms
硬件参考设计 1 套 PCB + BOM + 文档
生态支持 3+ 平台 STM32H7, RK3588, Jetson
文档完整度 100% API + 教程 + 案例

🎯 三个子项目分解

项目 2A: PTP 时间同步 (The Time Synchronization)

预计周期: 3-4 个月
优先级: ⭐⭐⭐⭐⭐ (最高)
复杂度: ★★★★☆

2A.1 技术方案

目标

在 OpenNeuro 系统中实现 IEEE 1588 v2 (PTP) 时间同步,使所有节点的时钟精度达到 <10 µs

架构设计
Master Clock (Grandmaster)
        ↓ SYNC 消息 (单向)
        │ (每秒 10 次)
        │
    ┌───┴───┬────────┬────────┐
    │       │        │        │
Slave 1  Slave 2  Slave 3  Slave N
(STM32)  (RK3588) (Jetson) (ESP32)
    │       │        │        │
    └───────┼────────┼────────┘
            │
        本地时钟
        同步至
        Grandmaster
        (误差 <10µs)
核心技术

1. PTP 协议实现

// ptp_clock.h
typedef struct {
    uint64_t offset_ns;        // 与 master 的时间偏差
    uint32_t delay_ns;         // 网络延迟
    uint64_t local_time_ns;    // 本地高精度时间
    uint32_t sync_interval;    // 同步间隔 (ms)
} ptp_state_t;

typedef struct {
    int32_t p;                 // PID 控制器 P
    int32_t i;                 // PID 控制器 I
    int32_t d;                 // PID 控制器 D
} ptp_pi_controller_t;

2. 硬件时间戳

在 STM32H7 / RK3588 上实现:

  • 以太网 MAC 硬件时间戳 (ingress/egress)
  • 微秒级精度时钟源
  • 时间戳捕获单元 (Timestamp Unit)
// 示例: STM32H7 PTP 时间戳
typedef struct {
    uint32_t sec;     // 秒
    uint32_t nsec;    // 纳秒 (0-999,999,999)
} stm32h7_timestamp_t;

void ptp_get_timestamp(stm32h7_timestamp_t *ts) {
    // 从以太网 MAC 读取精确时间戳
    // 精度: ±50ns (受晶体精度限制)
}

3. 时钟调整机制

调整方式 精度 延迟 应用场景
频率微调 (PPM) ±100ppm 分钟级 长期漂移
步进调整 ±1ns 即时 快速同步
虚拟时钟 ±1ns 即时 避免时间倒流

2A.2 详细任务分解

Phase 2A-1: PTP 协议栈开发 (4 周)

任务:

  1. libptp_master.c - Master 节点实现

    • SYNC 消息生成
    • FOLLOW_UP 消息处理
    • 时钟源管理
    • 状态机实现
  2. libptp_slave.c - Slave 节点实现

    • SYNC 消息处理
    • DELAY_REQ 消息生成
    • 时间偏差计算
    • 时钟调整
  3. ptp_config.h - 配置参数

    • 同步间隔
    • 允许的时间偏差
    • PID 参数
    • 网络配置

交付物:

  • firmware/ptp/ 目录
    • src/libptp_master.c
    • src/libptp_slave.c
    • src/ptp_config.h
    • include/ptp.h
    • README.md (API 文档)

验收标准:

  • ✅ Slave 能与 Master 通信
  • ✅ 时间偏差 <100µs (初步)
  • ✅ 代码测试覆盖率 >80%

Phase 2A-2: 硬件集成 (3 周)

任务 A: STM32H7 以太网时间戳

// stm32h7_ptp_hw.c
void stm32h7_ptp_init(void) {
    // 1. 配置以太网 PTP 单元
    ETH->PTPTSLR |= ETH_PTPTSLR_TSFCU;  // Fine update mode
    
    // 2. 启用时间戳捕获
    ETH->PTPTSHR = 0;  // 初始化秒寄存器
    ETH->PTPTSLR = 0;  // 初始化纳秒寄存器
}

void stm32h7_ptp_get_time(uint64_t *ns) {
    uint32_t sec = ETH->PTPTSHR;
    uint32_t nsec = ETH->PTPTSLR & 0x7FFFFFFF;
    *ns = (uint64_t)sec * 1000000000ULL + nsec;
}

任务 B: RK3588 系统时间调整

// rk3588_ptp_hw.c
// 使用 Linux kernel PTP 接口
void rk3588_ptp_adjust_clock(int64_t offset_ns) {
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    ts.tv_nsec += offset_ns % 1000000000LL;
    clock_settime(CLOCK_REALTIME, &ts);
}

任务 C: ESP32 软件时间戳

// esp32_ptp_hw.c
void esp32_ptp_get_timestamp(uint64_t *ns) {
    // 使用 FreeRTOS tick + 高精度定时器
    *ns = xTaskGetTickCountFromISR() * portTICK_PERIOD_MS * 1000000ULL;
}

交付物:

  • firmware/zenoh-pico-stm32/src/ptp_hw.c (STM32 适配)
  • firmware/zenoh-pico-esp32/src/ptp_hw.c (ESP32 适配)
  • 硬件集成文档

验收标准:

  • ✅ 时间戳获取延迟 <1µs
  • ✅ 时钟源精度验证
  • ✅ 硬件文档完整

Phase 2A-3: 性能验证与优化 (2 周)

测试场景:

  1. 本地时间同步 (Single Master + 3 Slaves)
Slave 节点时钟偏差 (µs)
├─ Slave 1: +2.1 µs ✓
├─ Slave 2: -1.8 µs ✓
├─ Slave 3: +0.9 µs ✓
└─ 整体偏差: σ = 1.6 µs (目标 <5 µs)
  1. 跨网络同步 (通过 Zenoh Router)
PC Master ──Ethernet─→ RK3588 Slave
                      (偏差: ±3µs)
                      
             ──WiFi──→ ESP32 Slave
                      (偏差: ±8µs)
  1. 长期稳定性测试 (24 小时)
时间偏差随时间变化:
│   ┌─────────────┐
│   │ 稳定区间    │ ±10µs
│┌──┤             ├──┐
││  │    频率校准 │  │
││  │    锁定     │  │
│└──┤             ├──┘
│   └─────────────┘
└─────────────────→ 时间

交付物:

  • tests/ptp_tests/ 目录
    • test_ptp_basic.py - 基础功能测试
    • test_ptp_accuracy.py - 精度验证
    • test_ptp_stability.py - 长期稳定性
    • ptp_performance_report.md - 性能报告

验收标准:

  • ✅ 同步精度 <10µs (P99)
  • ✅ 稳定性 >99.9%
  • ✅ 性能报告完整

2A.4 资源需求

资源 需求 备注
人力 2 人 1x 嵌入式, 1x 协议开发
硬件 现有 无额外成本
网络 Gigabit Ethernet 推荐,可选有线网络
工具 已有 网络分析仪 (可选)

项目 2B: TSN 网络调度 (Traffic Shaping)

预计周期: 4-6 个月
优先级: ⭐⭐⭐⭐ (高)
复杂度: ★★★★★ (最复杂)

2B.1 技术方案

目标

在 OpenNeuro 中实现 IEEE 802.1Qbv (Time-Aware Shaper)802.1Qci (Per-Stream Filtering), 实现:

  • ✅ 确定性包转发延迟 (<1ms)
  • ✅ 零丢包传输 (视频流 + 控制指令)
  • ✅ 优先级隔离 (关键任务 vs 非关键)
系统拓扑
                   TSN-Aware Switch
                   (802.1AS + 802.1Qbv)
                          │
          ┌───────────────┼───────────────┐
          │               │               │
      Port 1          Port 2          Port 3
      (Critical)     (Sensor)       (Video)
          │               │               │
        Port 1          Port 2          Port 3
      Gate Open:      Gate Open:      Gate Open:
      0-100µs         100-500µs       500-1000µs
      Period: 1ms
核心概念

1. 时间感知门禁 (Time-Aware Gating)

每个以太网端口有一个周期门禁表,定义了在给定时间窗口内哪些队列可以发送:

// tsn_gate.h
typedef struct {
    uint32_t time_slot_us;      // 时间槽 (µs)
    uint8_t gate_mask;          // 8 个队列的开/关状态
} tsn_gate_entry_t;

typedef struct {
    tsn_gate_entry_t entries[8];   // 最多 8 个时间槽
    uint32_t cycle_time_us;        // 周期时间 (通常 1ms)
    uint32_t base_time_ns;         // 基础时间戳
} tsn_gate_schedule_t;

2. 流量管制 (Per-Stream Filtering and Policing)

// tsn_stream.h
typedef struct {
    uint32_t stream_id;
    uint32_t max_frame_size;
    uint32_t max_bitrate_kbps;
    uint32_t max_latency_us;
    uint8_t priority;
} tsn_stream_config_t;

3. 优先级队列映射

优先级 0: 关键控制指令 (电机驱动)
优先级 1: 传感器命令 (ADC 采样)
优先级 2: 普通数据 (状态反馈)
优先级 3-7: 非实时流量 (视频, 日志)

2B.2 分阶段实现

Phase 2B-1: TSN 应用层接口设计 (3 周)
// tsn_api.h
/**
 * 创建 TSN 流
 */
int tsn_stream_create(
    const char *name,
    uint32_t max_frame_size,
    uint32_t max_latency_us,
    uint8_t priority,
    tsn_stream_handle_t *out_handle
);

/**
 * 设置门禁计划
 */
int tsn_set_gate_schedule(
    uint16_t port,
    const tsn_gate_schedule_t *schedule
);

/**
 * 发送 TSN 流量
 */
int tsn_stream_send(
    tsn_stream_handle_t handle,
    const uint8_t *payload,
    uint16_t length
);

/**
 * 接收 TSN 流量
 */
int tsn_stream_receive(
    tsn_stream_handle_t handle,
    uint8_t *payload,
    uint16_t max_length,
    uint32_t *latency_us
);
Phase 2B-2: Linux 交换机配置 (3 周)

使用 tc (Traffic Control)taprio 实现:

#!/bin/bash
# tsn_setup.sh

# 创建时间感知门禁调度器
# 周期: 1000µs (1ms)
# 时间槽 0-100µs: 队列 0-3 (关键)
# 时间槽 100-500µs: 队列 4-5 (传感器)
# 时间槽 500-1000µs: 队列 6-7 (非实时)

tc qdisc replace dev eth0 root taprio \
  num_tc 8 \
  map 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 \
  queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 \
  base-time 0 \
  sched-entry S 0x0F 100000 \
  sched-entry S 0x30 400000 \
  sched-entry S 0xC0 500000 \
  clockid CLOCK_TAI
Phase 2B-3: 硬件支持验证 (2 周)

检查交换机支持:

  • Marvell 交换机: ✅ 支持 802.1Qbv
  • Realtek: ⚠️ 有限支持 (需验证)
  • 推荐交换机: Marvell 88E6095 或更高

软件栈要求:

┌──────────────────┐
│  OpenNeuro App   │
├──────────────────┤
│ tsn_api.c        │
├──────────────────┤
│ Linux tc/taprio  │
├──────────────────┤
│ NIC 驱动         │
├──────────────────┤
│ 交换机硬件       │
└──────────────────┘

2B.4 演示场景

场景: 视频流 + 控制指令无干扰传输

背景: 通过网络同时传输:
- 1080p 30Hz 视频 (120 Mbps)
- 1kHz 电机控制指令 (5 Mbps)
- 10Hz 传感器数据 (1 Mbps)
总计: 126 Mbps (足以填满 1Gbps 链接 12.6%)

目标:
- 控制指令延迟: <1ms (不受视频影响)
- 视频帧间隔: 稳定 33.33ms
- 零丢包

项目 2C: 参考硬件设计 (Reference Design)

预计周期: 6-9 个月
优先级: ⭐⭐⭐ (中高)
复杂度: ★★★☆☆

2C.1 硬件目标

设计并开源 OpenNeuro Zone Controller PCB:

规格:

  • MCU: RK3588 或 i.MX 8M Plus
  • 网络: 2x Gigabit Ethernet (冗余)
  • I/O: 4x SPI, 8x I2C, 16x GPIO
  • 功率: 支持 48V PoE
  • 尺寸: 10cm x 10cm (紧凑)
  • 成本目标: <$200 BOM

功能:

  • ✅ Zenoh Router + PTP Master
  • ✅ 4 个 Neuron 的本地控制
  • ✅ 视频编码 (可选 NPU)
  • ✅ 故障检测和恢复

2C.2 设计流程

阶段 1: 原理图设计 (4 周)

KiCad 项目结构:
├── hardware/openneuro-zone-controller/
│   ├── OpenNeuro-ZoneController.sch
│   ├── power.sch (48V 转 12V, 3.3V)
│   ├── ethernet.sch (PHY + 磁盘)
│   ├── rk3588_core.sch
│   ├── io_expansion.sch
│   └── debugging.sch (UART, JTAG)
├── BOM.csv
└── Schematic_Review.md

阶段 2: PCB 布局 (6 周)

  • 信号完整性分析 (DDR, Ethernet)
  • 热管理设计
  • EMI/EMC 考虑
  • 制造工艺检查

阶段 3: 原型制造和验证 (6 周)

  • 小批量制造 (10 块)
  • 功能测试
  • 可靠性测试
  • 文档完善

2C.3 Neuro-Link 物理接口标准

定义标准化的连接器和线序:

Neuro-Link Connector (40-pin 0.1" header)

Power:
  Pin 1: +5V (电机/传感器)
  Pin 2: GND
  Pin 3: +3.3V (逻辑)

High-Speed (可选):
  Pin 4-7: Ethernet (LVDS)
  Pin 8-9: GND

Control (GPIO/PWM):
  Pin 10-19: PWM Out (8 channels)
  Pin 20-29: GPIO In (8 channels)
  
Debug (可选):
  Pin 30-31: UART Tx/Rx
  Pin 32-33: GND
  Pin 34-35: JTAG TCO/TDI
  Pin 36-37: GND
  Pin 38-40: 预留

线序标准:
- 所有 GND 在偶数引脚
- 所有 5V 在奇数引脚上半部
- 信号按功能分组

📅 详细时间表

Timeline

2026 Q2 (Apr-Jun)
├─ 周 1-4: PTP 协议栈开发
├─ 周 5-7: PTP 硬件集成
└─ 周 8: PTP 验证与文档

2026 Q3 (Jul-Sep)
├─ 周 1-3: TSN API 设计
├─ 周 4-6: Linux 交换机配置
├─ 周 7-9: TSN 硬件验证
├─ 周 10-12: 集成测试与优化
└─ 并行: 硬件设计阶段 1-2

2026 Q4 (Oct-Dec)
├─ 硬件设计阶段 2-3
├─ 文档完善
├─ 社区反馈收集
└─ v1.0 发布准备

里程碑

里程碑 日期 交付物
M2.1: PTP Alpha 2026-05-31 基础协议实现
M2.2: PTP Beta 2026-06-30 硬件集成完成
M2.3: TSN Alpha 2026-08-31 API 和驱动完成
M2.4: TSN Beta 2026-09-30 端到端验证
M2.5: Hardware v0.1 2026-10-31 第一版 PCB 设计
M2.6: v0.2.0 Release 2026-12-15 完整阶段二发布

👥 团队构成建议

核心团队 (4-5 人)

岗位 需求 预计工作量
PTP 协议开发 1 人 (资深) 1.0 FTE
网络/TSN 工程 1.5 人 1.5 FTE
硬件设计 1 人 1.0 FTE
测试/QA 1 人 1.0 FTE
文档/PM 0.5 人 0.5 FTE
总计 4.5-5 人 5.0 FTE

外部支持

  • 硬件厂商支持: RK3588, 交换机供应商
  • 社区评审: 每月技术分享
  • 学术顾问: PTP/TSN 领域专家 (可选)

💰 预算估算

成本分解

项目 成本 备注
人力成本 ¥250K 4.5 人 × 9 个月
硬件成本 ¥15K PCB 原型、测试仪器
工具/软件 ¥5K 许可证、网络仪器
文档/培训 ¥10K 教学视频、演讲
杂费 ¥5K 差旅、沟通、其他
总计 ¥285K

ROI 分析

  • 初期投入: ¥285K (阶段二)
  • 预期收益:
    • ✅ 商业授权费 (预计 50-100 家企业采用)
    • ✅ 技术咨询服务
    • ✅ 硬件销售 (参考设计)
    • 📈 预计 18 个月内回本

🎯 成功关键因素

技术关键点

  1. PTP 同步精度

    • 依赖: 硬件时间戳精度、网络延迟稳定性
    • 风险: 某些 MCU 无高精度定时器 → 缓解: 提供多个 MCU 方案
  2. TSN 交换机支持

    • 依赖: 硬件特性支持
    • 风险: 部分交换机不支持 802.1Qbv → 缓解: 提供交换机兼容性列表
  3. 集成和互操作性

    • 依赖: 多个系统的协调工作
    • 风险: 集成失败 → 缓解: 详细的集成测试

社区和市场关键点

  1. 早期用户反馈 (阶段一贡献者)
  2. 学术论文发表 (建立技术信誉)
  3. 行业会议演讲 (ROS World, ARM TechCon)
  4. 开源社区参与 (MergeBase, Apache)

🚀 启动计划 (Next 2 Weeks)

Week 1: 筹备和招募

  • 完成详细的 PTP 技术规范文档
  • 联系潜在团队成员
  • 建立项目管理系统 (GitHub Projects)
  • 准备开发环境

Week 2: 项目启动

  • 团队启动会议
  • 工具和基础设施配置
  • PTP 协议栈初版骨架代码
  • CI/CD 扩展 (PTP 测试管道)

📊 风险矩阵

风险 可能性 影响 缓解策略
硬件兼容性 尽早集成测试
性能达不到 原型验证
人力不足 培训和外援
社区反馈不好 充分沟通
硬件成本超支 设计审查

📖 知识积累目标

完成阶段二后,团队将掌握:

  • ✅ IEEE 1588 PTP 协议深度理解
  • ✅ TSN 和 802.1Qbv 标准实现
  • ✅ 嵌入式硬件时间戳和同步技术
  • ✅ 工业级网络设计和集成
  • ✅ 高精度实时系统工程

🌟 预期成果

技术成果

  1. PTP 时间同步库 (开源)

    • C 语言实现
    • 支持多个 MCU 和 Linux
    • 完整的 API 和示例
  2. TSN 配置和管理工具 (开源)

    • Python CLI 工具
    • Web 管理界面 (可选)
    • 实时监控和调试
  3. 参考硬件设计 (开源)

    • KiCad 原理图和 PCB 布局
    • BOM 和采购指南
    • 原型制造和验证报告
  4. 完整文档 (中英文)

    • PTP 集成指南
    • TSN 配置手册
    • 硬件组装和调试指南
    • 案例研究和最佳实践

商业成果

  1. 生态建设

    • 3-5 个早期商业合作伙伴
    • 技术培训和认证计划
  2. 市场定位

    • 定位为 "工业级机器人通信标准"
    • 对标 CANOE, ROS-Industrial
  3. 收入来源

    • 技术咨询服务
    • 硬件参考设计授权
    • 培训和认证

📝 下一步行动

立即行动 (本周)

  1. 成立 "阶段二工作组"
  2. 联系潜在技术合作伙伴
  3. 准备 PTP 详细设计文档
  4. 建立项目管理流程

短期目标 (1 个月内)

  1. 完成团队招募
  2. 建立开发环境
  3. PTP 协议栈 Alpha 版本
  4. 社区公开公告

中期目标 (6 个月)

  1. 两个完整的子项目 (PTP + TSN) 完成
  2. 参考硬件设计完成
  3. v0.2.0 发布

📚 参考资源

标准文档

  • IEEE 1588-2008: PTP v2 标准
  • IEEE 802.1AS: 时间同步协议
  • IEEE 802.1Qbv: 时间感知门禁调度
  • IEEE 802.1Qci: Per-Stream Filtering

开源项目参考

  • Linux ptp4l: PTP 实现参考
  • OpenDaylight: SDN 控制器参考
  • VRR Timing Engine: 实时调度参考

学术论文

  • "Precision Time Protocol for Power Systems"
  • "Deterministic Networking for Industrial IoT"
  • (将在实现过程中补充)

🎓 学习路径

建议团队成员按以下路径深入学习:

  1. 第 1-2 周: PTP 协议基础 + IEEE 1588 标准
  2. 第 3-4 周: 硬件时间戳和精密计时
  3. 第 5-6 周: TSN 网络调度和门禁控制
  4. 第 7-8 周: 端到端集成和系统优化
  5. 第 9+ 周: 高级主题 (故障转移、冗余等)

阶段二计划文档完成

现在已准备好启动真正的生产级机器人通信架构。

祝项目成功!🚀