✨ feat(fanuc): 添加直角坐标点动功能与相关接口

* 新增 `MovePose` 方法,支持以直角坐标执行点到点移动。
* 引入 `LegacyCartesianPoseRequest` 类,处理直角位姿请求体的解析与验证。
* 更新 `LegacyHttpApiController`,实现 `/move_pose/` 路由以支持新功能。
* 增强状态快照元数据,提供机器人初始化状态与已上传轨迹信息。
* 更新前端状态页面,增加直角坐标点动控制面板与步长设置选项。
* 相关文档与测试用例同步更新,确保新功能的完整性与稳定性。
This commit is contained in:
2026-05-14 17:46:42 +08:00
parent d120ef2a39
commit 2cd42f04e5
22 changed files with 2062 additions and 104 deletions

View File

@@ -24,7 +24,8 @@ public sealed class TrajectoryResult
int plannedWaypointCount,
int triggerSampleIndexOffsetCycles = 0,
IEnumerable<IReadOnlyList<double>>? denseJointTrajectory = null,
FlyshotPreparedExecution? preparedFlyshotExecution = null)
FlyshotPreparedExecution? preparedFlyshotExecution = null,
IEnumerable<IReadOnlyList<double>>? denseCartesianTrajectory = null)
{
if (string.IsNullOrWhiteSpace(programName))
{
@@ -60,6 +61,7 @@ public sealed class TrajectoryResult
var copiedTriggerTimeline = triggerTimeline.ToArray();
var copiedArtifacts = artifacts.ToArray();
var copiedDenseJointTrajectory = denseJointTrajectory?.Select(static row => row.ToArray()).ToArray();
var copiedDenseCartesianTrajectory = denseCartesianTrajectory?.Select(static row => row.ToArray()).ToArray();
ProgramName = programName;
Method = method;
@@ -74,6 +76,7 @@ public sealed class TrajectoryResult
PlannedWaypointCount = plannedWaypointCount;
TriggerSampleIndexOffsetCycles = triggerSampleIndexOffsetCycles;
DenseJointTrajectory = copiedDenseJointTrajectory;
DenseCartesianTrajectory = copiedDenseCartesianTrajectory;
PreparedFlyshotExecution = preparedFlyshotExecution;
}
@@ -156,6 +159,13 @@ public sealed class TrajectoryResult
[JsonPropertyName("denseJointTrajectory")]
public IReadOnlyList<IReadOnlyList<double>>? DenseJointTrajectory { get; }
/// <summary>
/// 获取稠密直角坐标轨迹采样点,每行格式为 [time, x, y, z, w, p, r]。
/// Null 表示本结果不是直角流式运动。
/// </summary>
[JsonPropertyName("denseCartesianTrajectory")]
public IReadOnlyList<IReadOnlyList<double>>? DenseCartesianTrajectory { get; }
/// <summary>
/// Gets the prepared flyshot execution queue when the flyshot chain has already built the final 8ms send sequence.
/// </summary>