@hatiolab/things-scene 10.0.0-beta.92 → 10.0.0-beta.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-types/diagnostics/contract-inspector.d.ts +103 -0
- package/dist-types/diagnostics/contract-inspector.d.ts.map +1 -0
- package/dist-types/diagnostics/inspector.d.ts +44 -0
- package/dist-types/diagnostics/inspector.d.ts.map +1 -1
- package/dist-types/math/component-pose.d.ts +51 -0
- package/dist-types/math/component-pose.d.ts.map +1 -0
- package/dist-types/math/index.d.ts +3 -0
- package/dist-types/math/index.d.ts.map +1 -0
- package/dist-types/math/pose6dof.d.ts +93 -0
- package/dist-types/math/pose6dof.d.ts.map +1 -0
- package/dist-types/navigation/index.d.ts +7 -0
- package/dist-types/navigation/index.d.ts.map +1 -0
- package/dist-types/navigation/nav-graph.d.ts +55 -0
- package/dist-types/navigation/nav-graph.d.ts.map +1 -0
- package/dist-types/navigation/path-planner.d.ts +29 -0
- package/dist-types/navigation/path-planner.d.ts.map +1 -0
- package/dist-types/navigation/reservation-table.d.ts +103 -0
- package/dist-types/navigation/reservation-table.d.ts.map +1 -0
- package/dist-types/navigation/types.d.ts +145 -0
- package/dist-types/navigation/types.d.ts.map +1 -0
- package/dist-types/things-scene/index.d.ts +8 -2
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/transfer/container-capacity.d.ts +72 -0
- package/dist-types/transfer/container-capacity.d.ts.map +1 -1
- package/dist-types/transfer/index.d.ts +7 -1
- package/dist-types/transfer/index.d.ts.map +1 -1
- package/dist-types/transfer/pickup-helpers.d.ts +65 -0
- package/dist-types/transfer/pickup-helpers.d.ts.map +1 -0
- package/dist-types/transfer/transfer.d.ts +168 -0
- package/dist-types/transfer/transfer.d.ts.map +1 -0
- package/dist-types/transfer/types.d.ts +104 -0
- package/dist-types/transfer/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/things-scene-min.js +10 -10
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +6 -1
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { Vec3 } from '../transfer/types.js';
|
|
2
|
+
export interface LaneGeometry {
|
|
3
|
+
/** 중앙선의 점들 (시작 → 끝). */
|
|
4
|
+
centerPoints: Vec3[];
|
|
5
|
+
/** lane 의 폭 (vehicle 이 이 안에 들어가야 함). */
|
|
6
|
+
width: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Lane {
|
|
9
|
+
id: string;
|
|
10
|
+
geometry: LaneGeometry;
|
|
11
|
+
/** oneway 면 centerPoints 의 시작→끝 방향만, twoway 면 양방향 허용. */
|
|
12
|
+
direction: 'oneway' | 'twoway';
|
|
13
|
+
/** 속도 제한 (scene units / sim sec). undefined = 무제한. */
|
|
14
|
+
speedLimit?: number;
|
|
15
|
+
/** 통과 가능한 도구 type (Pickable.toolType 과 같은 축). 빈 배열 = 모두 허용. */
|
|
16
|
+
allowedToolTypes?: string[];
|
|
17
|
+
/** 동시에 들어갈 수 있는 vehicle 수. 1 = 단독 점유 (1차원 큐). */
|
|
18
|
+
capacity: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 두 lane 의 진입쌍이 충돌하는지 표현. e.g. north→south 와 east→west 는 직각
|
|
22
|
+
* 교차로에서 충돌하지만 north→east 와 south→east 는 충돌 안 함 (병행).
|
|
23
|
+
*/
|
|
24
|
+
export interface ConflictPair {
|
|
25
|
+
fromLane: string;
|
|
26
|
+
toLane: string;
|
|
27
|
+
/** 어떤 우선순위 정책을 적용할지. */
|
|
28
|
+
resolveBy: 'fifo' | 'priority' | 'roundrobin';
|
|
29
|
+
}
|
|
30
|
+
export interface Intersection {
|
|
31
|
+
id: string;
|
|
32
|
+
lanes: string[];
|
|
33
|
+
conflicts: ConflictPair[];
|
|
34
|
+
/** 통과 시간 (vehicle 이 교차로 안에 머무는 sim ms). 보수적으로 추정. */
|
|
35
|
+
crossingTimeMs: number;
|
|
36
|
+
}
|
|
37
|
+
export interface NavPolygon {
|
|
38
|
+
vertices: Vec3[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* lane 으로 표현하기 어려운 넓은 영역 (open warehouse floor, dock plaza 등).
|
|
42
|
+
* 시공간 격자로 점유권을 관리.
|
|
43
|
+
*/
|
|
44
|
+
export interface OpenZone {
|
|
45
|
+
id: string;
|
|
46
|
+
boundary: NavPolygon;
|
|
47
|
+
/** 점유 격자의 cell 한 변 크기 (scene unit). 작을수록 정확하지만 reservation 많아짐. */
|
|
48
|
+
cellSize: number;
|
|
49
|
+
}
|
|
50
|
+
export interface TimeWindow {
|
|
51
|
+
/** sim time milliseconds. */
|
|
52
|
+
startSimMs: number;
|
|
53
|
+
endSimMs: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 어떤 resource 를 어떤 시간 window 동안 누가 점유하는가.
|
|
57
|
+
*
|
|
58
|
+
* resource 는 lane id / intersection id / open-zone cell key 등 resource 의
|
|
59
|
+
* 단일 식별자. cell 의 경우 e.g. `${zoneId}:cell:${i},${j}`.
|
|
60
|
+
*/
|
|
61
|
+
export interface Reservation {
|
|
62
|
+
id: string;
|
|
63
|
+
resource: string;
|
|
64
|
+
timeWindow: TimeWindow;
|
|
65
|
+
reserverId: string;
|
|
66
|
+
/** 낮을수록 우선. emergency = -1, task-bound = 0, idle = 10 등. */
|
|
67
|
+
priority: number;
|
|
68
|
+
/** 부수 메타 (어떤 task 의 일부인지, 어떤 carrier 를 운반 중인지 등). */
|
|
69
|
+
metadata?: Record<string, any>;
|
|
70
|
+
}
|
|
71
|
+
export interface SpeedProfile {
|
|
72
|
+
/** 최대 속도 (scene units / sim sec). */
|
|
73
|
+
max: number;
|
|
74
|
+
/** 가속도 (scene units / sim sec²). */
|
|
75
|
+
accel: number;
|
|
76
|
+
/** 감속도 (scene units / sim sec²). */
|
|
77
|
+
decel: number;
|
|
78
|
+
}
|
|
79
|
+
export interface PathSegment {
|
|
80
|
+
resource: string;
|
|
81
|
+
/** 이 segment 를 통과하는 sim time. */
|
|
82
|
+
timeWindow: TimeWindow;
|
|
83
|
+
/** segment 시작 / 끝 좌표 (시각화용). */
|
|
84
|
+
fromPos: Vec3;
|
|
85
|
+
toPos: Vec3;
|
|
86
|
+
}
|
|
87
|
+
export interface PathPlan {
|
|
88
|
+
segments: PathSegment[];
|
|
89
|
+
/** 전체 경로의 sim time 길이. */
|
|
90
|
+
totalDurationMs: number;
|
|
91
|
+
/** 전체 경로 길이 (scene unit). */
|
|
92
|
+
totalDistance: number;
|
|
93
|
+
}
|
|
94
|
+
export interface PathPlanOptions {
|
|
95
|
+
/** sim time 시작점. 미지정 시 현재 globalSimClock.now. */
|
|
96
|
+
startSimMs?: number;
|
|
97
|
+
/** vehicle 의 toolType — lane.allowedToolTypes 검사용. */
|
|
98
|
+
toolType?: string;
|
|
99
|
+
/** vehicle 의 speed profile. */
|
|
100
|
+
speed?: SpeedProfile;
|
|
101
|
+
/** 우선순위 (충돌 시 양보 결정용). */
|
|
102
|
+
priority?: number;
|
|
103
|
+
/** deadline (sim ms) — 이 시간 안에 도착 못 하면 null 반환. */
|
|
104
|
+
deadlineSimMs?: number;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Vehicle 이 navigation 능력을 노출하는 인터페이스. Mover 의 sub-trait.
|
|
108
|
+
*
|
|
109
|
+
* lifecycle:
|
|
110
|
+
* 1. planPath(target) → PathPlan | null (lookup, 부수효과 없음)
|
|
111
|
+
* 2. reservePath(plan) → Reservation[] | null (table 에 add, 충돌 시 null)
|
|
112
|
+
* 3. followReservation(rs) → Promise<void> (sim time 진행)
|
|
113
|
+
* 4. releaseReservation(rs) (도착 후 또는 cancel)
|
|
114
|
+
*
|
|
115
|
+
* 단계 분리로 충돌 감지가 commit 직전, replay 가 결정적, 디버깅이 가능.
|
|
116
|
+
*/
|
|
117
|
+
export interface Navigable {
|
|
118
|
+
toolType: string;
|
|
119
|
+
speedProfile: SpeedProfile;
|
|
120
|
+
/**
|
|
121
|
+
* 경로 계획. 시간-공간 reservation 가능성 검증 포함 (단, table 에 commit 안 함).
|
|
122
|
+
* null 반환 = 도달 가능 경로 없음 (deadline 초과 / 모든 lane 점유 등).
|
|
123
|
+
*/
|
|
124
|
+
planPath(target: Vec3, options?: PathPlanOptions): PathPlan | null;
|
|
125
|
+
/**
|
|
126
|
+
* 계획된 경로를 reservation table 에 commit. 다른 vehicle 이 이미 점유한
|
|
127
|
+
* window 와 충돌 시 null — 호출자가 reroute 하든 대기하든 결정.
|
|
128
|
+
*/
|
|
129
|
+
reservePath(plan: PathPlan, priority?: number): Reservation[] | null;
|
|
130
|
+
/**
|
|
131
|
+
* commit 된 reservation 따라 sim time 진행. resolve = 마지막 segment 도착.
|
|
132
|
+
*/
|
|
133
|
+
followReservation(reservations: Reservation[]): Promise<void>;
|
|
134
|
+
/** 점유 해제. 도착 완료 또는 cancel 시 호출. */
|
|
135
|
+
releaseReservation(reservations: Reservation[]): void;
|
|
136
|
+
}
|
|
137
|
+
export type YieldDecision = 'a-yields' | 'b-yields' | 'replan-both';
|
|
138
|
+
export interface YieldPolicy {
|
|
139
|
+
/**
|
|
140
|
+
* 두 reservation 이 시간-공간 충돌할 때 누가 양보하는가.
|
|
141
|
+
* 기본: priority 낮은 (수치 높은) 쪽이 양보. 같으면 fifo (먼저 만든 게 우선).
|
|
142
|
+
*/
|
|
143
|
+
resolveConflict(a: Reservation, b: Reservation): YieldDecision;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,8 +28,14 @@ export type { SceneRenderContext, DrawOptions, StyleOptions, FillStyle, StrokeSt
|
|
|
28
28
|
export type { LinkEnd } from '../decorator/decorators/link-decorator.js';
|
|
29
29
|
export type { LAYOUT, LayoutRegistry } from '../interfaces/layout.js';
|
|
30
30
|
export type { IRealObject } from '../interfaces/real-object.js';
|
|
31
|
-
export type { Vec3, Size3, Bounds3, SlotArrangement, GridShape, SlotDef, SlotAssignment, TransferOptions, StaticPolicy, DynamicPolicy, PendingPolicy, ConnectionPolicy, Port, TransferEventType, TransferEvent, CarrierAttachPoint, ArrangementStrategy, Transferable, NavigationTarget, NavigationOptions, Movable, ArticulatedCapability, MissionStatus, VehicleMission, MissionExecutor, SensorPoint, SpawnPoint, SinkPoint, SimulationClock } from '../transfer/index.js';
|
|
32
|
-
export { FixedSlotStrategy, CenteringSlotStrategy, ContainerCapacity, TRANSFER_SLOT_KEY, globalSimClock } from '../transfer/index.js';
|
|
31
|
+
export type { Vec3, Size3, Bounds3, SlotArrangement, GridShape, SlotDef, SlotAssignment, TransferOptions, StaticPolicy, DynamicPolicy, PendingPolicy, ConnectionPolicy, Port, TransferEventType, TransferEvent, CarrierAttachPoint, ArrangementStrategy, Transferable, NavigationTarget, NavigationOptions, Movable, ArticulatedCapability, MissionStatus, VehicleMission, MissionExecutor, SensorPoint, SpawnPoint, SinkPoint, SimulationClock, TransferPhase, TransferTimeline, TransferReceipt, TransferReceiptJSON, TransferLogStats, PhysicalRunner, TransferInit, QuatLike, PoseSerialized, PickupFrame, PickupRequester, Pickable, RectangularFootprintOptions, TopApproachOptions } from '../transfer/index.js';
|
|
32
|
+
export { FixedSlotStrategy, CenteringSlotStrategy, ContainerCapacity, TRANSFER_SLOT_KEY, globalSimClock, Transfer, transferLog, receiptToJSON, quatFromYaw, rectangularFootprintFrames, topApproachFrame, filterByToolType, chooseNearestPickupFrame } from '../transfer/index.js';
|
|
33
|
+
export { Pose6DOF, getPose, getWorldPose, setPose, setWorldPose } from '../math/index.js';
|
|
34
|
+
export type { PoseLike } from '../math/index.js';
|
|
35
|
+
export { ReservationTable, reservationTable, standardYieldPolicy, NavGraph, buildNavGraph, planPathAStar, planToReservations } from '../navigation/index.js';
|
|
36
|
+
export type { LaneGeometry, Lane, ConflictPair, Intersection, NavPolygon, OpenZone, TimeWindow, Reservation, SpeedProfile, PathSegment, PathPlan, PathPlanOptions, Navigable, YieldDecision, YieldPolicy, ReservationEvent, AddResult, Conflict, ConflictRecord, NavNode, NavEdge, BuildNavGraphOptions } from '../navigation/index.js';
|
|
37
|
+
export { buildContractInspector, installContractInspector } from '../diagnostics/contract-inspector.js';
|
|
38
|
+
export type { ContractInspector, InspectorComponentSummary, InspectorSimStatus } from '../diagnostics/contract-inspector.js';
|
|
33
39
|
export { frameClock } from '../clock/index.js';
|
|
34
40
|
export type { FrameClock, TickHandler, Unsubscribe, SubscribeOptions, SubscriptionInfo, FrameClockSnapshot, ExternalAnimationInfo, ExternalAnimationHandle } from '../clock/index.js';
|
|
35
41
|
export { default as ReferenceMap } from '../core/reference-map.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/things-scene/index.ts"],"names":[],"mappings":"AAIA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAEzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,yBAAiB,KAAK,CAAC;IACd,MAAM,OAAO,iBAAW,CAAA;IACxB,MAAM,SAAS,mBAAa,CAAA;IAC5B,MAAM,MAAM,gBAAU,CAAA;IACtB,MAAM,KAAK,eAAS,CAAA;CAC5B;AAED,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,cAAc,aAAa,CAAA;AAE3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AAGjC,YAAY,EACV,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EACxE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EACzE,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACpH,YAAY,EACV,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EACxF,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EACtE,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAA;AACxE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG/D,YAAY,EACV,IAAI,EACJ,KAAK,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,EACT,eAAe,EAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/things-scene/index.ts"],"names":[],"mappings":"AAIA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAEzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,yBAAiB,KAAK,CAAC;IACd,MAAM,OAAO,iBAAW,CAAA;IACxB,MAAM,SAAS,mBAAa,CAAA;IAC5B,MAAM,MAAM,gBAAU,CAAA;IACtB,MAAM,KAAK,eAAS,CAAA;CAC5B;AAED,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,cAAc,aAAa,CAAA;AAE3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AAGjC,YAAY,EACV,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EACxE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EACzE,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACpH,YAAY,EACV,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EACxF,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EACtE,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAA;AACxE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG/D,YAAY,EACV,IAAI,EACJ,KAAK,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,EACT,eAAe,EAEf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,YAAY,EAEZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,eAAe,EACf,QAAQ,EACR,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EAEd,QAAQ,EACR,WAAW,EACX,aAAa,EAEb,WAAW,EACX,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzF,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAIhD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,cAAc,EACd,OAAO,EACP,OAAO,EACP,oBAAoB,EACrB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AACvG,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AAG5H,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAElE,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAClH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACnE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAElE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAGhF,cAAc,uBAAuB,CAAA;AAGrC,cAAc,oBAAoB,CAAA;AAGlC,cAAc,oBAAoB,CAAA"}
|
|
@@ -34,6 +34,78 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
34
34
|
* Fires 'transfer-rejected'; subclasses may trigger fallback routing.
|
|
35
35
|
*/
|
|
36
36
|
rejectRoute(component: any, reason?: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* carrier 의 받아들일 회전 (parent-local quaternion). 기본 identity.
|
|
39
|
+
* 회전이 필요한 holder (induct = belt 진행 방향, rack cell = grid 정렬 등)
|
|
40
|
+
* 는 이 메소드만 override 하면 receive() 가 atomic 하게 적용한다.
|
|
41
|
+
*
|
|
42
|
+
* 반환값은 plain object {x,y,z,w} — THREE.Quaternion 도 그 인터페이스 만족.
|
|
43
|
+
*/
|
|
44
|
+
acceptanceRotation(_carrier: any, _slot?: SlotDef): {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
z: number;
|
|
48
|
+
w: number;
|
|
49
|
+
} | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* canReceive 의 풍부한 버전. ok 면 slot 동봉, 아니면 reason 명시.
|
|
52
|
+
* drag-over UI 가 사유 표시하기 위함. canReceive 와 동일 결정 사용.
|
|
53
|
+
*/
|
|
54
|
+
canAccept(component: any): {
|
|
55
|
+
ok: true;
|
|
56
|
+
slot: SlotDef;
|
|
57
|
+
} | {
|
|
58
|
+
ok: false;
|
|
59
|
+
reason: string;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* receive 의 alias — Phase G2 contract 의 명시적 이름. 기존 receive 호출자도
|
|
63
|
+
* 그대로 작동.
|
|
64
|
+
*/
|
|
65
|
+
accept(component: any, options?: TransferOptions): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Phase G5 — physical mover (robot-arm, AGV docking 등) 가 query 하는
|
|
68
|
+
* delivery world rotation. carrier 가 holder 에 도달했을 때 가져야 할
|
|
69
|
+
* world quaternion.
|
|
70
|
+
*
|
|
71
|
+
* delivery.world = holder.world.quat × acceptanceRotation_local
|
|
72
|
+
*
|
|
73
|
+
* source 가 이걸 미리 알면 TCP yaw 를 점진적으로 맞춰 carrier 가
|
|
74
|
+
* acceptance pose 에 도달한 채로 release → handoff 시 zero-delta → 시각적
|
|
75
|
+
* 점프 없음.
|
|
76
|
+
*
|
|
77
|
+
* acceptanceRotation 미정의 OR _realObject 미빌드 시 undefined.
|
|
78
|
+
*/
|
|
79
|
+
deliveryWorldRotation(carrier: any): {
|
|
80
|
+
x: number;
|
|
81
|
+
y: number;
|
|
82
|
+
z: number;
|
|
83
|
+
w: number;
|
|
84
|
+
} | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Phase G9 — physical mover 가 query 하는 delivery world position.
|
|
87
|
+
*
|
|
88
|
+
* carrier 가 holder 에 도달했을 때 가져야 할 world XYZ. position 만 — rotation
|
|
89
|
+
* 은 deliveryWorldRotation 이 별도로 제공. 두 결과를 합치면 source 의 trajectory
|
|
90
|
+
* endpoint 가 됨.
|
|
91
|
+
*
|
|
92
|
+
* 기본 구현 — receivingSurfaceY 가 있으면 belt 표면 위, 없으면 slot.localPosition,
|
|
93
|
+
* 둘 다 없으면 holder object3d 원점.
|
|
94
|
+
*
|
|
95
|
+
* surface_world_y = holder.localToWorld((0, receivingSurfaceY - geometricOffsetY, 0)).y
|
|
96
|
+
* surface_world_xz = holder.world.xz
|
|
97
|
+
*
|
|
98
|
+
* receivingSurfaceY 의 정의가 cz-formula-tuned (= beltTopY + parent.geometricOffsetY)
|
|
99
|
+
* 라 그 차분 (- parent.geometricOffsetY) 으로 raw local 표면 Y 를 뽑아낸다.
|
|
100
|
+
*
|
|
101
|
+
* 호출 전제: holder 의 _realObject 가 빌드돼 있고 obj3d.matrixWorld 가 최신.
|
|
102
|
+
* 빌드 안 된 상태면 undefined → 호출자가 fallback (예: 2D bounds 기반).
|
|
103
|
+
*/
|
|
104
|
+
deliveryWorldPosition(_carrier: any): {
|
|
105
|
+
x: number;
|
|
106
|
+
y: number;
|
|
107
|
+
z: number;
|
|
108
|
+
} | undefined;
|
|
37
109
|
attachPointFor(component: any): CarrierAttachPoint | null;
|
|
38
110
|
/** Count children currently assigned to `slotId`. */
|
|
39
111
|
_countOccupied(slotId: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-capacity.d.ts","sourceRoot":"","sources":["../../src/transfer/container-capacity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container-capacity.d.ts","sourceRoot":"","sources":["../../src/transfer/container-capacity.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACjH,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAOvD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,oBAAoB,CAAA;AAElD,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAExD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK;kBARtC,GAAG,EAAE;QAa9C,mDAAmD;qBACtC,OAAO,EAAE;QAItB;;;WAGG;mCACwB,mBAAmB;8BAMxB,GAAG,GAAG,OAAO;4BAKf,GAAG,GAAG,OAAO,GAAG,IAAI;2BAsBf,GAAG,YAAW,eAAe,GAAQ,OAAO,CAAC,IAAI,CAAC;4BA+EjD,GAAG,UAAU,YAAY,YAAW,eAAe,GAAQ,OAAO,CAAC,IAAI,CAAC;0BAoChF,GAAG,GAAG,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAI1E;;;;WAIG;iCACsB,GAAG,WAAW,YAAY,GAAG,IAAI;QAI1D;;;WAGG;+BACoB,GAAG,oBAAwB,IAAI;QAWtD;;;;;;WAMG;qCAC0B,GAAG,UAAU,OAAO,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;QAI9G;;;WAGG;6BACkB,GAAG,GAAG;YAAE,EAAE,EAAE,IAAI,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE;QAmBtF;;;WAGG;0BACe,GAAG,YAAY,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;QAIhE;;;;;;;;;;;;WAYG;uCAC4B,GAAG,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;QAe/F;;;;;;;;;;;;;;;;;;WAkBG;wCAC6B,GAAG,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;kCAwB3D,GAAG,GAAG,kBAAkB,GAAG,IAAI;QAgBzD,qDAAqD;+BAC9B,MAAM,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAMzC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
export type { Vec3, Size3, Bounds3, SlotArrangement, GridShape, SlotDef, SlotAssignment, TransferOptions, StaticPolicy, DynamicPolicy, PendingPolicy, ConnectionPolicy, Port, TransferEventType, TransferEvent, CarrierAttachPoint, ArrangementStrategy, Transferable, NavigationTarget, NavigationOptions, Movable, ArticulatedCapability, MissionStatus, VehicleMission, MissionExecutor, SensorPoint, SpawnPoint, SinkPoint } from './types.js';
|
|
1
|
+
export type { Vec3, Size3, Bounds3, SlotArrangement, GridShape, SlotDef, SlotAssignment, TransferOptions, StaticPolicy, DynamicPolicy, PendingPolicy, ConnectionPolicy, Port, TransferEventType, TransferEvent, CarrierAttachPoint, ArrangementStrategy, Transferable, NavigationTarget, NavigationOptions, Movable, ArticulatedCapability, MissionStatus, VehicleMission, MissionExecutor, SensorPoint, SpawnPoint, SinkPoint, QuatLike, PoseSerialized, PickupFrame, PickupRequester, Pickable } from './types.js';
|
|
2
|
+
export { quatFromYaw, rectangularFootprintFrames, topApproachFrame, filterByToolType, chooseNearestPickupFrame } from './pickup-helpers.js';
|
|
3
|
+
export type { RectangularFootprintOptions, TopApproachOptions } from './pickup-helpers.js';
|
|
2
4
|
export { FixedSlotStrategy, fixedSlotStrategy } from './fixed-slot-strategy.js';
|
|
3
5
|
export { CenteringSlotStrategy } from './centering-slot-strategy.js';
|
|
4
6
|
export { ContainerCapacity, TRANSFER_SLOT_KEY } from './container-capacity.js';
|
|
5
7
|
export type { SimulationClock } from './simulation-clock.js';
|
|
6
8
|
export { globalSimClock } from './simulation-clock.js';
|
|
9
|
+
export { Transfer, transferLog, receiptToJSON } from './transfer.js';
|
|
10
|
+
export type { TransferPhase, TransferTimeline, TransferReceipt, TransferReceiptJSON, TransferLogStats, PhysicalRunner, TransferInit } from './transfer.js';
|
|
11
|
+
export { ReservationTable, reservationTable, standardYieldPolicy, NavGraph, buildNavGraph, planPathAStar, planToReservations } from '../navigation/index.js';
|
|
12
|
+
export type { LaneGeometry, Lane, ConflictPair, Intersection, NavPolygon, OpenZone, TimeWindow, Reservation, SpeedProfile, PathSegment, PathPlan, PathPlanOptions, Navigable, YieldDecision, YieldPolicy, ReservationEvent, AddResult, Conflict, ConflictRecord, NavNode, NavEdge, BuildNavGraphOptions } from '../navigation/index.js';
|
|
7
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,IAAI,EACJ,KAAK,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,IAAI,EACJ,KAAK,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,EAET,QAAQ,EACR,cAAc,EACd,WAAW,EACX,eAAe,EACf,QAAQ,EACT,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,WAAW,EACX,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE1F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC9E,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAItD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACpE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,YAAY,EACb,MAAM,eAAe,CAAA;AAItB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,cAAc,EACd,OAAO,EACP,OAAO,EACP,oBAAoB,EACrB,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { PickupFrame, PickupRequester, Vec3, QuatLike, PoseSerialized } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Y 축 (3D vertical) 회전을 quaternion 으로. Three.js 없이 직접 계산 (cross-package
|
|
4
|
+
* 호환성).
|
|
5
|
+
*
|
|
6
|
+
* q = (0, sin(θ/2), 0, cos(θ/2))
|
|
7
|
+
*/
|
|
8
|
+
export declare function quatFromYaw(yawRad: number): QuatLike;
|
|
9
|
+
export interface RectangularFootprintOptions {
|
|
10
|
+
/** carrier 의 world pose — entry 들이 이 frame 기준으로 회전/병진된다. */
|
|
11
|
+
carrierWorld: PoseSerialized;
|
|
12
|
+
/** carrier 의 가로 (X 방향). */
|
|
13
|
+
width: number;
|
|
14
|
+
/** carrier 의 세로 (Z 방향). */
|
|
15
|
+
depth: number;
|
|
16
|
+
/** entry 가 carrier 의 어느 높이에 있는가 (carrier-local Y). */
|
|
17
|
+
entryHeight: number;
|
|
18
|
+
/** approach 가 engage 에서 얼마나 떨어진 거리. */
|
|
19
|
+
approachDistance: number;
|
|
20
|
+
/** 어느 면에 entry 를 둘지. 'east'+'west' = 2-way, 4 개 다 = 4-way. */
|
|
21
|
+
sides: ReadonlyArray<'east' | 'west' | 'north' | 'south'>;
|
|
22
|
+
/** entry 의 toolType. 모두 동일하면 string, 면별 다르면 map. */
|
|
23
|
+
toolType: string | Partial<Record<'east' | 'west' | 'north' | 'south', string>>;
|
|
24
|
+
/** entry 의 tolerance. */
|
|
25
|
+
tolerance?: PickupFrame['tolerance'];
|
|
26
|
+
/** entry 의 priority. */
|
|
27
|
+
priority?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 직사각형 carrier 의 N-면 진입 entry 들을 한꺼번에 생성.
|
|
31
|
+
*
|
|
32
|
+
* 각 entry 의 engage 는 carrier 의 해당 면 중심 (carrier-local), approach 는
|
|
33
|
+
* 그 외부 approachDistance 만큼 떨어진 점. 도구는 carrier 쪽을 향한 채 (yaw)
|
|
34
|
+
* 다가오는 자세.
|
|
35
|
+
*/
|
|
36
|
+
export declare function rectangularFootprintFrames(options: RectangularFootprintOptions): PickupFrame[];
|
|
37
|
+
export interface TopApproachOptions {
|
|
38
|
+
carrierWorld: PoseSerialized;
|
|
39
|
+
/** carrier 의 top 표면 Y (carrier-local). */
|
|
40
|
+
topY: number;
|
|
41
|
+
/** approach 가 top 에서 얼마나 위에 있는가. */
|
|
42
|
+
approachDistance: number;
|
|
43
|
+
toolType: string;
|
|
44
|
+
tolerance?: PickupFrame['tolerance'];
|
|
45
|
+
priority?: number;
|
|
46
|
+
id?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 위쪽 한 점 진입 (예: vacuum gripper 로 box 집기, 자석으로 철판 들기).
|
|
50
|
+
*
|
|
51
|
+
* engage 는 carrier 의 top 표면 중심, approach 는 그 위 approachDistance.
|
|
52
|
+
* 도구는 carrier 위에서 수직 하강 — yaw 보존 (도구가 회전하지 않음).
|
|
53
|
+
*/
|
|
54
|
+
export declare function topApproachFrame(options: TopApproachOptions): PickupFrame;
|
|
55
|
+
/**
|
|
56
|
+
* Pickable.pickupFramesFor 의 기본 구현. 도구 type 일치하는 entry 만 통과.
|
|
57
|
+
* tool footprint 까지 검사하고 싶으면 carrier 가 자체 override.
|
|
58
|
+
*/
|
|
59
|
+
export declare function filterByToolType(frames: PickupFrame[], requester: PickupRequester): PickupFrame[];
|
|
60
|
+
/**
|
|
61
|
+
* 두 entry 중 source 위치에 더 가까운 것을 고르는 helper. distance 는 approach
|
|
62
|
+
* pose 위치 기준. priority 가 다르면 priority 우선.
|
|
63
|
+
*/
|
|
64
|
+
export declare function chooseNearestPickupFrame(frames: PickupFrame[], fromWorldPosition: Vec3): PickupFrame | null;
|
|
65
|
+
//# sourceMappingURL=pickup-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickup-helpers.d.ts","sourceRoot":"","sources":["../../src/transfer/pickup-helpers.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAI9F;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAQpD;AA2CD,MAAM,WAAW,2BAA2B;IAC1C,4DAA4D;IAC5D,YAAY,EAAE,cAAc,CAAA;IAC5B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,8DAA8D;IAC9D,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAA;IACzD,oDAAoD;IACpD,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/E,yBAAyB;IACzB,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IACpC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAYD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,WAAW,EAAE,CAiD9F;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,cAAc,CAAA;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAoBzE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EAAE,EACrB,SAAS,EAAE,eAAe,GACzB,WAAW,EAAE,CAEf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EAAE,EACrB,iBAAiB,EAAE,IAAI,GACtB,WAAW,GAAG,IAAI,CAkBpB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { Transferable, TransferOptions } from './types.js';
|
|
2
|
+
export type TransferPhase = 'pending' | 'planning' | 'physical' | 'handoff' | 'committed' | 'rolled-back';
|
|
3
|
+
export interface TransferTimeline {
|
|
4
|
+
initiatedAt: number;
|
|
5
|
+
planStartAt?: number;
|
|
6
|
+
planEndAt?: number;
|
|
7
|
+
physicalStartAt?: number;
|
|
8
|
+
physicalEndAt?: number;
|
|
9
|
+
handoffAt?: number;
|
|
10
|
+
committedAt?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface TransferReceipt {
|
|
13
|
+
transferId: string;
|
|
14
|
+
source: any;
|
|
15
|
+
target: any;
|
|
16
|
+
carrier: any;
|
|
17
|
+
/** Phase G7 — 직렬화 용. live refs 가 GC 되어도 보존되는 식별자. */
|
|
18
|
+
sourceId?: string;
|
|
19
|
+
targetId?: string;
|
|
20
|
+
carrierId?: string;
|
|
21
|
+
phase: TransferPhase;
|
|
22
|
+
timeline: TransferTimeline;
|
|
23
|
+
slotId?: string;
|
|
24
|
+
rejectReason?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* TransferReceipt 의 직렬화 형태 — live ref 제외, ID 만. JSON.stringify 안전.
|
|
28
|
+
* Phase G7 의 snapshot/replay 용.
|
|
29
|
+
*/
|
|
30
|
+
export interface TransferReceiptJSON {
|
|
31
|
+
transferId: string;
|
|
32
|
+
sourceId?: string;
|
|
33
|
+
targetId?: string;
|
|
34
|
+
carrierId?: string;
|
|
35
|
+
phase: TransferPhase;
|
|
36
|
+
timeline: TransferTimeline;
|
|
37
|
+
slotId?: string;
|
|
38
|
+
rejectReason?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Receipt 의 plain JSON 변환. live ref 제외, undefined 필드 omit (JSON
|
|
42
|
+
* round-trip 결정성 보장).
|
|
43
|
+
*/
|
|
44
|
+
export declare function receiptToJSON(receipt: TransferReceipt): TransferReceiptJSON;
|
|
45
|
+
/**
|
|
46
|
+
* Source 가 physical 단계에서 사용하는 운반 함수. logical-only source
|
|
47
|
+
* (Conveyor.dispatch 등) 는 noop 으로 즉시 resolve.
|
|
48
|
+
*
|
|
49
|
+
* 호출 시점: Transfer 의 physical phase 진입.
|
|
50
|
+
* 반환: physical 운반 완료 (carrier 가 target.deliveryPose 에 도달) 시 resolve.
|
|
51
|
+
*/
|
|
52
|
+
export type PhysicalRunner = () => Promise<void>;
|
|
53
|
+
export interface TransferLogStats {
|
|
54
|
+
total: number;
|
|
55
|
+
byPhase: Record<string, number>;
|
|
56
|
+
committed: number;
|
|
57
|
+
rolledBack: number;
|
|
58
|
+
rejectionRate: number;
|
|
59
|
+
avgTransferDurationMs: number;
|
|
60
|
+
}
|
|
61
|
+
export interface TransferInit {
|
|
62
|
+
source: any;
|
|
63
|
+
target: Transferable;
|
|
64
|
+
carrier: any;
|
|
65
|
+
options?: TransferOptions;
|
|
66
|
+
/** physical 운반자 (RobotArm, AGV 등). 미지정 시 즉시 통과. */
|
|
67
|
+
physical?: PhysicalRunner;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Transfer — 한 carrier 의 source → target 이동 사건.
|
|
71
|
+
*
|
|
72
|
+
* 사용:
|
|
73
|
+
* const t = new Transfer({ source, target, carrier, options })
|
|
74
|
+
* const receipt = await t.execute()
|
|
75
|
+
*
|
|
76
|
+
* 또는 Transferable.dispatch 가 내부적으로:
|
|
77
|
+
* const t = new Transfer({ source: this, target, carrier, options })
|
|
78
|
+
* await t.execute()
|
|
79
|
+
*/
|
|
80
|
+
export declare class Transfer {
|
|
81
|
+
readonly id: string;
|
|
82
|
+
readonly source: any;
|
|
83
|
+
readonly target: Transferable;
|
|
84
|
+
readonly carrier: any;
|
|
85
|
+
readonly options: TransferOptions;
|
|
86
|
+
readonly physical: PhysicalRunner | null;
|
|
87
|
+
private _phase;
|
|
88
|
+
private _timeline;
|
|
89
|
+
private _slot;
|
|
90
|
+
private _rejectReason?;
|
|
91
|
+
constructor(init: TransferInit);
|
|
92
|
+
get phase(): TransferPhase;
|
|
93
|
+
get timeline(): Readonly<TransferTimeline>;
|
|
94
|
+
/**
|
|
95
|
+
* 5-phase 실행. 각 phase 진입 시 timeline 갱신, 완료 시 receipt 반환.
|
|
96
|
+
*
|
|
97
|
+
* Negotiate / Plan 단계에서 거부 → rolled-back receipt.
|
|
98
|
+
* Physical 단계에서 throw → rolled-back receipt.
|
|
99
|
+
* Handoff 이후 throw 는 일관성 깨질 수 있으므로 그대로 propagate.
|
|
100
|
+
*/
|
|
101
|
+
execute(): Promise<TransferReceipt>;
|
|
102
|
+
/**
|
|
103
|
+
* physical / planning 도중 외부 취소. handoff 이후엔 호출 금지 (이미 commit 됨).
|
|
104
|
+
* 현재 구현은 phase 만 표시하고 carrier 의 상태는 건드리지 않음 — physical
|
|
105
|
+
* 운반자가 자체 cancel 책임.
|
|
106
|
+
*/
|
|
107
|
+
rollback(): void;
|
|
108
|
+
private _buildReceipt;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 모든 Transfer 의 receipt 를 기록하는 singleton. observability 의 기반.
|
|
112
|
+
* Phase G7 — JSON snapshot/load 지원으로 외부 도구 (Chrome extension 등) 에서
|
|
113
|
+
* 라이브 또는 저장된 로그를 동일하게 시각화할 수 있다.
|
|
114
|
+
*/
|
|
115
|
+
declare class TransferLogImpl {
|
|
116
|
+
private _entries;
|
|
117
|
+
private _maxEntries;
|
|
118
|
+
private _listeners;
|
|
119
|
+
append(receipt: TransferReceipt): void;
|
|
120
|
+
/** 모든 receipt 반환 (read-only 사본). */
|
|
121
|
+
entries(): readonly TransferReceipt[];
|
|
122
|
+
/** carrier 별 transfer 이력. live ref 매칭 우선, fallback 으로 carrierId. */
|
|
123
|
+
forCarrier(carrier: any): readonly TransferReceipt[];
|
|
124
|
+
/** carrierId 로 직접 조회 (snapshot 복원 후 등 live ref 가 없을 때). */
|
|
125
|
+
forCarrierId(carrierId: string): readonly TransferReceipt[];
|
|
126
|
+
/** sourceId 로 조회 — 특정 vehicle / source 의 transfer 이력. */
|
|
127
|
+
forSourceId(sourceId: string): readonly TransferReceipt[];
|
|
128
|
+
/** targetId 로 조회 — 특정 holder 의 receive 이력. */
|
|
129
|
+
forTargetId(targetId: string): readonly TransferReceipt[];
|
|
130
|
+
/** phase 별 필터 (e.g. 'rolled-back' 만 — 실패 진단). */
|
|
131
|
+
forPhase(phase: TransferPhase): readonly TransferReceipt[];
|
|
132
|
+
/**
|
|
133
|
+
* sim-time 범위로 필터. transfer 의 initiatedAt 이 [startSimMs, endSimMs] 안에 있는지.
|
|
134
|
+
* 'overlap' 모드 — initiatedAt..committedAt 윈도우가 query 윈도우와 겹치면 포함.
|
|
135
|
+
*/
|
|
136
|
+
inTimeRange(startSimMs: number, endSimMs: number, mode?: 'init' | 'overlap'): readonly TransferReceipt[];
|
|
137
|
+
/** rejectReason 별 그룹화 — 실패 패턴 진단. */
|
|
138
|
+
groupByRejectReason(): Map<string, readonly TransferReceipt[]>;
|
|
139
|
+
/** 통계 — 전체 / phase 별 / 거부율 / 평균 transfer 시간 등. */
|
|
140
|
+
stats(): TransferLogStats;
|
|
141
|
+
/** 새 receipt 마다 호출되는 listener 등록. */
|
|
142
|
+
subscribe(listener: (receipt: TransferReceipt) => void): () => void;
|
|
143
|
+
clear(): void;
|
|
144
|
+
setMaxEntries(n: number): void;
|
|
145
|
+
/**
|
|
146
|
+
* 모든 receipt 를 JSON 안전한 plain object 배열로. live ref 제외, ID 만 포함.
|
|
147
|
+
* JSON.stringify(transferLog.toJSON()) 안전.
|
|
148
|
+
*/
|
|
149
|
+
toJSON(): TransferReceiptJSON[];
|
|
150
|
+
/**
|
|
151
|
+
* JSON 배열에서 entries 복원 (기존 entries 대체). 외부 viewer (extension) 가
|
|
152
|
+
* 저장된 로그를 로드해서 시각화할 때 사용.
|
|
153
|
+
*
|
|
154
|
+
* 복원된 receipt 는 source/target/carrier 의 live ref 가 undefined — ID 만으로
|
|
155
|
+
* 추적 (forCarrierId, sourceId, targetId 등). listener 에는 알림 안 함 (load
|
|
156
|
+
* 는 silent).
|
|
157
|
+
*/
|
|
158
|
+
fromJSON(json: TransferReceiptJSON[]): void;
|
|
159
|
+
/**
|
|
160
|
+
* 저장된 로그를 listener 에게 순서대로 다시 발화 — extension 이 세션 시작 시
|
|
161
|
+
* 기존 entries 도 받고 싶을 때. listener 가 새 receipt 와 replayed receipt 를
|
|
162
|
+
* 구분 못 하므로 호출자가 의도적으로 사용.
|
|
163
|
+
*/
|
|
164
|
+
replayTo(listener: (receipt: TransferReceipt) => void): void;
|
|
165
|
+
}
|
|
166
|
+
export declare const transferLog: TransferLogImpl;
|
|
167
|
+
export {};
|
|
168
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/transfer/transfer.ts"],"names":[],"mappings":"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"}
|