IAgvPathService.cs
3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using Rcs.Application.Services.PathFind.Models;
namespace Rcs.Application.Services.PathFind;
/// <summary>
/// AGV寻路服务接口(统一锁模式)
/// @author zzy
/// </summary>
public interface IAgvPathService
{
/// <summary>
/// 计算路径
/// </summary>
Task<PathResult> CalculatePathAsync(PathRequest request, CancellationToken ct = default);
/// <summary>
/// 重新规划路径(障碍物/死锁/任务变更触发)
/// </summary>
/// <param name="request">路径请求</param>
/// <param name="mapCode">地图编码(用于释放统一锁)</param>
/// <param name="reason">重规划原因</param>
/// <param name="ct">取消令牌</param>
Task<PathResult> ReplanPathAsync(PathRequest request, string mapCode, string reason, CancellationToken ct = default);
/// <summary>
/// 锁定路径段(跨地图统一锁模式)
/// 使用 MapCode:NodeCode/EdgeCode 作为Key进行跨厂家地图的统一锁管理
/// </summary>
/// <param name="robotId">机器人ID</param>
/// <param name="mapCode">地图编码(同一物理环境的所有厂家地图使用相同的MapCode)</param>
/// <param name="segments">路径段列表(需包含NodeCode和EdgeCode)</param>
/// <param name="lockTimeMs">锁定时间(毫秒)</param>
/// <returns>锁定结果</returns>
Task<LockRequestResult> LockPathSegmentsAsync(Guid robotId, string mapCode, List<PathSegmentWithCode> segments, int lockTimeMs = 10000);
/// <summary>
/// 释放路径段(跨地图统一锁模式)
/// </summary>
/// <param name="robotId">机器人ID</param>
/// <param name="mapCode">地图编码</param>
/// <param name="segments">路径段列表</param>
/// <returns>释放的锁数量</returns>
Task<int> ReleasePathSegmentsAsync(Guid robotId, string mapCode, List<PathSegmentWithCode> segments);
/// <summary>
/// 释放机器人的所有锁
/// </summary>
/// <param name="robotId">机器人ID</param>
/// <returns>释放的锁数量</returns>
Task<int> ReleaseAllLocksAsync(Guid robotId);
/// <summary>
/// 检测路径冲突(跨地图)
/// </summary>
Task<PathConflictResult> CheckPathConflictAsync(Guid robotId, string mapCode, List<PathSegmentWithCode> segments);
/// <summary>
/// 使指定地图的图缓存失效
/// </summary>
void InvalidateGraphCache(Guid mapId);
/// <summary>
/// 清空所有图缓存
/// </summary>
void ClearAllGraphCache();
/// <summary>
/// 更新机器人状态
/// </summary>
void UpdateRobotState(RobotRuntimeState state);
/// <summary>
/// 检测并解决死锁
/// </summary>
Task<DeadlockResolution?> CheckAndResolveDeadlockAsync(Guid robotId);
/// <summary>
/// 获取或构建寻路图
/// @author zzy
/// </summary>
Task<PathGraph?> GetOrBuildGraphAsync(Guid mapId);
/// <summary>
/// 构建全局路径上下文
/// @author zzy
/// </summary>
GlobalPathContext BuildGlobalPathContext(Guid excludeRobotId);
/// <summary>
/// 使用地图图结构补全路径段的NodeCode信息
/// @author zzy
/// </summary>
List<PathSegmentWithCode> EnrichSegmentsWithCode(List<PathSegment> segments, PathGraph graph);
}