Files
FlyShotHost/AGENTS.md
yunxiao.zhu 0724efebed feat(*): 完善 FANUC J519 闭环、MoveJoint 与现场抓包验证
* 划分 J519 发送循环与稠密轨迹循环职责边界,
  FanucJ519Client 负责 UDP 周期发送,
  FanucControllerRuntime 按轨迹时间更新下一帧命令
* 执行时将规划输出 rad 转为 J519 deg 目标,
  并按 speed_ratio 调整 8ms 发送时间尺度
* 补齐 accept_cmd/received_cmd/sysrdy/rbt_inmotion
  状态位解析与启动前闭环检查
* MoveJoint 改为关节空间直线 + smoothstep 进度
  的临时 PTP 稠密轨迹,按 status=15 运动窗口复现
* 新增 UTTC 2026-04-28 三份抓包 golden tests,
  覆盖 0.5/0.7/1.0 speed_ratio 下的 J519 命令、
  IO 脉冲与响应滞后
* 状态通道补充超时重连策略与退避逻辑
* TCP 10012 命令响应统一检查 result_code
* 状态页扩展 J519 状态位与快照诊断信息
* 新增 docs/fanuc-field-runtime-workflow.md 现场工作流
* 补充 LR Mate 200iD 模型、RobotConfig.json 与 workpiece
2026-04-29 01:03:18 +08:00

8.3 KiB
Raw Blame History

Flyshot Replacement 仓库规范

1. 仓库目标

本仓库用于重写并替代现有 RVBUST/FANUC 飞拍服务端链路。

第一版目标固定为:

  • 使用 C# + .NET 8
  • 提供跨平台独立服务端
  • 以新的 ASP.NET Core HTTP API 作为唯一上层接口
  • 重写轨迹生成、触发时序、FANUC 控制链路和状态监控
  • Windows / Linux 都能运行完整服务端
  • 只支持当前现场这套组合

明确不做:

  • GUI 桌面程序
  • 多机器人同时控制
  • 面向多控制柜的通用平台化框架
  • 恢复旧 50001/TCP+JSON 网关

2. 代码与资料边界

本仓库是新的独立实现仓库,不复用旧的 RVBUST 二进制作为运行时依赖。

允许依赖的内容:

  • 旧仓库中的逆向分析文档
  • 旧仓库中的协议样本、轨迹样本和配置样本
  • 旧仓库中的 ControllerClient.h 公开接口

不允许把旧服务端实现直接包装成“新系统”。

3. 当前目录结构

flyshot-replacement/
  ├─ src/
  │  ├─ Flyshot.Server.Host/
  │  ├─ Flyshot.ControllerClientCompat/
  │  ├─ Flyshot.Core.Config/
  │  ├─ Flyshot.Core.Domain/
  │  ├─ Flyshot.Core.Planning/
  │  ├─ Flyshot.Core.Triggering/
  │  ├─ Flyshot.Runtime.Fanuc/
  │  └─ 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 实现约束

  • ControllerClient 资料只作为接口语义参考;运行时入口以新 HTTP API 为准,不恢复旧 50001/TCP+JSON 网关。
  • 旧协议兼容以“语义兼容”为主,不追求二进制逐字节一致。
  • 轨迹规划必须与底层 Socket / HTTP / Web UI 解耦。
  • 领域层不允许引用 ASP.NET Core、Socket、文件系统 API。
  • 网页只做状态监控,不把复杂控制流程放进前端。
  • 多机型切换通过不同 .robot 文件加载,不在第一版做插件化机型框架。

4.3 测试要求

  • 默认采用 TDD。
  • 至少先写失败测试,再写最小实现。
  • 每完成一个阶段,要补最小可运行验证,而不是只看代码编译是否“像是对的”。

4.4 注释要求

  • 所有生成代码都必须带中文注释,不可缺漏。
  • 所有类定义都必须在类头提供 XML 注释。
  • 所有静态变量都必须提供 XML 注释。
  • 关键代码块必须补充单行注释,说明该段逻辑为什么存在、在做什么,不允许只写空泛注释。

