feat(compat): 补齐飞拍执行等待与 FANUC 状态驱动链路

- 为 ExecuteFlyShotTraj 补齐 wait 语义,并让 move_to_start
  先完成临时 PTP 运动后再启动正式飞拍轨迹
- 将 J519 命令发送改为由机器人 UDP status sequence 驱动,
  避免在未收到状态包时主动发周期命令
- 将 10010 状态通道关节字段统一按 JointRadians 命名,
  同步更新运行时读取逻辑与协议测试
- 新增 FANUC 10010 状态帧、流运动手册和 Python client
  逆向文档,并更新 README 与兼容需求说明
- 补充兼容层编排测试与 HTTP 集成测试,覆盖 wait 和
  move_to_start 串行化行为
This commit is contained in:
2026-05-03 19:29:31 +08:00
parent 91c1494cde
commit af65ca03a0
17 changed files with 1694 additions and 214 deletions

View File

@@ -9,7 +9,7 @@ public sealed class FanucStateFrame
{
private readonly double[] _pose;
private readonly double[] _jointOrExtensionValues;
private readonly double[] _jointDegrees;
private readonly double[] _jointRadians;
private readonly double[] _externalAxes;
private readonly uint[] _tailWords;
@@ -46,7 +46,7 @@ public sealed class FanucStateFrame
throw new ArgumentException("状态帧尾部状态字必须包含 4 个 u32。", nameof(tailWords));
}
_jointDegrees = _jointOrExtensionValues.Take(6).ToArray();
_jointRadians = _jointOrExtensionValues.Take(6).ToArray();
_externalAxes = _jointOrExtensionValues.Skip(6).ToArray();
}
@@ -71,9 +71,9 @@ public sealed class FanucStateFrame
public IReadOnlyList<double> JointOrExtensionValues => _jointOrExtensionValues;
/// <summary>
/// 获取前 6 个机器人关节角度,单位为度
/// 获取前 6 个机器人关节角度,当前现场抓包更支持按弧度制理解
/// </summary>
public IReadOnlyList<double> JointDegrees => _jointDegrees;
public IReadOnlyList<double> JointRadians => _jointRadians;
/// <summary>
/// 获取后 3 个扩展轴槽位。当前现场样本中这些值通常为 0。