Files
FlyShotHost/CLAUDE.md
yunxiao.zhu 783716ff44 feat(fanuc): 改为按状态包驱动 J519 队列发送
* 预生成稠密轨迹 J519 命令队列,等待机器人状态包逐帧出队
* 让 ExecuteTrajectory 在队列实际取完后返回,避免后台发送提前结束
* 新增 ActualSendTiming.txt,区分实发时间与 speed_ratio 采样时间
* 补充 J519 队列、等待完成和实发时间映射相关单元测试
* 同步文档中的 t_send / t_traj / speed_ratio 说明

Co-authored-by: Copilot <copilot@github.com>
2026-05-06 12:57:56 +08:00

158 lines
5.6 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.

# Flyshot Replacement 仓库规范
## 1. 仓库目标
本仓库用于重写并替代现有 RVBUST/FANUC 飞拍服务端链路。
第一版目标固定为:
- 使用 `C# + .NET 8`
- 提供跨平台独立服务端
- 兼容现有 `50001/TCP+JSON` 上层接入语义
- 重写轨迹生成、触发时序、FANUC 控制链路和状态监控
- Windows / Linux 都能运行完整服务端
- 只支持当前现场这套组合
明确不做:
- GUI 桌面程序
- 多机器人同时控制
- 面向多控制柜的通用平台化框架
## 2. 代码与资料边界
本仓库是新的独立实现仓库,不复用旧的 RVBUST 二进制作为运行时依赖。
允许依赖的内容:
- 旧仓库中的逆向分析文档
- 旧仓库中的协议样本、轨迹样本和配置样本
- 旧仓库中的 `ControllerClient.h` 公开接口
不允许把旧服务端实现直接包装成“新系统”。
## 3. 当前目录结构
```text
flyshot-replacement/
├─ src/
│ ├─ Flyshot.Server.Host/
│ ├─ Flyshot.Core.Domain/
│ └─ Flyshot.Runtime.Common/
├─ tests/
│ ├─ Flyshot.Server.IntegrationTests/
│ └─ Flyshot.Core.Tests/
├─ FlyshotReplacement.sln
├─ Directory.Build.props
├─ README.md
└─ AGENTS.md
```
后续新增模块时,优先保持以下边界:
- `Flyshot.Core.Domain`
- 纯领域对象
- 不依赖网络、文件系统、HTTP、UI、操作系统
- `Flyshot.Core.Config`
- 配置兼容
- `.robot` 解析
- 路径兼容
- `Flyshot.Core.Planning`
- `icsp`
- `self-adapt-icsp`
- `doubles`
- `Flyshot.Core.Triggering`
- `TrajectoryDO` 等价时间轴
- `shot_flags / offset_values / addr` 解析
- `Flyshot.ControllerClientCompat`
- HTTP 控制器后端兼容服务
-`ControllerClient` 语义适配
- 不启动 `50001/TCP+JSON` 监听
- `Flyshot.Runtime.Fanuc`
- `10010 / 10012 / 60015`
- `Flyshot.Web.Status`
- 状态查看
- 诊断页
- 不直接处理底层协议细节
## 4. 开发规范
### 4.1 通用要求
- 正式文档默认使用中文。
- 不要把临时验证脚本直接塞进正式运行时代码。
- 兼容性优先级高于“重新发明接口”。
- 第一版默认围绕当前现场组合实现,不提前做泛化设计。
### 4.2 实现约束
- 旧协议兼容以“语义兼容”为主,不追求二进制逐字节一致。
- 轨迹规划必须与底层 Socket / HTTP / Web UI 解耦。
- 领域层不允许引用 ASP.NET Core、Socket、文件系统 API。
- 网页只做状态监控,不把复杂控制流程放进前端。
- 多机型切换通过不同 `.robot` 文件加载,不在第一版做插件化机型框架。
### 4.3 测试要求
- 默认采用 TDD。
- 至少先写失败测试,再写最小实现。
- 每完成一个阶段,要补最小可运行验证,而不是只看代码编译是否“像是对的”。
### 4.4 注释要求
- 所有生成代码都必须带中文注释,不可缺漏。
- 所有类定义都必须在类头提供 XML 注释。
- 所有静态变量都必须提供 XML 注释。
- 关键代码块必须补充单行注释,说明该段逻辑为什么存在、在做什么,不允许只写空泛注释。
## 5. 构建与验证命令
在当前环境中,推荐使用下面两条命令:
```bash
/bin/bash -lc 'DOTNET_CLI_HOME=/tmp NUGET_PACKAGES=/tmp/nuget-packages dotnet test tests/Flyshot.Server.IntegrationTests/Flyshot.Server.IntegrationTests.csproj -v minimal'
/bin/bash -lc 'DOTNET_CLI_HOME=/tmp NUGET_PACKAGES=/tmp/nuget-packages dotnet build FlyshotReplacement.sln --no-restore -v minimal'
```
说明:
- 第一条命令当前已经验证通过,可用于检查最小宿主和 `/healthz`
- 第二条命令当前已经验证通过,可用于检查解决方案骨架是否完整。
后续新增模块时,继续补充:
- `Flyshot.Core.Tests`
- 协议回放测试
- golden sample 对拍测试
- 端到端集成测试
## 6. 修改前优先查看的资料
本仓库上层是独立实现,但上下文仍然依赖父目录中的逆向资料。开始重要改动前,优先阅读:
- `../analysis/ControllerServer_analysis.md`
- `../analysis/ICSP_algorithm_reverse_analysis.md`
- `../analysis/CommonMsg_protocol_analysis.md`
- `../analysis/J519_stream_motion_analysis.md`
- `../analysis/UTTC_20260428_packet_validation.md`
- `../analysis/FANUC_realtime_comm_analysis.md`
- `../FlyingShot/FlyingShot/Include/ControllerClient/ControllerClient.h`
## 7. 任务推进方式
- `README.md` 中的 Todo 需要随着阶段推进同步更新。
- 如果实现范围发生收敛或扩展,先更新设计或计划,再继续改代码。
- 如果发现计划漏了关键对象或模块,直接补到文档里,不要把缺口留到后面。
## 8. 当前已验证状态
- 独立仓库已初始化。
- `dotnet 8` 解决方案骨架已建立。
- `Flyshot.Server.Host` 已提供最小 `/healthz`
- 最小集成测试已通过。
- 解决方案构建已通过。
- `10010` 状态帧以 `j519 协议.pcap``Rvbust/uttc-20260428/20260428.pcap` 真机抓包确认为 90B。
- `Rvbust/uttc-20260428` 抓包确认 J519 命令目标为关节角 `deg`,而导出 `JointDetialTraj.txt``rad`;执行链路必须做单位转换。
- `Rvbust/uttc-20260428` 抓包确认 `speed_ratio=0.7` 体现为 UDP 下发时间轴约 `1.427730x` 拉伸;本抓包机器人侧 `TCP 10012` 未出现 `0x2207 SetSpeedRatio`。J519 实发周期仍为 `t_send = k * 0.008`,原轨迹采样时间为 `t_traj = t_send * speed_ratio``UTTC_MS11``464` 行导出轨迹对应 `1322` 个主运行 J519 包。
- `Rvbust/uttc-20260428` 抓包确认 `UTTC_MS11` 的 17 个 `shot_flags=true` 对应 17 个 UDP IO 脉冲,`io_keep_cycles=2` 对应约两周期清零。