DSX
GitHub

v0.1 草案 — 有意提前、公开发布

一份能在起飞前
被检验的表演文件

DSX(Drone Show eXchange)是面向无人机灯光表演的开放、厂商中立文件格式。它的设计目标是可飞行、可被机器校验,而不仅仅是可预览。

目前还不能成立的说法

还没有任何飞行器按 DSX 文件飞过。今天已经过测试的是规范文本、JSON Schema 和规范性采样器;.dsb 二进制编码仍只是提纲;采样器测试向量并未覆盖全部情况。把这一点写清楚,正是目的所在——一个夸大自身成熟度的格式,会重复本项目正要取代的那种做法。

缺口

今天没有任何开放格式既可飞行、又可被独立校验

现有格式都落在两种状态之一:开放但不可直接用于飞行,或可飞行但没有公开文档。后果并非假设——表演以 CSV 交换后丢失全部安全元数据,电子围栏字段存在却从不填写,高度基准(AGL / AMSL / 椭球)被默认而不写明,坐标轴左右手系在工具之间悄然不同。每一项都有已知的失效模式。

格式开放且有文档可飞行可由第三方校验
VVIZ否 — 可视化格式,并非作为可飞行轨迹数据的来源
.skyc / .skyb源码可读(GPL),无公开规范
.dac, .bin, .path/.path3, .essp, 厂商 .json未找到公开规范
CSV完全开放部分可以
DSX按此目标设计 — 尚未实际飞行容器、Schema、§10 规则与采样向量,今天已测试

“未找到”是准确的表述:无法证明不存在公开规范,只能说明检索未果(检索时间:2026 年 8 月)。

设计

两层,干净分开

把交换与上传混在同一个文件里,是大多数格式会犯的错误。DSX 将二者分开,并把中间的编译器规定为确定性的:相同输入必须 (MUST) 产生字节级相同的输出。表演文件因此才可审计。

.dsx交换

交换、归档、评审、向监管机构提交。

ZIP + JSON — 可 diff、人类可读

.dsb已编译

上传到飞行器。

二进制 TLV — 微控制器可解析

.dsxp设备配置文件

某型飞行器或载荷实际能做什么。

JSON — 随 .dsx 一并交付

互操作性是格式本身的属性,不是某台服务器提供的服务

每一份符合规范的 .dsx 必须 (MUST) 能通过规范性采样算法,在任意帧率下还原为 t, x, y, z, R, G, B — 且在每一种实现中比特级一致。因此任何现有系统在第一天就有导入路径,无需理解多项式。

t, x, y, z, R, G, B

依据是参考实现和六组手算测试向量,而不是单靠文字。

硬件身份写在文件里

表演通过稳定 UUID 引用设备配置文件,并声明其编写时所针对的模式。因此工具可以拒绝上传一份所声明飞行包络超出该机型已公布极限的表演——而不是到了空中才发现。

文件里有什么

一份表演文件可以携带、而现有格式不能携带的三件事

这不是产品功能。这是字段、规则和一套采样算法——已写入规范、由模式校验,并且(对波次而言)由两份 L2 示例实际演练。

一条不必等待厂商转换器的导入路径

每一份符合规范的文件都可通过已公布的采样算法,在任意帧率下归约为 t、x、y、z、R、G、B——各实现之间逐位一致。已经消费帧阵列的飞控可以在第一天导入 DSX 表演,而不必理解多项式。与其他格式之间的具名转换器仍在规划中,尚未交付;任何此类转换器必须公布损失矩阵,写明保留、近似或丢弃了什么。

采样器已经存在并且通过测试。转换器套件(dsx-convert)还没有。

住在已签名文件里的双重围栏

一层柔软、随指令位置移动的气泡(约 4 米)触发自动降落。一层硬多边形触发电机关闭。两者都是文件字段,与表演其余部分一起被哈希,可在机上独立于播放器求值。只作为控制台设置存在的围栏,可以被改成错误的数字而无人察觉——这是有记录的事故模式。

机上实际生效的围栏是 termination.geofence。表演级 safety.geofence 是包络,不是同一条规则的第二份拷贝。

同一架飞机可以起飞不止一次

现有格式把编舞、机体和电池压成同一个对象——因此一场表演无法长过一次充电。DSX 把角色、机体和架次分开。机群降落、换电,再飞进同一支曲子。已有两份 L2 示例:六架飞机飞满 42 分钟,以及用于连续运行的生成式周期。

