drone-camera 0.0.0-stage → 0.1.2

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.
Files changed (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -2
  3. package/index.d.ts +51 -0
  4. package/index.d.ts.map +1 -0
  5. package/index.js +20474 -0
  6. package/index.js.map +1 -0
  7. package/index.umd.cjs +1361 -0
  8. package/index.umd.cjs.map +1 -0
  9. package/lib/drone-capture-manifest.d.ts +169 -0
  10. package/lib/drone-capture-manifest.d.ts.map +1 -0
  11. package/lib/drone-capture-panel.d.ts +135 -0
  12. package/lib/drone-capture-panel.d.ts.map +1 -0
  13. package/lib/drone-capture.d.ts +380 -0
  14. package/lib/drone-capture.d.ts.map +1 -0
  15. package/lib/drone-cesium-mission.d.ts +120 -0
  16. package/lib/drone-cesium-mission.d.ts.map +1 -0
  17. package/lib/drone-cesium-rig.d.ts +50 -0
  18. package/lib/drone-cesium-rig.d.ts.map +1 -0
  19. package/lib/drone-cesium.d.ts +519 -0
  20. package/lib/drone-cesium.d.ts.map +1 -0
  21. package/lib/drone-control.d.ts +188 -0
  22. package/lib/drone-control.d.ts.map +1 -0
  23. package/lib/drone-engine.d.ts +70 -0
  24. package/lib/drone-engine.d.ts.map +1 -0
  25. package/lib/drone-exif.d.ts +64 -0
  26. package/lib/drone-exif.d.ts.map +1 -0
  27. package/lib/drone-fly.d.ts +545 -0
  28. package/lib/drone-fly.d.ts.map +1 -0
  29. package/lib/drone-gallery.d.ts +146 -0
  30. package/lib/drone-gallery.d.ts.map +1 -0
  31. package/lib/drone-husky-model.d.ts +22 -0
  32. package/lib/drone-husky-model.d.ts.map +1 -0
  33. package/lib/drone-image-utils.d.ts +67 -0
  34. package/lib/drone-image-utils.d.ts.map +1 -0
  35. package/lib/drone-image-viewer.d.ts +97 -0
  36. package/lib/drone-image-viewer.d.ts.map +1 -0
  37. package/lib/drone-lights.d.ts +194 -0
  38. package/lib/drone-lights.d.ts.map +1 -0
  39. package/lib/drone-minimap.d.ts +155 -0
  40. package/lib/drone-minimap.d.ts.map +1 -0
  41. package/lib/drone-panel.d.ts +265 -0
  42. package/lib/drone-panel.d.ts.map +1 -0
  43. package/lib/drone-panorama-viewer.d.ts +162 -0
  44. package/lib/drone-panorama-viewer.d.ts.map +1 -0
  45. package/lib/drone-panorama.d.ts +242 -0
  46. package/lib/drone-panorama.d.ts.map +1 -0
  47. package/lib/drone-photogrammetry.d.ts +207 -0
  48. package/lib/drone-photogrammetry.d.ts.map +1 -0
  49. package/lib/drone-radar.d.ts +136 -0
  50. package/lib/drone-radar.d.ts.map +1 -0
  51. package/lib/drone-reconstruction-preview.d.ts +84 -0
  52. package/lib/drone-reconstruction-preview.d.ts.map +1 -0
  53. package/lib/drone-rig.d.ts +385 -0
  54. package/lib/drone-rig.d.ts.map +1 -0
  55. package/lib/drone-sim.d.ts +883 -0
  56. package/lib/drone-sim.d.ts.map +1 -0
  57. package/lib/drone-stitch.d.ts +84 -0
  58. package/lib/drone-stitch.d.ts.map +1 -0
  59. package/lib/drone-world.d.ts +194 -0
  60. package/lib/drone-world.d.ts.map +1 -0
  61. package/lib/mission-editor.d.ts +116 -0
  62. package/lib/mission-editor.d.ts.map +1 -0
  63. package/lib/mission-panel.d.ts +173 -0
  64. package/lib/mission-panel.d.ts.map +1 -0
  65. package/package.json +61 -4
@@ -0,0 +1,545 @@
1
+ /**
2
+ * 飞行沙盒的"装配层 + 主循环":把仿真内核(drone-sim)、模型机械(drone-rig)、场景辅助(drone-world)、
3
+ * 灯光(drone-lights)、雷达(drone-radar)接成一个可交互的三维飞行场景。
4
+ *
5
+ * 职责边界:本文件只做"推进仿真 + 把仿真状态映射到场景与相机";飞行物理在 drone-sim、
6
+ * 模型骨骼动画在 drone-rig,各子系统实现各归其模块。
7
+ *
8
+ * 对外导出 DroneFly(宿主类)、DroneFlyInitializeOptions(初始化配置)、DRONE_MODEL_URL(真机机体模型路径)、
9
+ * statusPatternFor(灯语映射)、DRONE_MAX_SPEED_METERS_PER_SECOND 及相机/拍照/录像类型,并转出 drone-sim / mission-editor 的公共类型。
10
+ * 非直觉约定:仿真用固定步长 1/60 推进、每帧只调一次 syncPose 写入场景;非 orbit 视角不得调 controls.update();拍照/录像共用云台取景相机位姿;
11
+ * initialize 不传 modelUrl 时用内置「机械哈士奇」机体(createHuskyDroneModel)而非去 /models 下找文件。
12
+ */
13
+ import * as THREE from 'three';
14
+ import type { DronePanelHost } from './drone-control';
15
+ import type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
16
+ import type { WebGPURenderer } from 'three/webgpu';
17
+ import { DroneLights, statusPatternFor } from './drone-lights';
18
+ import type { AuxLightMode, BatteryLightMode, StatusLightKey } from './drone-lights';
19
+ import { DroneRig, type RigPartReport } from './drone-rig';
20
+ import { DroneRadar, type RadarAim, type RadarSnapshot } from './drone-radar';
21
+ import { DroneWorld, type ObstacleSpec } from './drone-world';
22
+ import { MissionEditor, type MissionEditState } from './mission-editor';
23
+ import { DroneSim, type DroneSnapshot, type ChecklistItem, type FaultFlags, type FlightMode, type FlightPhase, type MissionConfig, type MissionExport, type MissionExportFormat, type MissionSnapshot, type MissionWaypoint, type SimConfig, type StickState } from './drone-sim';
24
+ import type { CaptureCameraState, CaptureViewOverride } from './drone-capture';
25
+ /**
26
+ * 默认真机机体模型路径(DJI Mini 4 Pro 重命名版)。
27
+ * 资产不随库打包,需使用方自行提供 —— 所以它**不再是 initialize() 的缺省值**:
28
+ * 不传 modelUrl 时用的是零依赖的内置积木机体,想要真机模型就把这个常量传进去。
29
+ */
30
+ export declare const DRONE_MODEL_URL = "/models/djiair_renamed.glb";
31
+ /** 机型最快档位速度,用于界面提示 */
32
+ export declare const DRONE_MAX_SPEED_METERS_PER_SECOND: number;
33
+ /** 旧版方向键 API(仅保留给外部复用) */
34
+ export type DroneDirection = 'up' | 'down' | 'left' | 'right';
35
+ /** 纯升降方向 */
36
+ export type DroneVerticalDirection = 'up' | 'down';
37
+ /** 纯偏航(左右转向)方向 */
38
+ export type DroneRotationDirection = 'left' | 'right';
39
+ export type { DroneSnapshot, FaultFlags, FlightMode, MissionConfig, MissionSnapshot, MissionWaypoint, SimConfig, StickState, } from './drone-sim';
40
+ export type { MissionExport, MissionExportFormat } from './drone-sim';
41
+ export { buildMissionExport, exportMissionText, findMissionInsertIndex, missionToCsv } from './drone-sim';
42
+ export type { MissionDragMode, MissionEditState, MissionEditorHost } from './mission-editor';
43
+ /** 相机视角模式:orbit=观察者(轨道控制器),follow=跟随,fpv=机载(云台视角) */
44
+ export type CameraMode = 'orbit' | 'follow' | 'fpv';
45
+ /** 面板用的相机模式列表(含中文标签) */
46
+ export declare const CAMERA_MODE_LIST: Array<{
47
+ key: CameraMode;
48
+ label: string;
49
+ }>;
50
+ /**
51
+ * 云台增稳档位 —— **模型不参与稳像,全部在相机侧反向抵消**:
52
+ * - `full`(默认):姿态 + 位置双解耦。取景相机的位置与朝向都由飞控真值直接解出
53
+ * (`机体平移 + R_y(航向)·挂点` / `R_y(航向+云台偏航)·R_x(云台俯仰)⊗安装偏置`),
54
+ * **完全不读骨骼链世界变换**。于是模型那边照旧物理真实(云台关节仍在做反向补偿、
55
+ * 仍有一阶跟随与行程夹紧),但那些"拟真副作用"一个都传不到画面里 —— 机载视角即
56
+ * 等效于真机的三轴机械云台:机身怎么倾斜,镜头都稳稳对着目标。
57
+ * - `physical`:相机改为**采样骨骼链**(位置取云台真实世界位姿),于是镜头会跟着
58
+ * 机体倾斜绕横滚轴画弧(镜头挂在重心下方约 0.14 m,侧倾 27° 即横移 ±6.7 cm),
59
+ * 云台关节的滞后与行程夹紧也会原样入画。想要"裸机硬核真实感"时用。
60
+ */
61
+ export type GimbalStabilization = 'full' | 'physical';
62
+ /** 云台增稳可调项(见 DroneFly.configureGimbal) */
63
+ export interface GimbalStabilizationOptions {
64
+ /** 增稳档位,默认 'full' */
65
+ stabilization?: GimbalStabilization;
66
+ /**
67
+ * 云台关节一阶跟随时间常数(秒):0 = 立即到位,默认 0.02(20 ms)。
68
+ * 只作用于**模型外观**(云台看起来像无刷电机一样有响应时间);
69
+ * `full` 档下相机不采样关节,所以不会因为滞后而晃。
70
+ */
71
+ response?: number;
72
+ /** 电子增稳强度 0~1:0 = 关闭,默认 0(解耦后目标姿态已无噪声,低通只会加滞后) */
73
+ smoothing?: number;
74
+ }
75
+ /** 单张照片(云台相机取景) */
76
+ export interface PhotoShot {
77
+ /** PNG data URL,可直接用于 <img> 或下载 */
78
+ dataUrl: string;
79
+ width: number;
80
+ height: number;
81
+ /** 与该 PNG 同一渲染帧的取景相机快照。 */
82
+ camera?: CaptureCameraState;
83
+ }
84
+ /** DroneFly.initialize() 的可选配置 */
85
+ export interface DroneFlyInitializeOptions {
86
+ /**
87
+ * 机体模型 GLB 地址(URL 或相对路径)。
88
+ * **不传 = 用内置的「积木无人机」**(程序化几何体拼出来的四轴,零资产依赖,
89
+ * 见 `createHuskyDroneModel`);需要真机模型时再传,例如 `DRONE_MODEL_URL`。
90
+ * 自定义模型不必与默认模型尺寸/原点一致 —— 载入后会自动缩放到 2.4m 级、
91
+ * 水平居中并底面对齐地面(见 normalizeModel),因此可直接传任意 glb。
92
+ */
93
+ modelUrl?: string;
94
+ /**
95
+ * 场景里的障碍物(建筑 / 灯杆 / 天桥 / 树…… 都是 AABB 盒),同一份数据既生成可视网格,
96
+ * 又喂给飞控做避障判定 —— 换了坐标,画面和碰撞会一起变。
97
+ * 缺省用内置的 `DEFAULT_OBSTACLES`(起飞点 30 米内的 7 个参考物);
98
+ * 传 `[]` 得到一块纯空地(只剩地面网格与返航点标记);也可传自己的 `ObstacleSpec[]` 整体替换。
99
+ * 只想临时藏起来(保留碰撞)用 `fly.world?.setObstaclesVisible(false)`。
100
+ */
101
+ obstacles?: ObstacleSpec[];
102
+ }
103
+ /**
104
+ * 飞行沙盒的装配层:把飞行仿真内核、模型机械、场景辅助与灯光接到一起。
105
+ *
106
+ * 每帧固定步长推进仿真(与渲染帧率解耦,时间倍速下也能保持稳定),
107
+ * 然后只做"把仿真状态映射到三维场景"这一件事,保证画面与遥测显示的永远是同一份状态。
108
+ */
109
+ export declare class DroneFly implements DronePanelHost {
110
+ camera: THREE.PerspectiveCamera | null;
111
+ scene: THREE.Scene<THREE.Object3DEventMap> | null;
112
+ renderer: WebGPURenderer | null;
113
+ controls: OrbitControls<THREE.Camera> | null;
114
+ model: THREE.Group | null;
115
+ lights: DroneLights | null;
116
+ rig: DroneRig | null;
117
+ world: DroneWorld | null;
118
+ radar: DroneRadar | null;
119
+ /** 雷达射线可视化开关(雷达实例可能晚于页面初始化创建,先缓存再补上);默认不显示 */
120
+ private radarBeamsVisible;
121
+ /** 辅助灯锥形光束开关;默认不显示 */
122
+ private auxBeamVisible;
123
+ readonly sim: DroneSim;
124
+ /**
125
+ * 引擎标识。DroneFly 是 three.js 实现,与 CesiumDroneAdapter 的 `engine = 'cesium'`
126
+ * 构成判别字段 —— 宿主用同一份 `createDroneControl({ engine })` 装配,拿到实例后
127
+ * 还能靠它 `if (drone.engine === 'three')` 访问引擎特有成员。
128
+ */
129
+ readonly engine: "three";
130
+ cameraMode: CameraMode;
131
+ /** 云台增稳档位(见 GimbalStabilization);默认位置 + 姿态双解耦 */
132
+ gimbalStabilization: GimbalStabilization;
133
+ /** 云台关节一阶跟随时间常数(秒),0 = 立即到位;仅影响模型外观,初值同步给 rig */
134
+ gimbalResponse: number;
135
+ /** 电子增稳强度 0~1,0 = 关闭(默认) */
136
+ fpvSmoothing: number;
137
+ /**
138
+ * 取景**俯仰**覆盖(全景分层用,见 `setCaptureView`):非 null 时取景相机临时偏离
139
+ * "云台当前俯仰"。只影响取景(拍照 / 录像 / 采集快照),不动飞控与机体姿态。
140
+ *
141
+ * 这里没有水平偏航是有意的 —— 水平覆盖靠**机体原地自转**(见 `spinBodyTo`),
142
+ * 云台 Pan 机械行程转不出 180°(理由见 `drone-panorama` 的文件头)。
143
+ */
144
+ private captureView;
145
+ private readonly loader;
146
+ private groundOffsetY;
147
+ private accumulator;
148
+ private destroyed;
149
+ private cameraTarget;
150
+ /** 观察者视角是否把控制点自动跟到飞机上(框航线 / 场景编辑时关掉,见 frameMission) */
151
+ private cameraAutoFollow;
152
+ private readonly cameraScratch;
153
+ private readonly dronePosition;
154
+ private readonly cameraShift;
155
+ private readonly followPosition;
156
+ private readonly followLookAt;
157
+ private readonly forwardVector;
158
+ /** 电子增稳:相机姿态的低通状态(避免切视角时从旧位姿慢慢滑过来) */
159
+ private readonly fpvQuat;
160
+ /** 姿态解耦档下,由飞控真值解出的期望相机世界朝向(不读骨骼链) */
161
+ private readonly fpvTargetQuat;
162
+ /** 全景成片的**固定光心**:挂点世界高度暂存(见 applyGimbalCameraPose 的 fixedCenter) */
163
+ private readonly captureCenter;
164
+ private fpvQuatReady;
165
+ /** 上一帧的帧间隔(秒):拍照/录像取景帧复用,保证平滑状态连续 */
166
+ private lastFrameDelta;
167
+ private lightOverride;
168
+ /** 机臂目标折叠度:1 = 收纳(出厂收纳状态,起飞前必须先展开) */
169
+ private armFoldTarget;
170
+ /** 航线可视化签名:只有航线内容变化时才重建三维标记(每帧重建代价太大) */
171
+ private missionSignature;
172
+ /** 航点/航线图层显隐(面板开关,重建标记后要重新贴回) */
173
+ private missionVisible;
174
+ /** 航点标记 / 航线折线各自的开关(拆开控制,重建标记后要重新贴回) */
175
+ private missionMarkersVisible;
176
+ private missionPathVisible;
177
+ /** 场景内航点编辑器(需要画布,headless / 无渲染器时为 null) */
178
+ missionEditor: MissionEditor | null;
179
+ /** 场景编辑开关(界面意图;编辑器实例可能晚于页面初始化创建,先缓存再补上) */
180
+ private missionEditEnabled;
181
+ /** 场景编辑选中的航点索引(-1 = 未选中) */
182
+ private missionEditSelected;
183
+ /** 待取景的拍照请求:渲染前摆相机、渲染后拷屏并还原(见 onBeforeRender / onAfterRender) */
184
+ private photoRequest;
185
+ /** 云台相机取景用的独立相机(拍照不影响主相机对象本身) */
186
+ private readonly captureCamera;
187
+ /** 屏录:sim.recording 是状态来源,这里负责真正的 MediaRecorder */
188
+ private recorder;
189
+ private recordChunks;
190
+ private recordStream;
191
+ /** 手动抓帧轨道(captureStream(0)):录到什么由 captureRecordingFrame 那一帧云台取景决定 */
192
+ private captureTrack;
193
+ /** 录制专用离屏画布的上下文:每帧只往里搬一帧云台取景,主画布上的用户视角永远不会混进录像 */
194
+ private recordContext;
195
+ /** 进入机载视角前的观察者缩放,退出时归还(变焦只在机载取景下生效) */
196
+ private savedZoom;
197
+ /** 录像收尾回调:UI 用它落盘(引擎不直接触发下载) */
198
+ onRecordingReady: ((blob: Blob, seconds: number) => void) | null;
199
+ /** 飞行总控:接管场景/相机/渲染器/控制器,装配仿真内核与机体机械 */
200
+ constructor(scene: THREE.Scene<THREE.Object3DEventMap> | null, camera: THREE.PerspectiveCamera | null, renderer: WebGPURenderer | null, controls: OrbitControls<THREE.Camera> | null);
201
+ /**
202
+ * 初始化无人机:装配机体模型,并挂入机械 / 灯光 / 场景 / 雷达 / 编辑器各子系统,
203
+ * 最后做一次初始同步。可重复调用前需先 dispose(本方法不自动清理旧模型)。
204
+ *
205
+ * 机体来源二选一:
206
+ * - `options.modelUrl` 给了 → 加载该 GLB;
207
+ * - 没给 → 用内置「积木无人机」(程序化几何体,零资产依赖)。
208
+ *
209
+ * @param options.modelUrl 机体 GLB 路径;缺省用内置积木机体。
210
+ * @param options.obstacles 场景障碍物规格(缺省用内置 7 个参考物)。
211
+ */
212
+ initialize(options?: DroneFlyInitializeOptions): Promise<void>;
213
+ private modelHealthText;
214
+ /** 每帧推进:渲染帧率下用固定步长跑仿真,再用同一份状态驱动画面 */
215
+ /**
216
+ * 每帧推进:固定步长跑仿真,与渲染帧率解耦。
217
+ * 低帧率机器(或无头环境)不会让仿真变慢 —— 用累加器补帧;挂起后的超长帧直接丢弃积压。
218
+ */
219
+ animate(deltaSeconds?: number): void;
220
+ /** 把仿真状态写进三维场景 */
221
+ private syncPose;
222
+ /** 测距雷达最新读数:前视双镜头 + 上视双孔(Vue 面板 100ms 轮询) */
223
+ getRadarSnapshot(): RadarSnapshot;
224
+ /** 切换镜头瞄准:forward = 转向正前方/正上方;sensor = 沿镜头(玻璃面)朝向 */
225
+ setRadarAim(aim: RadarAim): void;
226
+ /** 切换雷达射线可视化(前视 + 上视,读数不受影响) */
227
+ setRadarBeamsVisible(visible: boolean): void;
228
+ /** 当前雷达射线可视化是否显示(探针用) */
229
+ isRadarBeamsVisible(): boolean;
230
+ /** 切换底部辅助灯的锥形光束显隐(不影响辅助灯照明) */
231
+ setAuxBeamVisible(visible: boolean): void;
232
+ /** 当前辅助灯锥形光束是否绘制(探针用) */
233
+ isAuxBeamVisible(): boolean;
234
+ private pushTrail;
235
+ /** 切换相机视角;进出机载视角时保存/归还轨道视角的缩放(变焦只在机载下生效) */
236
+ setCameraMode(mode: CameraMode): void;
237
+ /** 当前是否为观察者(轨道控制)视角;非轨道模式下渲染循环不得调用 controls.update(),否则其每帧 lookAt(target) 会覆盖机载/跟随朝向 */
238
+ get isOrbitView(): boolean;
239
+ /** 直接把无人机移动到目标位置并同步观察点/朝向 */
240
+ flyTo(target: {
241
+ x?: number;
242
+ y?: number;
243
+ z?: number;
244
+ heading?: number;
245
+ pitch?: number;
246
+ roll?: number;
247
+ }): void;
248
+ /** 直接调整镜头/云台变焦倍数(1~4x),并同步当前机载视角 */
249
+ zoomTo(zoom: number): void;
250
+ /**
251
+ * 把相机摆到云台镜片位置并取云台朝向(机载视角与拍照共用):
252
+ * 位置 = 云台挂点沿航向前移 offset,朝向 = 云台光轴(已被三轴解算锁水平)。
253
+ *
254
+ * offset 默认按模型实测:云台载荷(相机外壳)沿光轴的前端距离 + 余量。
255
+ * 写死的小偏移只适配"外壳刚好在枢轴前一点点"的模型;换一个载荷更长的
256
+ * 模型(如 dji_mini4_pro.glb,壳体前端在枢轴前 0.25m),相机会泡进外壳,
257
+ * 画面正中变成一颗对着的镜头(看着相机而不是从相机往外看)。
258
+ *
259
+ * 位姿来源按 gimbalStabilization 分档:'full' 时位置与朝向都由飞控真值解算(不读骨骼链,
260
+ * 与模型姿态完全解耦);'physical' 时采样骨骼链世界变换(镜头随机体侧倾横移,保留裸机真实感)。
261
+ */
262
+ private applyGimbalCameraPose;
263
+ /**
264
+ * 调云台增稳参数(机载视角稳定性调优入口)。
265
+ *
266
+ * ```ts
267
+ * fly.configureGimbal({ stabilization: 'physical', response: 0.05, smoothing: 0 })
268
+ * ```
269
+ */
270
+ configureGimbal(options?: GimbalStabilizationOptions): void;
271
+ /**
272
+ * 设置取景**俯仰**覆盖 —— 全景扫描(180° / 360°)按俯仰层逐张取景的入口;传 `null` 复位。
273
+ *
274
+ * ```ts
275
+ * fly.setCaptureView({ pitch: -15 }) // 这一张按俯视 15° 取景(替代云台俯仰)
276
+ * const shot = await fly.requestPhoto()
277
+ * fly.setCaptureView(null) // 复位
278
+ * ```
279
+ *
280
+ * 语义:俯仰**替代**云台俯仰(绝对值)。只影响取景相机,机体、飞控与用户视角都不动 ——
281
+ * 与"稳像 = 模型不动、相机侧解耦"同一套思路。
282
+ *
283
+ * ⚠️ **没有水平偏航**是有意的:水平方向靠 `spinBodyTo` 转机体,云台 Pan 机械行程
284
+ * 转不出 180°(理由见 `drone-panorama` 文件头)。
285
+ *
286
+ * ⚠️ 俯仰覆盖依赖姿态解耦档(`gimbalStabilization === 'full'`,默认)。
287
+ * `physical` 档的相机姿态采自骨骼链(保留裸机画弧),叠加不了绝对俯仰,此时覆盖不生效。
288
+ * 采集侧(`drone-capture`)在每次取景后会自动复位,单独调用时记得自己收尾。
289
+ */
290
+ setCaptureView(override: CaptureViewOverride | null): void;
291
+ /**
292
+ * 让**机体原地自转**到绝对方位角 `headingDeg`(度,罗盘角);`null` 停止自转。
293
+ *
294
+ * 全景的水平网格走这条通道(见 `drone-panorama`):Mini 4 Pro 云台 Pan 只有 ±30°,
295
+ * 180° 视野必须靠机体自己转。转的是机身、不是相机 —— 所以 FPV 画面里的世界会跟着转,
296
+ * 而机体的 x/z 位置由定点保持锁住("原地"的含义)。
297
+ */
298
+ spinBodyTo(headingDeg: number | null): void;
299
+ /** 机体当前方位角(度,罗盘角)—— 全景扫描用它判断"转到位了没" */
300
+ getBodyHeading(): number;
301
+ /** 记下当前相机位姿,供取景帧渲染完还原 */
302
+ private snapshotCamera;
303
+ /** 把相机位姿还回去 —— 取景帧渲染完必须调用 */
304
+ private restoreCamera;
305
+ /**
306
+ * 取景帧渲染时的场景可见性:位置标记类辅助物 + **机体自身**都退场。
307
+ *
308
+ * 辅助物(返航点光柱 / 航点光柱 / 航迹 / 地面网格)不该出现在照片里,这批早就有;
309
+ * 机体自身是全景**固定光心**带来的新问题 —— 光心钉在自转轴上以后,相机就在机体怀里,
310
+ * 机壳 / 机臂 / 桨叶会进画面,再被多张重复拼进天底。真机全景同样拍不到自己,
311
+ * 成片退场是干净的做法(实时画面不受影响:还原后那一帧渲的还是完整机体)。
312
+ */
313
+ private setCaptureFrameVisible;
314
+ /**
315
+ * 录制帧 —— 交给录制器的画面恒为云台取景,与用户此刻在哪个视角无关。
316
+ *
317
+ * 真机只有一个云台相机,录制内容就该是它拍的;而用户盯着的画面可能是观察者
318
+ * 视角,两者不是一回事。做法是每帧走一遍**和拍照完全相同**的取景路径
319
+ * (摆相机 → 渲染 → 同一任务内把这一帧搬进录制画布),再还原相机位姿。
320
+ *
321
+ * 录制流挂在独立的离屏画布上而不是主画布:主画布随后还要渲染用户视角,而画布
322
+ * 捕获是按"绘制之后"抓帧的,直接抓主画布会把用户视角录进去。离屏画布的内容
323
+ * 只有云台取景,污染不了。
324
+ *
325
+ * 由渲染循环调用(在 controls.update 之后、onBeforeRender 之前)。未录制时零开销。
326
+ */
327
+ captureRecordingFrame(): void;
328
+ /**
329
+ * 拍照:用云台相机取景拍一张 PNG。
330
+ *
331
+ * 实现是"渲染前换相机位姿 → 渲染后同一任务内拷屏":不依赖离屏渲染目标
332
+ * (WebGPU/WebGL 后端行为一致),拷屏与渲染在同一个任务里完成,画面不会闪帧。
333
+ * 上一张尚未取回时返回 null,避免连拍踩踏。
334
+ */
335
+ requestPhoto(): Promise<PhotoShot | null>;
336
+ /**
337
+ * 取景相机(云台镜头)的位姿与内参快照 —— 虚拟影像采集用(见 drone-capture 的
338
+ * `VirtualCaptureProvider`)。与 CesiumDroneAdapter.getCaptureCamera 同义。
339
+ *
340
+ * 三个要点:
341
+ * - 记录的是**取景相机**,不是机身 —— 云台朝向可能与机体朝向差几十度;
342
+ * - 位姿与拍照走**同一条取景路径**(`applyGimbalCameraPose`),只是渲到一台临时相机上,
343
+ * 因此不触发渲染、不动主相机、也不影响用户当前视角;
344
+ * - 坐标系换成库内约定的 `local-enu`(x 东 / y 北 / z 上):three 沙盒内部是
345
+ * x 东 / y 上 / z 南,由 ENU 基向量在 three 世界系里的朝向构成旋转再左乘即可。
346
+ *
347
+ * 模型 / 云台未就绪时返回 null(调用方据此跳过本次采集)。
348
+ */
349
+ getCaptureCamera(): CaptureCameraState | null;
350
+ /** 渲染前钩子(渲染循环在 controls.update 之后、render 之前调用):本帧按云台相机取景 */
351
+ onBeforeRender(): void;
352
+ /** 渲染后钩子:与渲染同一任务内拷屏,然后把相机位姿还原 */
353
+ onAfterRender(): void;
354
+ /** 把当前画布内容拷进离屏 canvas(同一任务内执行,拿到的是刚渲染的那一帧) */
355
+ private grabCanvas;
356
+ /** 当前是否正在屏录(以 MediaRecorder 实例是否存在为准) */
357
+ get isRecording(): boolean;
358
+ /** 开始屏录(录云台取景,与用户当前视角无关)。返回 false = 当前环境不支持 */
359
+ startRecording(): boolean;
360
+ /** 结束屏录:收尾成 Blob 并交给 onRecordingReady(未录制时直接返回 null) */
361
+ stopRecording(): Promise<Blob | null>;
362
+ /** 按当前相机模式摆放相机:机载=云台位姿,跟随=平滑尾随,观察者=交给轨道控制器 */
363
+ private updateCamera;
364
+ /** 复位相机:回到观察者视角、还原缩放,并把机位重置到飞机斜后上方 */
365
+ resetCamera(): void;
366
+ /**
367
+ * 把观察者相机拉到"一眼看全整条航线"的位置(编辑航线前先框住航线)。
368
+ *
369
+ * 航点动辄 30~40 米高、水平铺开几十米,默认机位贴着飞机,根本看不到航线 ——
370
+ * 所以框住一次比让用户自己滚轮找半天更实际。按包围球的垂直/水平视场双向取距离,
371
+ * 保证竖着铺开的航线也不会被裁掉。
372
+ */
373
+ frameMission(): boolean;
374
+ /** 当前飞行阶段(真值取 sim.phase):未上电 / 自检 / 待机 / 电机已启动 / 飞行中 / 返航 / 降落… */
375
+ get phase(): FlightPhase;
376
+ /** 是否已离地(离地 5cm 以上且已上电) */
377
+ get airborne(): boolean;
378
+ /** 当前飞行模式:Cine / Normal / Sport */
379
+ get flightMode(): FlightMode;
380
+ /** 当前高度(米,相对起飞点) */
381
+ get altitude(): number;
382
+ /** 起飞前检查清单(含宿主注入的外部项);面板据此提示"还差什么才能起飞" */
383
+ get preflightChecks(): ChecklistItem[];
384
+ /** 上电:自检 → 预热 → 待机(仅未上电 / 已停桨时受理) */
385
+ powerOn(): void;
386
+ /** 一键起飞:地面待机时自动启动电机,再爬升到 1.2 米;返回是否受理 */
387
+ takeOff(): boolean;
388
+ /** 自动降落(会先中止正在执行的航线);返回是否受理 */
389
+ land(): boolean;
390
+ /** 智能返航(需在空中,会先中止航线);返回是否受理 */
391
+ returnHome(reason?: string): boolean;
392
+ /** 写摇杆连续量(摇杆优先于键盘;松杆由飞控刹停悬停) */
393
+ setStick(stick: Partial<StickState>): void;
394
+ /** 摇杆立刻回中(等同松开遥控器杆) */
395
+ resetStick(): void;
396
+ /** 键盘 / 方向键输入直接映射成摇杆行程(美国手 Mode 2) */
397
+ setMoveDirection(direction: DroneDirection | null): void;
398
+ /** 设垂直方向指令 -1(降)~0(保持)~1(升),面板/键盘写入 */
399
+ setVerticalDirection(direction: DroneVerticalDirection | null): void;
400
+ /** 设偏航指令 -1(左转)~0~1(右转) */
401
+ setRotationDirection(direction: DroneRotationDirection | null): void;
402
+ /** 切飞行挡位:平稳 C / 普通 N / 运动 S */
403
+ setMode(mode: FlightMode): void;
404
+ /** 改仿真配置(限速 / 限高限距开关 / 风 / 电量阈值等,立即生效) */
405
+ setConfig(patch: Partial<SimConfig>): void;
406
+ /** 注入/清除故障标志(测失效保护用) */
407
+ setFaults(patch: Partial<FaultFlags>): void;
408
+ /** 设机臂折叠目标 0(展开)~1(收纳),桨叶同步收拢 */
409
+ setArmFoldTarget(fold: number): void;
410
+ /** 当前机臂折叠量 0~1(插值中的实时值) */
411
+ get armFoldTargetValue(): number;
412
+ /**
413
+ * 展开 / 收拢机臂。
414
+ *
415
+ * 折叠量的取值是**反的**(0 = 完全展开,1 = 完全收纳,见 DroneRig),这里包一层语义化接口,
416
+ * 免得调用方每次都要在脑子里翻转一次。飞行中收拢会被机臂检查项拦下(与真机一致)。
417
+ */
418
+ setArmsFolded(folded: boolean): void;
419
+ /** 机臂当前是否处于"已收拢"的目标状态(展开 = false) */
420
+ get armsFolded(): boolean;
421
+ /**
422
+ * 起落架腿当前是否放下(收起 = false)。
423
+ * 收放由飞行高度自动驱动(高于 LEG_RETRACT_ALTITUDE 收、低于放),
424
+ * 只有带 LEG_* 节点的机体(哈士奇)有腿,真机 GLB 恒为 true。
425
+ */
426
+ get legsDeployed(): boolean;
427
+ /** 设云台俯仰角(度,范围见 DRONE_SPEC) */
428
+ setGimbalPitch(pitch: number): void;
429
+ /** 云台增量微调(度;俯仰/偏航分别给) */
430
+ nudgeGimbal(deltaPitch: number, deltaYaw?: number): void;
431
+ /** 清空飞行航迹 */
432
+ clearTrail(): void;
433
+ /** 启动航线任务(地面时先自动起飞,到 1.2 米后自动接上航线) */
434
+ startMission(): boolean;
435
+ /** 暂停执行中的航线(原地悬停,可再续飞) */
436
+ pauseMission(reason?: string): boolean;
437
+ /** 续飞被暂停的航线 */
438
+ resumeMission(): boolean;
439
+ /** 中止航线并留在原地悬停 */
440
+ stopMission(reason?: string): boolean;
441
+ /** 下发航点列表(执行中会被拒绝,与真机"上传后不可改"一致) */
442
+ setMission(waypoints: Array<Partial<MissionWaypoint>>): boolean;
443
+ /** 改航线参数(高度/速度/航向模式等,下一次起飞生效) */
444
+ setMissionConfig(patch: Partial<MissionConfig>): void;
445
+ /** 航线参数恢复默认 */
446
+ resetMissionToDefault(): void;
447
+ /** 取航线只读快照(航点/Home/进度) */
448
+ getMissionSnapshot(): MissionSnapshot;
449
+ /**
450
+ * 把当前航线整理成可序列化的导出数据(只读,随时可调,执行中也行)。
451
+ *
452
+ * 序列化实现已下沉到 drone-sim(纯逻辑层),Cesium 后端复用同一函数;
453
+ * 航程按"返航点起飞 → 依次过点"的三维折线累计,耗时按每点自己的速度(0 = 巡航速度)
454
+ * 加上到点悬停折算,和引擎执行时的口径一致。
455
+ */
456
+ getMissionExport(): MissionExport;
457
+ /**
458
+ * 导出航线文本。`json` 是完整存档(含坐标约定、任务参数、概览统计,可再喂回 `setMission`),
459
+ * `csv` 只出航点表 —— 表头中文、CRLF 换行,Excel / WPS 双击即可打开。
460
+ */
461
+ exportMission(format?: MissionExportFormat): string;
462
+ /** 航点标记 / 航线折线的总显隐(不影响任务执行) */
463
+ setMissionVisible(visible: boolean): void;
464
+ /** 航线是否可见 */
465
+ isMissionVisible(): boolean;
466
+ /** 只开关航点标记 */
467
+ setMissionWaypointsVisible(visible: boolean): void;
468
+ /** 航线航点标记是否可见 */
469
+ isMissionWaypointsVisible(): boolean;
470
+ /** 只开关航线折线 */
471
+ setMissionPathVisible(visible: boolean): void;
472
+ /** 航线路径线是否可见 */
473
+ isMissionPathVisible(): boolean;
474
+ /** three 后端是本地米坐标系,没有地理坐标;经纬度切换开关因此不显示 */
475
+ supportsGeoCoordinates(): boolean;
476
+ /** three 后端无经纬高:返回 null(面板始终走 XYZ 显示) */
477
+ getWaypointGeo(_index: number): {
478
+ lon: number;
479
+ lat: number;
480
+ height: number;
481
+ } | null;
482
+ /** three 后端是本地米坐标系,无地理锚点,经纬度编辑不可用;接口占位返回 false */
483
+ setWaypointGeo(_index: number, _geo: {
484
+ lon: number;
485
+ lat: number;
486
+ height: number;
487
+ }): boolean;
488
+ /** 航点标记 / 航线折线的重建签名(只跟返航点与航点位置有关) */
489
+ private buildMissionSignature;
490
+ /** 场景编辑的硬门槛:观察者视角 + 航线未在执行(含"已下发等待起飞到位") */
491
+ private canMissionSceneEdit;
492
+ /** 开关「场景内编辑航点」 */
493
+ setMissionEditEnabled(enabled: boolean): void;
494
+ /** 航线编辑模式是否开启 */
495
+ isMissionEditEnabled(): boolean;
496
+ /** 场景编辑:选中某个航点(-1 取消选中) */
497
+ setMissionSelected(index: number): void;
498
+ /** 当前选中的航点索引(无选中返回 null) */
499
+ getMissionSelected(): number;
500
+ /** 场景编辑的实时状态(界面 100ms 轮询) */
501
+ getMissionEditState(): MissionEditState;
502
+ /**
503
+ * 原位更新一个航点(场景拖拽每帧调用):改内核 + 只挪这一根三维标记。
504
+ *
505
+ * 关键在于同步刷新签名 —— 否则下一帧 syncPose 发现"签名变了"会把整层标记重建一遍,
506
+ * 拖动时就会一顿一顿地闪。
507
+ */
508
+ updateMissionWaypoint(index: number, patch: Partial<MissionWaypoint>): MissionWaypoint | null;
509
+ /** 场景编辑:按索引删除一个航点 */
510
+ deleteMissionWaypoint(index: number): boolean;
511
+ /** 场景编辑:以飞机当前位置新增一个航点(高度取飞机当前高度) */
512
+ addMissionWaypointAtDrone(): number;
513
+ /** 新航点的默认参数:高度与速度继承相邻航点,避免插出一个贴地点 */
514
+ private newWaypointTemplate;
515
+ /** 取机体机械位姿报告(机臂折叠/桨叶角/云台角/起落架,调试用) */
516
+ getRigReport(): RigPartReport[];
517
+ /** 取全量真值快照(位置/姿态/电池/云台/任务…,面板与 MCP 都用它) */
518
+ getSnapshot(): DroneSnapshot;
519
+ /** 取灯光真值快照(各灯模式/亮度/当前色) */
520
+ getLightsSnapshot(): import("./drone-lights").DroneLightsSnapshot | null;
521
+ /** 兼容旧接口:直接返回仿真遥测 */
522
+ getTelemetry(): {
523
+ speedMetersPerSecond: number;
524
+ altitudeMeters: number;
525
+ isFlying: boolean;
526
+ };
527
+ /** 设状态灯灯语(覆盖默认模式,如 breathing / blink) */
528
+ setStatusLightPattern(key: StatusLightKey): void;
529
+ /** 清除状态灯覆盖,回到按状态自动的灯语 */
530
+ clearStatusLightOverride(): void;
531
+ /** 当前状态灯覆盖(无覆盖返回 null) */
532
+ get statusLightOverride(): StatusLightKey | null;
533
+ /** 设电池灯模式(off / level / blink) */
534
+ setBatteryLightMode(mode: BatteryLightMode): void;
535
+ /** 设电池灯亮度 0~1 */
536
+ setBatteryLightLevel(levelPercent: number): void;
537
+ /** 设补光灯模式(off / on / auto) */
538
+ setAuxLightMode(mode: AuxLightMode): void;
539
+ /** 销毁飞行沙盒:停渲染循环、拆面板、释放场景与渲染器 */
540
+ destroy(): void;
541
+ private normalizeModel;
542
+ private disposeModel;
543
+ }
544
+ export { statusPatternFor };
545
+ //# sourceMappingURL=drone-fly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-fly.d.ts","sourceRoot":"","sources":["../../src/lib/drone-camera/drone-fly.ts"],"names":[],"mappings":"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"}