5. 构建与验证命令

在当前环境中,推荐使用下面两条命令:

/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

6.1 父目录资料引用约定

  • 日常开发、测试和 Codex 会话默认从 flyshot-replacement/ 根目录启动。
  • 当前仓库内的 @ 引用默认只覆盖本仓库文件,不要假设它能索引父目录资料。
  • 引用父目录资料时,统一直接写明确路径,优先使用相对路径,例如:
    • ../analysis/ICSP_algorithm_reverse_analysis.md
    • ../analysis/ControllerServer_analysis.md
    • ../FlyingShot/FlyingShot/Include/ControllerClient/ControllerClient.h
  • 当路径较长或跨工具复制时,可以使用绝对路径,但在文档和注释中优先保留相对路径写法,便于仓库整体搬迁。
  • 父目录中的 analysis/FlyingShot/RobotController/RPS/ 默认视为参考资料区,不在这些目录中继续落地新实现。
  • 新实现、测试、兼容层代码、设计文档和运行说明,都应优先写入 flyshot-replacement/ 内部。
  • 如果父目录资料中的某段结论会长期影响本仓库实现,应在本仓库 docs/ 中补充归纳说明,并标明来源路径,而不是要求后续开发反复回看聊天记录。
  • 如果需要引用父目录样本文件做测试输入,优先通过只读方式加载;只有在测试需要固化样本且样本已明确收敛时,才复制到本仓库测试数据目录。

7. 任务推进方式

  • README.md 中的 Todo 需要随着阶段推进同步更新。
  • 如果实现范围发生收敛或扩展,先更新设计或计划,再继续改代码。
  • 如果发现计划漏了关键对象或模块,直接补到文档里,不要把缺口留到后面。

8. 当前已验证状态

  • 独立仓库已初始化。
  • dotnet 8 解决方案骨架已建立。
  • Flyshot.Server.Host 已提供最小 /healthz
  • 最小集成测试已通过。
  • 解决方案构建已通过。
  • 新 HTTP API / HTTP-only ControllerClientCompat 已覆盖旧 HTTP 控制器后端的主要兼容语义。
  • Flyshot.Core.Planning 已落地 icspself-adapt-icsp,并已完成旧系统导出轨迹对齐。
  • Flyshot.Core.Triggering 已能从 shot_flags / offset_values / addr 生成触发时间轴。
  • Flyshot.Runtime.Fanuc 已固化 10010 / 10012 / 60015 基础协议帧编解码,10010 状态帧以 j519 协议.pcapRvbust/uttc-20260428/20260428.pcap 真机抓包确认为 90B。
  • Flyshot.Runtime.Fanuc 已将 TCP 10010 的 pose[6]joint[6]external_axes[3]raw_tail_words[4] 映射为明确状态帧字段,并在状态快照中保留尾部状态字诊断信息。
  • Rvbust/uttc-20260428 抓包确认 J519 命令目标为关节角 deg,而导出 JointDetialTraj.txtrad;执行链路必须做单位转换。
  • Rvbust/uttc-20260428 抓包确认 speed_ratio=0.7 体现为 UDP 下发时间轴约 1.427730x 拉伸;本抓包机器人侧 TCP 10012 未出现 0x2207 SetSpeedRatio,不要把速度缩放只建模成单个机器人命令。实发按 t_traj = k * 0.008 * speed_ratio 重采样,UTTC_MS11464 行导出轨迹对应 1322 个主运行 J519 包。
  • Rvbust/uttc-20260428 抓包确认 UTTC_MS11 的 17 个 shot_flags=true 对应 17 个 UDP IO 脉冲,io_keep_cycles=2 对应约两周期清零。
  • Flyshot.Runtime.Fanuc 已具备基础 Socket 客户端、速度倍率/TCP/IO 参数命令和 J519 周期发送链路;稠密轨迹下发已按 speed_ratio 推进轨迹时间J519 闭环状态判断与现场联调仍需补齐。
  • ExecuteTrajectory / ExecuteFlyShotTraj 已接入 Planning + Triggering + Runtime,不再只是兼容层内存赋值。