25 条轮换规则中有 20 条带可执行检查。开放式表演(duration_ms: null)的采样仍未定义。

安全

安全包络是数据,不是旁边的一份 PDF

终止升级、电子围栏、链路丢失行为、GNSS 完好性策略和载荷联锁都是文件中的字段——与回放无关,可在机上求值,无需连接到表演播放器。

四级升级阶梯

  1. 1保持 / 暂停(Hold / Suspend)

    可逆。表演停在原地。

  2. 2协同返航(Coordinated RTH)

    文件声明该返航可行——或诚实地声明不可行。

  3. 3原地降落(Land in place)

    受控下降,无论飞行器当时在何处。

  4. 4关车 / 解锁动力(Kill / Disarm)

    不可逆。坠落轨迹必须事先已被安全区域包住。

每一级只需一次操作

这条要求来自一起有记录的事故:飞行员让表演继续,而飞行器已经坠入人群——因为暂停需要太多步骤。一条用起来太贵的中止路径,不是安全功能。因此 DSX 把“这一级要花几次操作”当作文件的一部分。

返航可行性图

返航并非表演每一刻都可用。DSX 把不可行的时间窗写清楚,附上原因以及届时仍可用的升级级别——而不是让地面站在时间压力下才发现。

坠落必须被包住

所声明的安全区域必须 (MUST) 从表演到达的每一个位置包住已关车飞行器的坠落轨迹。只有事先成立,关车这一级才可用。

软气泡,硬多边形

文件携带两道围栏,不是一道。软围栏是绕指令位置移动的气泡;越出即自动降落。硬围栏是固定多边形;越出即关闭电机。两者随已签名文件一起走,地面站无法悄悄改掉这个数字。

配置档

符合性配置档,而不是功能清单

制造商不必实现全部内容才算符合。每一级都是一项完整、可测试的承诺。

L0Sampled

仅位置与 RGB。等价于 CSV。任何飞控都能做到。

L1Show

分段轨迹、灯光程序、安全包络、起飞网格、返航。

L2Production

偏航、载荷(烟火、回收、投放)、多波次轮换、多机队、音频同步、签名。

符合性

今天测了什么 — 以及还没测什么

今天已存在并在运行

  • 容器安全:条目名称、解压上限、签名绕过情形
  • .dsx、.dsxp 与 termination 的 JSON Schema 校验 — 可离线,无需网络
  • 规范性采样器,对照六组手算向量
  • 归档完整性:每个被引用的资源都在包内,哈希可重算,封印可验证
  • §10 的语义规则(轮换与连续运行)— 25 条中有 20 条已有可执行检查
  • L0、L1 以及两个 L2 情形的参考示例

尚不存在

  • 往返与确定性测试套件 — 因此“DSX 符合”目前还不是任何人能端到端获得的声称
  • 与其他格式之间的具名转换器(dsx-convert)——已规划;采样器是今天已经存在的导入路径
  • .dsb 二进制编码(仍只是提纲)
  • 无固定结束时间的表演的采样行为(duration_ms: null)
  • 任何行使载荷、烟火联锁或 GNSS 完好性字段的参考文件 — 已写入规范,但没有示例演示它们
  • 厂商贡献的设备配置文件 — 目前一份都没有
  • 哪怕一次飞行。还没有任何飞行器按 DSX 文件飞过。

许可

只为一个原因:必须能在专有固件中实现

规范、Schema、示例、设备配置文件

Community Specification License 1.0

其专利许可覆盖的正是实现该规范——而这才是全部目的;软件许可证并不能可靠地给出这一点。

代码、参考工具、符合性套件

Apache-2.0

可嵌入专有固件,并带有范围真正适合代码的专利许可。

名称 “DSX” 与 .dsx 扩展名

未持有商标,也不需要

格式名是技术指称,如同 .zip 或 .json。任何人都可以实现;符合性由公开测试套件定义,而不是由一枚商标定义。

明确不是 GPL:GPLv3 下的参考实现无法嵌入最终必须读取该格式的专有固件;一份连目标受众都无法链接其参考代码的标准,会有采纳上限。明确不是 MIT:没有专利许可。规范文本也明确不是 Apache-2.0:其第 3 条把专利许可给“以其他方式转让该作品”——即这份文档——而不是去实现文档所描述的内容。

如果你在制作表演,而软件挡了路,请开一个 issue

Issue 对所有人开放。提案会被讨论,而不是以 “not planned” 关闭。贡献者会在规范中具名致谢。这是一项承诺,写在这里,是为了可以被对照检查。