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.
- package/LICENSE +21 -0
- package/README.md +157 -2
- package/index.d.ts +51 -0
- package/index.d.ts.map +1 -0
- package/index.js +20474 -0
- package/index.js.map +1 -0
- package/index.umd.cjs +1361 -0
- package/index.umd.cjs.map +1 -0
- package/lib/drone-capture-manifest.d.ts +169 -0
- package/lib/drone-capture-manifest.d.ts.map +1 -0
- package/lib/drone-capture-panel.d.ts +135 -0
- package/lib/drone-capture-panel.d.ts.map +1 -0
- package/lib/drone-capture.d.ts +380 -0
- package/lib/drone-capture.d.ts.map +1 -0
- package/lib/drone-cesium-mission.d.ts +120 -0
- package/lib/drone-cesium-mission.d.ts.map +1 -0
- package/lib/drone-cesium-rig.d.ts +50 -0
- package/lib/drone-cesium-rig.d.ts.map +1 -0
- package/lib/drone-cesium.d.ts +519 -0
- package/lib/drone-cesium.d.ts.map +1 -0
- package/lib/drone-control.d.ts +188 -0
- package/lib/drone-control.d.ts.map +1 -0
- package/lib/drone-engine.d.ts +70 -0
- package/lib/drone-engine.d.ts.map +1 -0
- package/lib/drone-exif.d.ts +64 -0
- package/lib/drone-exif.d.ts.map +1 -0
- package/lib/drone-fly.d.ts +545 -0
- package/lib/drone-fly.d.ts.map +1 -0
- package/lib/drone-gallery.d.ts +146 -0
- package/lib/drone-gallery.d.ts.map +1 -0
- package/lib/drone-husky-model.d.ts +22 -0
- package/lib/drone-husky-model.d.ts.map +1 -0
- package/lib/drone-image-utils.d.ts +67 -0
- package/lib/drone-image-utils.d.ts.map +1 -0
- package/lib/drone-image-viewer.d.ts +97 -0
- package/lib/drone-image-viewer.d.ts.map +1 -0
- package/lib/drone-lights.d.ts +194 -0
- package/lib/drone-lights.d.ts.map +1 -0
- package/lib/drone-minimap.d.ts +155 -0
- package/lib/drone-minimap.d.ts.map +1 -0
- package/lib/drone-panel.d.ts +265 -0
- package/lib/drone-panel.d.ts.map +1 -0
- package/lib/drone-panorama-viewer.d.ts +162 -0
- package/lib/drone-panorama-viewer.d.ts.map +1 -0
- package/lib/drone-panorama.d.ts +242 -0
- package/lib/drone-panorama.d.ts.map +1 -0
- package/lib/drone-photogrammetry.d.ts +207 -0
- package/lib/drone-photogrammetry.d.ts.map +1 -0
- package/lib/drone-radar.d.ts +136 -0
- package/lib/drone-radar.d.ts.map +1 -0
- package/lib/drone-reconstruction-preview.d.ts +84 -0
- package/lib/drone-reconstruction-preview.d.ts.map +1 -0
- package/lib/drone-rig.d.ts +385 -0
- package/lib/drone-rig.d.ts.map +1 -0
- package/lib/drone-sim.d.ts +883 -0
- package/lib/drone-sim.d.ts.map +1 -0
- package/lib/drone-stitch.d.ts +84 -0
- package/lib/drone-stitch.d.ts.map +1 -0
- package/lib/drone-world.d.ts +194 -0
- package/lib/drone-world.d.ts.map +1 -0
- package/lib/mission-editor.d.ts +116 -0
- package/lib/mission-editor.d.ts.map +1 -0
- package/lib/mission-panel.d.ts +173 -0
- package/lib/mission-panel.d.ts.map +1 -0
- package/package.json +61 -4
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cesium 版飞行适配器 —— 用 Cesium 自己的实体系统渲染机体,飞行逻辑仍走库里的 DroneSim。
|
|
3
|
+
*
|
|
4
|
+
* 与 three 版的 DroneFly 是同一组接口(DronePanelHost + MissionPanelHost)的两种实现:
|
|
5
|
+
* 控制面板 / 航线面板 / 鹰眼图 / 键盘完全不区分后端,插到哪个适配器上就控制哪台飞机,
|
|
6
|
+
* 面板代码一行都不用改。两端各带 `engine` 判别字段('three' / 'cesium'),
|
|
7
|
+
* 由 `createDroneControl({ engine })` 统一装配(见 drone-engine.ts)。
|
|
8
|
+
*
|
|
9
|
+
* 模块划分(与 three 侧一一对应):
|
|
10
|
+
* - 本文件 —— 适配器:坐标换轴、每帧写 modelMatrix、相机接管、拍照/录像、航线任务 API;
|
|
11
|
+
* - drone-cesium-rig —— 机体表现层:桨叶自转 + 钟罩反向补偿 + 机体灯光;
|
|
12
|
+
* - drone-cesium-mission —— 航线表现层:航点标记 / 航线折线 / 场景内拖拽编辑。
|
|
13
|
+
*
|
|
14
|
+
* ─── 坐标系换算(全部风险都在这里,改之前先读完) ───────────────────────────
|
|
15
|
+
*
|
|
16
|
+
* DroneSim 世界系 Cesium ENU 系 Cesium 世界系
|
|
17
|
+
* x 向东 ──▶ x 向东
|
|
18
|
+
* y 向上(AGL) ──▶ z 向上 ──▶ enuToFixed(锚点) × ENU
|
|
19
|
+
* z 向南 ──▶ y 向北(= -z)
|
|
20
|
+
*
|
|
21
|
+
* · 轴序不是简单搬运:x/z 要换轴,且南向取负 —— 漏掉这一步无人机会沿南北轴反向飞。
|
|
22
|
+
* · 航向:sim.heading 是罗盘角(正北 0°、顺时针增加),与 Cesium HeadingPitchRoll 同语义,直接换算;
|
|
23
|
+
* · 俯仰:Cesium 的 HeadingPitchRoll 是同一个旋转,但参照轴相反 —— **模型**前向是局部 -x、
|
|
24
|
+
* **相机**前向是局部 +x,所以模型 tiltPitch(正=抬头)要取负、相机 gimbalPitch(正=抬头)直传;
|
|
25
|
+
* · 横滚:两者都以"右压坡"为正,同号。
|
|
26
|
+
*
|
|
27
|
+
* ─── 高度基准 ──────────────────────────────────────────────────────────
|
|
28
|
+
* sim.position.y 是相对起飞点的高度(AGL),所以锚点必须落在真实地形面上:
|
|
29
|
+
* 构造时用 sampleTerrainMostDetailed 采样锚点地形高度,否则无人机会沉进地里或浮在半空。
|
|
30
|
+
*
|
|
31
|
+
* ─── 机体加载:GLB 净化(为什么需要) ───────────────────────────────────
|
|
32
|
+
* 真机 GLB(DJI Mini 4 Pro 导出)把 `KHR_lights_punctual` 写进了 **extensionsRequired**,
|
|
33
|
+
* 而 Cesium 不支持该扩展 → `Model.fromGltfAsync` 直接以
|
|
34
|
+
* "Unsupported glTF Extension: KHR_lights_punctual" 拒载(整个机体不出来,且异常被吞)。
|
|
35
|
+
* 处理方式**不修改磁盘上的资产**(shared asset 被改会让 three 侧的 GLTFLoader 拿到
|
|
36
|
+
* 半剥离的扩展引用而崩),而是在加载期做内存净化:
|
|
37
|
+
* fetch → 复制 ArrayBuffer → 只在 JSON chunk 里摘掉 extensionsRequired 里的该扩展
|
|
38
|
+
* → Blob URL 交给 Cesium
|
|
39
|
+
* 其余(extensionsUsed / lights 数组 / 节点引用)原样保留 —— 实测摘掉 required 一项
|
|
40
|
+
* Cesium 即通过,three 侧读到的仍是完整文件。可用 `stripRequiredExtensions` 覆盖清单。
|
|
41
|
+
*/
|
|
42
|
+
import { DroneSim } from './drone-sim';
|
|
43
|
+
import type { ChecklistItem, DroneSnapshot, FlightMode, MissionConfig, MissionExport, MissionExportFormat, MissionSnapshot, MissionWaypoint, StickState } from './drone-sim';
|
|
44
|
+
import type { DronePanelHost, MissionPanelHost } from './drone-control';
|
|
45
|
+
import type { CameraMode, PhotoShot } from './drone-fly';
|
|
46
|
+
import type { CaptureCameraState, CaptureViewOverride } from './drone-capture';
|
|
47
|
+
import type { CesiumMissionHost } from './drone-cesium-mission';
|
|
48
|
+
import type { MissionEditLimits, MissionEditState } from './mission-editor';
|
|
49
|
+
/** Cesium 由 /Cesium/Cesium.js 以全局脚本注入,这里只做一层薄封装取引用 */
|
|
50
|
+
type CesiumNS = Record<string, any>;
|
|
51
|
+
/** 可选机体规格。scale 把模型最大边归一到 2.4 m(与 three 版沙盒同尺寸),lift 让模型底面对齐放置点 */
|
|
52
|
+
export interface DroneModelSpec {
|
|
53
|
+
key: string;
|
|
54
|
+
label: string;
|
|
55
|
+
url: string;
|
|
56
|
+
scale: number;
|
|
57
|
+
/** 模型自身前向与 ENU 北向的夹角修正(度),由实测定,见文件尾注释 */
|
|
58
|
+
yawOffsetDeg: number;
|
|
59
|
+
/** 模型原点到底面的距离(米),用于让机腹贴地而不是原点贴地 */
|
|
60
|
+
lift: number;
|
|
61
|
+
/**
|
|
62
|
+
* 云台相机沿光轴前移的距离(米,自机体原点起算)。
|
|
63
|
+
* 离线按 GLB 顶点实测「光轴走廊内壳体(含云台壳)最前点 + 2cm 余量」得出:
|
|
64
|
+
* 相机必须探出壳体,否则 GLB 材质多为双面,在壳内会把机身内壁拍进画面。
|
|
65
|
+
* 桨叶/机臂不算在内 —— FPV 边缘露出桨尖是真机也有的现象。
|
|
66
|
+
*/
|
|
67
|
+
gimbalOffsetM: number;
|
|
68
|
+
/** 云台相机相对机体原点的高度(米):镜头玻璃的实测中线高度 */
|
|
69
|
+
gimbalLiftM: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 机体目录。scale / lift / gimbal* 由 GLB 包围盒与顶点实测得出(见下方注释里的原始数据):
|
|
73
|
+
* - DJI Mini 4 Pro :31.758 × 9.959 × 25.236,min y = -5.034;云台镜头玻璃在机体系 z -0.590 m、y -0.03 m,壳体最前 -0.62 m
|
|
74
|
+
* - CesiumDrone : 3.964 × 1.120 × 4.668,min y = -0.171;镜头在 z +1.127 m、y +0.19 m
|
|
75
|
+
* (两机型在 glTF 里的机头方向相反:DJI 朝 -z、CesiumDrone 朝 +z —— 运行时偏移
|
|
76
|
+
* 一律沿「飞行方向」施加,与模型自身轴向无关,所以这里只存距离不存符号)
|
|
77
|
+
*/
|
|
78
|
+
export declare const DRONE_MODELS: DroneModelSpec[];
|
|
79
|
+
export interface CesiumDroneOptions {
|
|
80
|
+
/** Cesium.Viewer 实例 */
|
|
81
|
+
viewer: CesiumNS;
|
|
82
|
+
/**
|
|
83
|
+
* Cesium 命名空间。缺省取 `window.Cesium`(配合 `loadCesiumScript()` 或页面里自引脚本);
|
|
84
|
+
* 传进来可让同一页面挂多个互不干扰的 Cesium 版本 / 便于测试注入。
|
|
85
|
+
*/
|
|
86
|
+
cesium?: CesiumNS;
|
|
87
|
+
/** 沙盒原点经纬度(度);高度缺省时自动采样地形 */
|
|
88
|
+
lon?: number;
|
|
89
|
+
lat?: number;
|
|
90
|
+
/** 锚点海拔(米);不传则用 sampleTerrainMostDetailed 采样 */
|
|
91
|
+
height?: number;
|
|
92
|
+
/** 初始机体下标(见 DRONE_MODELS),默认 0 */
|
|
93
|
+
modelIndex?: number;
|
|
94
|
+
/** 起降点离地额外抬升(米),避免机腹与地形 z-fighting,默认 0.05 */
|
|
95
|
+
groundClearance?: number;
|
|
96
|
+
/** 视角跟随距离(米),follow 模式用(相机在无人机正后方),默认 7.5(与 three 版一致) */
|
|
97
|
+
followRange?: number;
|
|
98
|
+
/**
|
|
99
|
+
* 加载期从 GLB 的 `extensionsRequired` 里摘掉的扩展清单
|
|
100
|
+
* (见 DEFAULT_UNSUPPORTED_REQUIRED_EXTENSIONS,默认 ['KHR_lights_punctual']);
|
|
101
|
+
* 传 `[]` 关闭净化,直接按原 URL 加载。
|
|
102
|
+
*/
|
|
103
|
+
stripRequiredExtensions?: readonly string[];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Cesium 不支持、但在真机 GLB 里被声明为 **required** 的 glTF 扩展。
|
|
107
|
+
* 出现在 extensionsRequired 里会被 `Model.fromGltfAsync` 直接拒载
|
|
108
|
+
* ("Unsupported glTF Extension: ..."),需要加载期摘掉。
|
|
109
|
+
*/
|
|
110
|
+
export declare const DEFAULT_UNSUPPORTED_REQUIRED_EXTENSIONS: string[];
|
|
111
|
+
/**
|
|
112
|
+
* 在内存里摘掉 JSON chunk 中 `extensionsRequired` 里的指定扩展,返回新的 GLB ArrayBuffer。
|
|
113
|
+
*
|
|
114
|
+
* 只动 JSON chunk 的这一个字段:MAGIC / version / BIN chunk 原样搬过去,
|
|
115
|
+
* `extensionsUsed`、扩展本体(如 KHR_lights_punctual.lights)与节点上的扩展引用全部保留 ——
|
|
116
|
+
* 于是 three 侧读同一份文件时行为完全不变(实测:摘 required 一项 Cesium 即通过,
|
|
117
|
+
* 而连同 lights 数组一起删会让 three 的 GLTFLightsExtension 读到悬空引用而抛错)。
|
|
118
|
+
*
|
|
119
|
+
* @returns 新的 ArrayBuffer;若该文件本来就没有需要摘的扩展,返回 null(调用方继续用原 URL)
|
|
120
|
+
*/
|
|
121
|
+
export declare function stripRequiredExtensions(buffer: ArrayBuffer, strip?: readonly string[]): ArrayBuffer | null;
|
|
122
|
+
/**
|
|
123
|
+
* 按需注入 Cesium 全局脚本(默认 `/Cesium/Cesium.js`),幂等且并发安全。
|
|
124
|
+
*
|
|
125
|
+
* 库不打包 Cesium(它自带 WebGL 内核与 Workers,体量与构建方式都不适合打进库),
|
|
126
|
+
* 由使用方把 Cesium 静态资源放到自有目录,再调本函数或在页面里自己引 script。
|
|
127
|
+
* 脚本就绪后 `window.Cesium` 可用,直接传给 `createDroneControl({ engine: 'cesium', ... })`。
|
|
128
|
+
*/
|
|
129
|
+
export declare function loadCesiumScript(src?: string): Promise<void>;
|
|
130
|
+
export declare class CesiumDroneAdapter implements DronePanelHost, MissionPanelHost, CesiumMissionHost {
|
|
131
|
+
readonly sim: DroneSim;
|
|
132
|
+
/** 引擎判别字段:与 DroneFly 的 `engine = 'three'` 成对(见 drone-engine.ts) */
|
|
133
|
+
readonly engine: "cesium";
|
|
134
|
+
/** 当前视角模式;orbit = 交给 Cesium 自由漫游,follow / fpv 由本适配器每帧驱动相机 */
|
|
135
|
+
cameraMode: CameraMode;
|
|
136
|
+
private readonly C;
|
|
137
|
+
private readonly viewer;
|
|
138
|
+
private readonly enuToFixed;
|
|
139
|
+
private readonly origin;
|
|
140
|
+
private readonly groundClearance;
|
|
141
|
+
private readonly followRange;
|
|
142
|
+
/** 加载期净化时的扩展剥离清单(见 stripRequiredExtensions) */
|
|
143
|
+
private readonly stripExtensions;
|
|
144
|
+
/** 当前机体若走了净化路径,记下 Blob URL 以便销毁时回收 */
|
|
145
|
+
private sanitizedBlobUrl;
|
|
146
|
+
/** 场景里当前挂载的机体 —— 直接是 Cesium 的 Model primitive(不走 Entity,见 loadModel 注释) */
|
|
147
|
+
private model;
|
|
148
|
+
/** 机体表现层:桨叶自转 + 灯光(见 drone-cesium-rig 文件头) */
|
|
149
|
+
private readonly rig;
|
|
150
|
+
/** 航线表现层 + 场景内编辑:航点标记 / 航线折线 / 拖拽(见 drone-cesium-mission 文件头) */
|
|
151
|
+
private missionEditor;
|
|
152
|
+
/** 模型加载序号:切换机体时作废仍在途的旧请求,避免晚到的结果盖掉新机体 */
|
|
153
|
+
private loadToken;
|
|
154
|
+
/** 复用的 4×4 世界矩阵(每帧重填,避免逐帧分配) */
|
|
155
|
+
private readonly worldMatrix;
|
|
156
|
+
private modelIndex;
|
|
157
|
+
private armFoldTarget;
|
|
158
|
+
/** 场景内编辑开关(面板勾选;"当前确实可编辑"另看 isOrbitView + 任务状态,见 canMissionSceneEdit) */
|
|
159
|
+
private missionEditEnabled;
|
|
160
|
+
/** 场景/列表双向联动的选中航点索引 */
|
|
161
|
+
private missionEditSelected;
|
|
162
|
+
/** 航线总显隐 / 航点标记 / 航线折线(互不影响,与 three 版三个开关一致) */
|
|
163
|
+
private missionVisible;
|
|
164
|
+
private missionMarkersVisible;
|
|
165
|
+
private missionPathVisible;
|
|
166
|
+
private recorder;
|
|
167
|
+
private recordChunks;
|
|
168
|
+
/** 录制专用离屏画布的上下文:每帧只往里搬一帧云台取景,主画布上的用户视角永远不会混进录像 */
|
|
169
|
+
private recordContext;
|
|
170
|
+
/** 手动抓帧轨道(captureStream(0)):录到什么由取景帧决定 */
|
|
171
|
+
private captureTrack;
|
|
172
|
+
private recordStream;
|
|
173
|
+
/** 待取景的拍照请求:取景帧渲染完同任务内拷屏(见 captureGimbalFrame) */
|
|
174
|
+
private photoPending;
|
|
175
|
+
/** 拍照稳定帧期间暂存的用户相机,完成或超时后还原 */
|
|
176
|
+
private photoCameraRestore;
|
|
177
|
+
/** 录像收尾回调:UI 用它落盘(引擎不直接触发下载);与 three 版同名同参 */
|
|
178
|
+
onRecordingReady: ((blob: Blob, seconds: number) => void) | null;
|
|
179
|
+
private rafId;
|
|
180
|
+
private lastTime;
|
|
181
|
+
private disposed;
|
|
182
|
+
/** Stop terrain sampling after an authorization failure so a bad Ion token cannot spam requests. */
|
|
183
|
+
private terrainSamplingDisabled;
|
|
184
|
+
/** 相机是否被本适配器锁在无人机上(退出 follow/fpv 时要把 transform 还回去) */
|
|
185
|
+
private cameraLocked;
|
|
186
|
+
/**
|
|
187
|
+
* 取景**俯仰**覆盖(全景分层用,见 `setCaptureView`):非 null 时取景相机临时偏离
|
|
188
|
+
* "云台当前俯仰"。只影响取景(拍照 / 录像 / 采集快照),不动飞控与机体姿态。
|
|
189
|
+
*
|
|
190
|
+
* 这里没有水平偏航是有意的 —— 水平覆盖靠**机体原地自转**(见 `spinBodyTo`),
|
|
191
|
+
* 云台 Pan 机械行程转不出 180°(理由见 `drone-panorama` 的文件头)。
|
|
192
|
+
*/
|
|
193
|
+
private captureView;
|
|
194
|
+
/** true while the Cesium camera is temporarily rendering the capture frame. */
|
|
195
|
+
private captureFrameActive;
|
|
196
|
+
/** 宿主回调:模型切换完成后通知 UI 刷新按钮文案 */
|
|
197
|
+
onModelChange: ((spec: DroneModelSpec) => void) | null;
|
|
198
|
+
/** Cesium 后端适配器:实现 DronePanelHost,面板/航线/鹰眼/键盘可直接用 */
|
|
199
|
+
constructor(options: CesiumDroneOptions);
|
|
200
|
+
/**
|
|
201
|
+
* 启动:采样锚点地形高度、加载机体、起循环。
|
|
202
|
+
* 地形采样失败不阻断(退回给定的 height);不挂地形(椭球)时采样高度恒为 0,同样无碍。
|
|
203
|
+
*/
|
|
204
|
+
start(): Promise<void>;
|
|
205
|
+
/** 销毁 viewer 与适配器,停止每帧同步 */
|
|
206
|
+
destroy(): void;
|
|
207
|
+
/** 回收加载期净化产生的 Blob URL(否则整份 GLB 会一直被浏览器缓存持有) */
|
|
208
|
+
private releaseSanitizedUrl;
|
|
209
|
+
/**
|
|
210
|
+
* 解析交给 Cesium 的模型地址:先按原 URL 取 ArrayBuffer,若 `extensionsRequired`
|
|
211
|
+
* 里有 Cesium 不支持的扩展,就在内存里摘掉并用 Blob URL 代替(见文件头"GLB 净化")。
|
|
212
|
+
*
|
|
213
|
+
* 无扩展可摘(或净化关闭)时返回原 URL —— 零额外开销、零对象 URL 泄漏;
|
|
214
|
+
* 取文件失败时也回退原 URL,让 Cesium 自己报出真正的网络/解析错误。
|
|
215
|
+
*/
|
|
216
|
+
private resolveModelUrl;
|
|
217
|
+
/** 当前机体模型规格(名称/缩放/机头偏移等) */
|
|
218
|
+
get modelSpec(): DroneModelSpec;
|
|
219
|
+
/** 机体模型是否已挂载完成(加载是异步的,期间无人机不可见) */
|
|
220
|
+
get modelLoaded(): boolean;
|
|
221
|
+
/** 切换机体(按下标轮换或直接指定 key);返回切换后的规格 */
|
|
222
|
+
setModel(keyOrIndex: string | number): DroneModelSpec;
|
|
223
|
+
/** 在目录里轮换到下一个机体 */
|
|
224
|
+
cycleModel(): DroneModelSpec;
|
|
225
|
+
/**
|
|
226
|
+
* 加载机体并挂到 scene.primitives 上。
|
|
227
|
+
*
|
|
228
|
+
* 为什么不用 Entity + model:实测(Cesium 1.144)Entity.model 的 ModelVisualizer
|
|
229
|
+
* 迟迟不产出可渲染/可拾取的 Model primitive(位置是 CallbackProperty 时尤甚),
|
|
230
|
+
* 而手动 Model.fromGltfAsync + 每帧写 modelMatrix 立刻可见 —— 动态模型本就是
|
|
231
|
+
* primitive 路线的推荐用法,还省掉了 Entity 的 Property 求值开销。
|
|
232
|
+
*/
|
|
233
|
+
private loadModel;
|
|
234
|
+
private rebuildEnuFrame;
|
|
235
|
+
/** sim 本地米坐标(y 为 AGL) → ECEF 世界坐标 */
|
|
236
|
+
private computeWorldPosition;
|
|
237
|
+
/**
|
|
238
|
+
* 每帧把 sim 真值写进模型的世界矩阵。
|
|
239
|
+
* headingPitchRollToFixedFrame(origin, hpr) 一步给出「ENU 平移 + 航向/俯仰/横滚旋转」,
|
|
240
|
+
* 与 Entity 管线里 headingPitchRollQuaternion 的语义完全一致。
|
|
241
|
+
*/
|
|
242
|
+
private syncModelMatrix;
|
|
243
|
+
/** 当前经纬高(渲染坐标系下的真实地理位置),供 HUD / 验证脚本读取 */
|
|
244
|
+
getGeo(): {
|
|
245
|
+
lon: number;
|
|
246
|
+
lat: number;
|
|
247
|
+
height: number;
|
|
248
|
+
};
|
|
249
|
+
private loop;
|
|
250
|
+
/** 切相机模式:orbit 环绕 / follow 跟随 / fpv 机载 */
|
|
251
|
+
setCameraMode(mode: CameraMode): void;
|
|
252
|
+
/** 退出跟随:把相机 transform 归位,交还给 Cesium 的漫游控制器 */
|
|
253
|
+
private releaseCamera;
|
|
254
|
+
private applyCamera;
|
|
255
|
+
/**
|
|
256
|
+
* 把相机摆到云台取景位姿 —— 机载视角、拍照、录像三者的唯一取景来源,
|
|
257
|
+
* 与 three 版 applyGimbalCameraPose 同一语义:
|
|
258
|
+
* 位置 = 机体原点沿**云台光轴**前移(水平分量按 cos(俯仰) 收缩、同时抬起 offset·sin(俯仰));
|
|
259
|
+
* 姿态 = 航向(含云台偏航)与云台俯仰,横滚锁水平(three 版三轴增稳的 rollDeg 恒 0)。
|
|
260
|
+
*
|
|
261
|
+
* ⚠️ 符号约定(两端不同,别想当然):
|
|
262
|
+
* · Cesium **相机**的 pitch 正 = 抬头(Quaternion.fromHeadingPitchRoll 里相机前向取局部 +x,
|
|
263
|
+
* pitch 分量 Ry(-pitch) 作用后前向上扬),而 sim.gimbalPitch 正 = 抬头 → 同号直传;
|
|
264
|
+
* · Cesium **模型**的 pitch 正 = 低头(机体前向是局部 -x,同一个旋转对它反号),
|
|
265
|
+
* 而 sim.tiltPitch 正 = 抬头 → 要取负(见 syncModelMatrix)。
|
|
266
|
+
* 实测铁证:云台 -30°(下视)时 pitch 直传画面朝地、取负则朝天(见 verify-gimbal-cam.mjs)。
|
|
267
|
+
*/
|
|
268
|
+
private applyGimbalCameraPose;
|
|
269
|
+
/**
|
|
270
|
+
* 云台取景视点 —— 机载视角、拍照、录像、采集快照**共用同一个来源**。
|
|
271
|
+
*
|
|
272
|
+
* 把它单独抽出来是为了让「画面里看到的」与「采集记录下来的」不可能不一致:
|
|
273
|
+
* 相机摆位与写入影像元数据的位姿读的是同一个函数。
|
|
274
|
+
*/
|
|
275
|
+
private gimbalCameraView;
|
|
276
|
+
/**
|
|
277
|
+
* 取景相机位姿与内参快照 —— 虚拟影像采集用(见 drone-capture 的 `VirtualCaptureProvider`)。
|
|
278
|
+
*
|
|
279
|
+
* 与 three 版同义:**记录的是取景相机(云台镜头),不是机身**;位姿与内参都从
|
|
280
|
+
* `gimbalCameraView()` + 渲染相机的投影参数里读,不触发渲染、不改动任何相机状态。
|
|
281
|
+
*
|
|
282
|
+
* 坐标系用 `ecef`(Cesium 原生地固系),同时给出一份经纬高 —— 与真实照片的 GPS 字段同形。
|
|
283
|
+
*/
|
|
284
|
+
getCaptureCamera(): CaptureCameraState | null;
|
|
285
|
+
/**
|
|
286
|
+
* 记下相机当前位姿(取景帧渲染完原样还回):
|
|
287
|
+
* 用 WC(World Coordinate)三元组存,不依赖相机此刻锁在哪个参考系里。
|
|
288
|
+
*/
|
|
289
|
+
private snapshotCamera;
|
|
290
|
+
/** 把相机位姿原样还回去 —— 取景帧渲染完必须调用(与 three 版 restoreCamera 同义) */
|
|
291
|
+
private restoreCamera;
|
|
292
|
+
/**
|
|
293
|
+
* 取景帧场景可见性:拍照/录像时机体自身与航线辅助物退场。
|
|
294
|
+
*
|
|
295
|
+
* 全景固定光心后,相机就在机体怀里,机壳/机臂/桨叶会进画面并被拼进全景;
|
|
296
|
+
* 航线点/线也不该出现在照片里。与 three 版 `setCaptureFrameVisible` 同义,
|
|
297
|
+
* 拍完按 `applyMissionVisibility()` 还原用户开关状态。
|
|
298
|
+
*/
|
|
299
|
+
private setCaptureFrameVisible;
|
|
300
|
+
/**
|
|
301
|
+
* 取景帧 —— 拍照与录像共用同一条「云台取景」路径:录制/成片内容恒为云台相机拍的,
|
|
302
|
+
* 与用户此刻在哪个视角无关(与 three 版 captureRecordingFrame 完全同义)。
|
|
303
|
+
*
|
|
304
|
+
* 做法:把 Cesium 相机临时搬到云台位姿并保持到地球瓦片就绪、连续渲染稳定帧,
|
|
305
|
+
* 再拷进录制画布(或 toDataURL 成照片)→ 还原相机 → 再渲一帧把用户视角画回去。
|
|
306
|
+
*
|
|
307
|
+
* 两个必须:
|
|
308
|
+
* - 渲染与拷屏必须同任务完成,否则 WebGL 合成后清空后台缓冲,拿到的是黑帧;
|
|
309
|
+
* - 拷完必须补渲用户视角:取景帧留在主画布上,不补的话合成器会把云台画面
|
|
310
|
+
* 呈现给用户(录制期间整屏闪帧)。
|
|
311
|
+
* fpv 模式下相机本来就在云台上:用户视角与云台取景是同一个画面,
|
|
312
|
+
* 省去搬移/还原/补渲,渲一帧直接用。
|
|
313
|
+
*/
|
|
314
|
+
private captureGimbalFrame;
|
|
315
|
+
/** 把刚渲出来的主画布拷进录制画布,并通知抓帧轨道 */
|
|
316
|
+
private pushRecordFrame;
|
|
317
|
+
/** 把当前画布内容拷进离屏 canvas 并转成 PNG(同一任务内执行,拿到的是刚渲染的那一帧) */
|
|
318
|
+
private grabCanvas;
|
|
319
|
+
/** 视角复位:回到自由漫游,并把机位拉到无人机斜后上方 */
|
|
320
|
+
resetCamera(): void;
|
|
321
|
+
/** 当前飞行相位(与 three 后端同一枚举) */
|
|
322
|
+
get phase(): import("./drone-sim").FlightPhase;
|
|
323
|
+
/** 是否已离地 */
|
|
324
|
+
get airborne(): boolean;
|
|
325
|
+
/** 当前飞行挡位 */
|
|
326
|
+
get flightMode(): FlightMode;
|
|
327
|
+
/** 相对起飞点高度(米) */
|
|
328
|
+
get altitude(): number;
|
|
329
|
+
/** 起飞前检查项列表(供面板展示) */
|
|
330
|
+
get preflightChecks(): ChecklistItem[];
|
|
331
|
+
/** 机臂是否处于收纳态 */
|
|
332
|
+
get armsFolded(): boolean;
|
|
333
|
+
/** 是否正在录像 */
|
|
334
|
+
get isRecording(): boolean;
|
|
335
|
+
/** 上电自检(通过后才能起飞) */
|
|
336
|
+
powerOn(): void;
|
|
337
|
+
/** 自动起飞到默认高度(地面待机相位才受理) */
|
|
338
|
+
takeOff(): boolean;
|
|
339
|
+
/** 自动降落(中止进行中的航线) */
|
|
340
|
+
land(): boolean;
|
|
341
|
+
/** 智能返航(需在空中;先中止航线) */
|
|
342
|
+
returnHome(reason?: string): boolean;
|
|
343
|
+
/** 写摇杆连续量(与 three 后端同语义) */
|
|
344
|
+
setStick(stick: Partial<StickState>): void;
|
|
345
|
+
/** 切飞行挡位 */
|
|
346
|
+
setMode(mode: FlightMode): void;
|
|
347
|
+
/** 设云台俯仰角(度) */
|
|
348
|
+
setGimbalPitch(pitch: number): void;
|
|
349
|
+
/** 直接把无人机移动到目标本地坐标位置,并保持离地高度不低于地形 */
|
|
350
|
+
flyTo(target: {
|
|
351
|
+
x?: number;
|
|
352
|
+
y?: number;
|
|
353
|
+
z?: number;
|
|
354
|
+
heading?: number;
|
|
355
|
+
pitch?: number;
|
|
356
|
+
roll?: number;
|
|
357
|
+
}): void;
|
|
358
|
+
/** 设定相机变焦倍数(1~4x),保持和 three 后端一致 */
|
|
359
|
+
zoomTo(zoom: number): void;
|
|
360
|
+
/** 在当前相对坐标处采样地形并确保无人机不钻进地形里 */
|
|
361
|
+
private ensureAltitudeAboveTerrain;
|
|
362
|
+
private canSampleTerrain;
|
|
363
|
+
private handleTerrainError;
|
|
364
|
+
/**
|
|
365
|
+
* 设置取景**俯仰**覆盖 —— 全景扫描(180° / 360°)按俯仰层逐张取景的入口;传 `null` 复位。
|
|
366
|
+
* 与 three 版 `DroneFly.setCaptureView` 同语义:俯仰替代云台俯仰;只影响取景相机
|
|
367
|
+
* (`gimbalCameraView` 一处生效),拍照 / 录像 / 采集快照三条路径自动同源。
|
|
368
|
+
*
|
|
369
|
+
* 没有水平偏航是有意的:水平覆盖靠 `spinBodyTo` 转机体(云台 Pan 行程不够)。
|
|
370
|
+
*/
|
|
371
|
+
setCaptureView(override: CaptureViewOverride | null): void;
|
|
372
|
+
/**
|
|
373
|
+
* 让**机体原地自转**到绝对方位角 `headingDeg`(度,罗盘角);`null` 停止自转。
|
|
374
|
+
* 与 three 版同语义,同样交给飞控内核(`sim.spinTo`)—— 两个后端的自转行为因此完全一致。
|
|
375
|
+
*/
|
|
376
|
+
spinBodyTo(headingDeg: number | null): void;
|
|
377
|
+
/** 机体当前方位角(度,罗盘角)—— 全景扫描用它判断"转到位了没" */
|
|
378
|
+
getBodyHeading(): number;
|
|
379
|
+
/**
|
|
380
|
+
* 展开 / 收拢机臂。
|
|
381
|
+
* Cesium 的 Model 没有 three 版的机械骨骼,这里只维护"目标状态"——
|
|
382
|
+
* 它的唯一作用是驱动起飞前检查项,与真机"不展臂不许起飞"一致。
|
|
383
|
+
*/
|
|
384
|
+
setArmsFolded(folded: boolean): void;
|
|
385
|
+
/** 注入机臂检查项:三方渲染器下没有骨骼可查,直接用目标状态代替 */
|
|
386
|
+
private installArmCheck;
|
|
387
|
+
private refreshArmCheck;
|
|
388
|
+
/** 当前是否处于观察者(自由漫游)视角 —— 场景内编辑的前置条件 */
|
|
389
|
+
get isOrbitView(): boolean;
|
|
390
|
+
/** 启动航线任务(地面时先自动起飞,到 1.2 米后自动接上航线) */
|
|
391
|
+
startMission(): boolean;
|
|
392
|
+
/** 暂停执行中的航线(原地悬停,可再续飞) */
|
|
393
|
+
pauseMission(reason?: string): boolean;
|
|
394
|
+
/** 续飞被暂停的航线 */
|
|
395
|
+
resumeMission(): boolean;
|
|
396
|
+
/** 中止航线并留在原地悬停 */
|
|
397
|
+
stopMission(reason?: string): boolean;
|
|
398
|
+
/** 下发航点列表(执行中会被内核拒绝,与真机"上传后不可改"一致) */
|
|
399
|
+
setMission(waypoints: Array<Partial<MissionWaypoint>>): boolean;
|
|
400
|
+
/** 改航线参数(巡航速度/机头朝向/过点方式/完成后动作/循环) */
|
|
401
|
+
setMissionConfig(patch: Partial<MissionConfig>): void;
|
|
402
|
+
/** 航线参数与航点恢复出厂默认 */
|
|
403
|
+
resetMissionToDefault(): void;
|
|
404
|
+
/** 航线只读快照(航点/Home/进度) */
|
|
405
|
+
getMissionSnapshot(): MissionSnapshot;
|
|
406
|
+
/** 全量真值快照(面板据此渲染任务状态与阻塞原因) */
|
|
407
|
+
getSnapshot(): DroneSnapshot;
|
|
408
|
+
/** 把当前航线整理成可序列化的导出数据(实现下沉在 drone-sim,与 three 后端共用) */
|
|
409
|
+
getMissionExport(): MissionExport;
|
|
410
|
+
/** 导出航线文本(`json` 完整存档 / `csv` 纯航点表) */
|
|
411
|
+
exportMission(format?: MissionExportFormat): string;
|
|
412
|
+
/** 场景内编辑状态(开关/是否激活/选中/悬停/拖拽中) */
|
|
413
|
+
getMissionEditState(): MissionEditState;
|
|
414
|
+
/** 场景内编辑开关(开启仍需"当前确实可编辑"才生效) */
|
|
415
|
+
setMissionEditEnabled(enabled: boolean): void;
|
|
416
|
+
/** 场景内编辑开关当前是否开着 */
|
|
417
|
+
isMissionEditEnabled(): boolean;
|
|
418
|
+
/** 当前选中的航点索引(无选中 -1) */
|
|
419
|
+
getMissionSelected(): number;
|
|
420
|
+
/** 同步选中航点(列表点击与场景拾取双向联动) */
|
|
421
|
+
setMissionSelected(index: number): void;
|
|
422
|
+
/** 原位更新一个航点(场景拖拽每帧调用);内核会做限高 / 限距夹紧 */
|
|
423
|
+
updateMissionWaypoint(index: number, patch: Partial<MissionWaypoint>): MissionWaypoint | null;
|
|
424
|
+
/** 场景编辑:按索引删除一个航点 */
|
|
425
|
+
deleteMissionWaypoint(index: number): boolean;
|
|
426
|
+
/** 场景编辑:以飞机当前位置新增一个航点(高度取飞机当前高度) */
|
|
427
|
+
addMissionWaypointAtDrone(): number;
|
|
428
|
+
/** 新航点的默认参数:高度与速度继承相邻航点,避免插出一个贴地点 */
|
|
429
|
+
newWaypointTemplate(index: number): Partial<MissionWaypoint>;
|
|
430
|
+
/** 航点标记 / 航线折线 / 返航点的总显隐(不影响任务执行) */
|
|
431
|
+
setMissionVisible(visible: boolean): void;
|
|
432
|
+
isMissionVisible(): boolean;
|
|
433
|
+
/** 航点标记显隐 */
|
|
434
|
+
setMissionWaypointsVisible(visible: boolean): void;
|
|
435
|
+
isMissionWaypointsVisible(): boolean;
|
|
436
|
+
/** 航线折线显隐 */
|
|
437
|
+
setMissionPathVisible(visible: boolean): void;
|
|
438
|
+
isMissionPathVisible(): boolean;
|
|
439
|
+
/** 地理坐标(经纬高)在 Cesium 后端始终可用 */
|
|
440
|
+
supportsGeoCoordinates(): boolean;
|
|
441
|
+
/**
|
|
442
|
+
* 取某航点的地理坐标(经纬高,WGS84)。
|
|
443
|
+
*
|
|
444
|
+
* 航点在 sim 里是本地米坐标(x 东 / z 南 / altitude AGL),经 `localToWorld` 投到 ECEF 后
|
|
445
|
+
* 再反算 Cartographic;海拔取椭球绝对高程(= 地形 + AGL),与真实照片的 GPS 字段同形。
|
|
446
|
+
* 越界或点位退化(如地心)返回 null。
|
|
447
|
+
*/
|
|
448
|
+
getWaypointGeo(index: number): {
|
|
449
|
+
lon: number;
|
|
450
|
+
lat: number;
|
|
451
|
+
height: number;
|
|
452
|
+
} | null;
|
|
453
|
+
/**
|
|
454
|
+
* 用地理坐标原地改写一个航点:经纬高 → 本地米坐标的逆向换算。
|
|
455
|
+
* `Cartesian3.fromDegrees` 投到 ECEF,再用 `worldToLocalXZ` 取回本地水平坐标(x 东 / z 南);
|
|
456
|
+
* 海拔绝对高程减去锚点海拔即 AGL,交给 `updateMissionWaypoint` 夹紧到合法范围。
|
|
457
|
+
* 越界 / 点位退化(地心)返回 false。
|
|
458
|
+
*/
|
|
459
|
+
setWaypointGeo(index: number, geo: {
|
|
460
|
+
lon: number;
|
|
461
|
+
lat: number;
|
|
462
|
+
height: number;
|
|
463
|
+
}): boolean;
|
|
464
|
+
/** 三个显隐开关的初值在编辑器创建后补一遍(构造早于 start) */
|
|
465
|
+
private applyMissionVisibility;
|
|
466
|
+
/**
|
|
467
|
+
* 把相机拉到"一眼看全整条航线"的位置(编辑航线前先框住航线)。
|
|
468
|
+
*
|
|
469
|
+
* 与 three 版 frameMission 同目的:航点动辄 30~40 米高、水平铺开几十米,
|
|
470
|
+
* 默认机位贴着飞机,根本看不到航线。这里按航点 + 返航点的包围球算距离,
|
|
471
|
+
* 保证竖着铺开的航线也不会被裁掉;只有观察者视角受理(机载/跟随下相机
|
|
472
|
+
* 每帧被适配器接管,飞过去会被立刻拽回)。
|
|
473
|
+
*/
|
|
474
|
+
frameMission(): boolean;
|
|
475
|
+
/** 场景内编辑的硬门槛:观察者视角 + 任务未在执行(与 three 版 canMissionSceneEdit 一致) */
|
|
476
|
+
private canMissionSceneEdit;
|
|
477
|
+
canEdit(): boolean;
|
|
478
|
+
getWaypoints(): MissionWaypoint[];
|
|
479
|
+
getSelected(): number;
|
|
480
|
+
setSelected(index: number): void;
|
|
481
|
+
/** 整表提交(双击插入 / 删除):内核会逐点归一化并重建实体 */
|
|
482
|
+
commitWaypoints(waypoints: Array<Partial<MissionWaypoint>>, selected: number): void;
|
|
483
|
+
moveWaypoint(index: number, patch: Partial<MissionWaypoint>): MissionWaypoint | null;
|
|
484
|
+
getLimits(): MissionEditLimits;
|
|
485
|
+
/**
|
|
486
|
+
* sim 本地米坐标 → ECEF 世界坐标(航点实体定位用)。
|
|
487
|
+
*
|
|
488
|
+
* 与 computeWorldPosition(机体)的差别只在高程基准:机体要再抬
|
|
489
|
+
* groundClearance + modelSpec.lift(让机腹贴地),而航点的 altitude 本身就是
|
|
490
|
+
* **相对起飞点的 AGL**,直接加锚点海拔即是世界高。
|
|
491
|
+
*/
|
|
492
|
+
localToWorld(x: number, y: number, z: number): CesiumNS;
|
|
493
|
+
/** ECEF 世界坐标 → sim 本地水平坐标(双击插入航点用) */
|
|
494
|
+
worldToLocalXZ(world: CesiumNS): {
|
|
495
|
+
x: number;
|
|
496
|
+
z: number;
|
|
497
|
+
} | null;
|
|
498
|
+
/** 拖拽期间收起 Cesium 的相机漫游输入,否则相机会跟着指针一起动 */
|
|
499
|
+
setCameraInputEnabled(enabled: boolean): void;
|
|
500
|
+
/** 编辑日志出口:接仿真内核的事件流(面板/控制台都看得到) */
|
|
501
|
+
log(level: 'info' | 'warn', text: string): void;
|
|
502
|
+
/**
|
|
503
|
+
* 拍照:用云台相机取景拍一张 PNG(与用户当前视角无关,与 three 版同义)。
|
|
504
|
+
*
|
|
505
|
+
* 实现是登记一个待取景请求,渲染循环当帧把相机搬到云台位姿 → 渲染 → 同一任务内
|
|
506
|
+
* 拷屏 → 还原(见 captureGimbalFrame)。上一张尚未取回时返回 null,避免连拍踩踏;
|
|
507
|
+
* 地球瓦片未及时稳定时,最多等待 PHOTO_TIMEOUT_MS,之后使用最近渲染的取景帧,
|
|
508
|
+
* 避免因流式地形持续加载而把整张照片丢弃。
|
|
509
|
+
*/
|
|
510
|
+
requestPhoto(): Promise<PhotoShot | null>;
|
|
511
|
+
/** 开始屏录(录云台取景,与用户当前视角无关)。返回 false = 当前环境不支持 */
|
|
512
|
+
startRecording(): boolean;
|
|
513
|
+
/** 结束屏录:收尾成 Blob 并交给 onRecordingReady(未录制时直接返回 null) */
|
|
514
|
+
stopRecording(): Promise<Blob | null>;
|
|
515
|
+
/** 回到"上电前的干净状态":停桨、归零位姿、复位飞控 */
|
|
516
|
+
resetAll(): void;
|
|
517
|
+
}
|
|
518
|
+
export {};
|
|
519
|
+
//# sourceMappingURL=drone-cesium.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drone-cesium.d.ts","sourceRoot":"","sources":["../../src/lib/drone-camera/drone-cesium.ts"],"names":[],"mappings":"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"}
|