从一场灯光秀开始
这场对话的起点,是 Steven 让 Alex 回顾前一天看到的无人机 LED 灯光表演(Drone Light Show),并尝试从工程师的角度解释:数百甚至数千架无人机,究竟如何在空中同步移动、改变阵形、控制灯光,最终形成动态的图案与动画?
Alex 最初提出两个猜想:
- 预先编程(Hardcoding):工程师事先设定每架无人机在特定时间应该执行什么动作,表演开始后,所有无人机按照预设程序运行。
- AI 辅助生成程序:工程师可能用自然语言向 AI 描述想要的动作,再让 AI 编写控制无人机移动的程序。
Steven 没有立即接受这两个解释,而是要求 Alex 再深入一层:不只是想象表演如何被启动,而是思考工程师如何设计、制作和部署整套系统。
Steven 随后提出自己的技术模型:
先利用 3D 绘图或动画软件创建动态画面,再把动画转换为无人机的位置、移动路径和 LED 灯光数据,最后将这些数据导入无人机控制系统,让无人机执行。
这个方向与实际的专业无人机灯光秀系统高度一致。根据 Skybrush、Verge Aero 和 Intel 的技术资料,现代无人机灯光秀确实普遍通过动画设计、自动路径规划、轨迹验证及机群控制来实现。Skybrush Open-source Drone Show Software+2
不过,这场讨论也存在一个值得澄清的概念:Alex 所说的预先编程,与 Steven 所说的软件自动生成飞行指令,其实并不互相排斥。 两者描述的是同一个系统的不同层次。
整场对话最重要的教育意义,是 Steven 希望 Alex 学会从看得见的技术效果,追问背后看不见的设计、数据、算法与执行机制。
从预设动作到动画设计
1. Steven 提出问题:不要只看表演,要思考它怎样实现
Steven 首先请 Alex 向在场的表姐解释前一天看到的无人机 LED 空中表演。
Steven 的核心问题是:
作为一个 engineer,你觉得他们 technically 是怎样做到这件事的?
问题的重点不是描述无人机能组成什么图案,而是让 Alex 代入负责设计系统的工程师,解释背后的技术实现。
这个问题实际上包含了多个没有直接说出的子问题,例如:
- 无人机怎样知道自己应该飞到哪里?
- 不同无人机怎样配合完成动态图案?
- 无人机的移动时间和路线怎样确定?
- LED 的亮灭与颜色变化由什么控制?
- 工程师怎样把设计好的动画变成真正的空中表演?
这些是从 Steven 的问题延伸出来的工程问题,而不是 Alex 当时已经明确回答的内容。
2. Alex 第一个猜想:按照预先设定的时间执行动作
Alex 一开始承认自己不知道实际原理,但提出了一个假设:
他们有 set 时间,在 exactly 这个时间做这些 movements。
他认为工程师可能事先把无人机的动作写进程序,并设置好执行时间。
Steven 追问究竟怎样实现时,Alex 表示可能是把动作直接 hardcode 进去。
Steven 随即指出,现场看到的并不是静止图案,无人机一直在移动,因此希望 Alex 解释动态变化究竟怎样被设计出来。
这里,Alex 已经抓到一个重要的技术概念:时间同步与预设动作。
但他的回答还没有涉及动作数据从哪里来、路径怎样计算,以及每架无人机如何知道自己的位置。
3. Alex 第二个猜想:利用 AI 编写动作程序
Alex 接着提出另一个可能性:
他们 describe 那个 movement to AI,然后 AI 帮忙 hardcode 出来它的 movement。
他的想法是,工程师可能先向 AI 描述想实现的动作,再由 AI 生成对应程序。
Steven 确认他的意思:
Fix 那个时间跟 movement,然后它只是 play,它就 follow 这样。
Alex 认可这种解释,同时补充:
但是有可能有其他的方法。
这说明 Alex 没有把自己的初步解释当成唯一可能的技术实现。
不过,当 Steven 要求他进一步提出其他方法时,他暂时无法给出完整的替代模型。
4. Steven 继续追问:按下按钮并不是工程设计的答案
Alex 又提出一种可能:工作人员按下一个按钮,之后某些设备便开始执行表演。
这里提到的「box」含义尚不明确,不能确定它具体指哪一种设备。
Steven 认为这种回答只描述了第一层可观察的操作:
这个是你看到的 first level,就是你看到的东西。
Steven 要求他考虑更深入的问题:
你是那个负责这个东西的人,你是那个 engineer,你会怎样去操作?
这里,Steven 实际上在区分两个不同的问题:
| 层次 | 核心问题 | 对话中的例子 |
|---|---|---|
| 操作层(Operation) | 使用者怎样启动系统? | 按一个按钮,灯光秀开始 |
| 编程层(Programming) | 无人机怎样获得执行指令? | 预先设定动作和时间 |
| 设计层(Design) | 复杂图案、动画和路径怎样产生? | 使用 3D 动画软件进行设计 |
| 系统层(System Engineering) | 整套软硬件怎样协调工作? | 把设计数据转换并交由无人机控制系统执行 |
Alex 最初的回答主要集中在操作层和编程层。
Steven 希望他进一步思考设计层与系统层。
当 Alex 最终表示不知道时,Steven 开始提出自己的解释。
5. Steven 的主要解释:从 3D 动画设计到无人机控制
这是整场讨论中技术内容最丰富的一段。
Steven 指出现有的 3D 绘图及动画软件能够在虚拟环境中设计物体的移动。他举出 Unity、Unreal Engine 一类软件作为例子。
Steven 的假设可以整理为六个步骤。
第一步:设计空中图案
工程师先准备希望无人机在天空中呈现的图形或画面。
例如文字、图案或其他动态图像。
第二步:转换图形数据
Steven 推测可能将这些图像转换成某种数据格式,并在解释时提到 ASCII。
他的意思是:画面必须转换为计算机软件能够读取和处理的数据。
这里的 ASCII 是 Steven 当时提出的格式猜想,并非已经确认的灯光秀行业标准。
第三步:导入 3D 动画软件
Steven 设想利用 Unity、Unreal Engine 或类似工具,将图像转换成虚拟空间中的点或对象。
这些对象可以对应真实世界中的无人机。
第四步:设计动画与阵形转换
在 3D 软件中,工程师安排每个点如何移动、不同画面之间如何连接,以及动画序列应该怎样变化。
Steven 特别提到,不同 animation sequences 之间需要有相应的移动安排,而不是只有静止图像。
第五步:导出移动及位置数据
当动画设计完成后,软件可以输出每个点在各个时间的目标位置,以及从一个画面转移到下一个画面的运动资料。
这些结果再交给专用的无人机程序。
第六步:控制真实无人机和 LED
无人机根据导入的数据移动到指定位置,并执行对应的灯光变化。
Steven 认为,工程师不一定需要手工编写每架无人机所有的移动指令,而是利用已经设计好的软件,将动画转换为无人机能够执行的数据。
这个观点最关键的地方,是把复杂的工程问题转变为:
设计动画 → 生成运动数据 → 执行运动数据。
6. Steven 强调:AI 不是实现无人机灯光秀的必要条件
Steven 最后指出,这项技术在 ChatGPT 等生成式 AI 普及之前就已经存在。
另一位家庭成员补充,中国此前就已经有类似表演。
Steven 进一步解释:
这个东西是可以被 program 出来的,它不一定需要 AI。
他的观点是:
- 无人机灯光秀本质上是一项可以通过传统软件工程实现的技术。
- AI 可以帮助工程师编写软件、生成动画或提高开发效率。
- 但是不能因此认为,复杂的无人机表演一定依赖 AI。
- 即使没有生成式 AI,工程师也可以设计这样的系统。
Alex 在 Steven 解释期间,多次以「嗯」「哦」回应。
听过解释并作出回应,还不能说明已经能够独立解释或实现其中的技术机制。
有了初步的工程模型,还需要通过软件操作、程序编写、实验验证与独立复述来检验理解。
理解原理只是起点,能够独立设计和验证,才说明知识开始转化为能力。
动画怎样变成飞行
根据实际软件文档,Steven 提出的技术路线并不只是合理的猜想,现实中已经有相当接近的完整实现。
最直接的例子是 Skybrush Studio。它可以作为 Blender 的插件,在 3D 环境中设计无人机编队、移动路径及 LED 动画,然后导出供无人机执行的表演文件。
另一个例子是 Verge Design Studio,能够将 SVG、图像及 3D 模型转换为无人机编队,并自动规划编队之间的过渡路径。Skybrush Open-source Drone Show Software+2
1. 真实系统的主要技术流程
无人机灯光秀的典型工程架构
创意与视觉设计
图像、文字、Logo、3D 动画、音乐时间线
3D 编队设计
将图案转换为多个无人机目标点位
路径规划与安全验证
编队匹配、轨迹生成、速度与防碰撞检查
输出表演数据
时间 + X/Y/Z 坐标 + LED 颜色
地面控制系统
定位、分配无人机角色、上传计划、检查状态、启动
真实无人机自主执行
各机按共享时间线飞行并控制 LED
定位与飞控
GNSS / RTK / IMU
灯光执行
RGB 颜色 / 时间同步
2. Steven 所说的 Export,实际上导出什么?
Skybrush 的技术文档给出了非常明确的答案。
它支持将每架无人机的飞行轨迹和 LED 颜色,按照时间间隔导出为 CSV 数据。字段包括:
time, X, Y, Z, R, G, B
其中时间以毫秒表示,XYZ 坐标以米表示,RGB 颜色分量通常为 0–255。软件也能导出包含更多表演信息的 .skyc 文件。docs.skybrush.io+1
例如,假设某架无人机编号为 17,可以用以下简化数据表达它的表演:
| 时间 | 目标位置 (X,Y,Z) | LED 颜色 |
|---|---|---|
| 0 秒 | (0, 0, 20) | 蓝色 |
| 2 秒 | (2, 0, 21) | 红色 |
| 5 秒 | (3, 1, 21) | 关闭 |
以上只是帮助 Alex 理解的数据示例,并非真实表演记录。实际文件通常包含更多时间采样和控制信息。
如此一来,无人机就不需要理解整幅图像代表什么。
它只需要执行属于自己的任务:在正确时间接近指定位置,并显示指定灯光。
这也解释了 Steven 为什么认为不应该由人手工编写整个表演的所有动作。
3. 一个重要补充:无人机不是完全被动地播放指令
Steven 主要解释了动画如何转化成移动指令。但实际工程还有另一个关键问题:
当风把无人机吹偏时,它怎样回到正确位置?
无人机通常会通过定位与传感器系统,持续比较目标位置和实际位置,再由飞行控制器调整电机输出。
室外表演可利用 GNSS 定位,并在需要高精度时使用 RTK 修正;惯性传感器则协助估计机体姿态与运动状态。
Verge Aero 的技术文档明确说明:无人机在执行预先设定的轨迹时,会持续修正自己的运动,以追踪随时间变化的目标位置。Verge Aero Docs+1
因此,工程上需要区分:
- 预先规划(Open-loop planning):事先计算计划中的时间、位置和轨迹。
- 反馈控制(Closed-loop control):飞行期间根据实际状态不断修正运动。
这里的第一项是离线轨迹规划,不代表实际飞行采用开环控制。两者可以同时存在,而且通常需要相互配合。
4. 另一个真正困难的部分:怎样避免互相碰撞?
假设 100 架无人机原本组成一个圆形,下一幕必须组成一颗心。
即使已经知道两个图案中的所有位置,工程师仍要解决:
- 哪架无人机应该移动到哪个目标点?
- 能否减少总移动距离和转换时间?
- 途中路径会不会交叉或距离过近?
- 无人机是否能在有限的速度、加速度与飞行空间内完成动作?
这些正是专业无人机灯光秀软件需要解决的路径规划问题。
2026 年发表在 Journal of Field Robotics 的研究,也专门研究了大规模无人机灯光秀的目标点分配、轨迹优化和避碰问题。Wiley Online Library
所以,Steven 所说的「从一个 animation sequence 转换到下一个 sequence」,背后实际上涉及计算几何、优化算法和控制工程,而不仅仅是视觉动画。
几个容易混淆的工程概念
| 对话中的观点 | 技术评价 | 说明 |
|---|---|---|
| Alex:无人机按预设时间执行动作 | 正确 | 典型无人机灯光秀确实依赖预先规划及同步时间线 |
| Alex:可能由 AI 编写移动程序 | 有可能,但不是必需 | AI 可以辅助设计或生成程序,但不是基本技术前提 |
| Steven:可以利用 3D 动画软件设计 | 正确 | Blender + Skybrush 是明确的实际例子 |
| Steven:图形可能转换成 ASCII | 概念需要修正 | ASCII 是字符编码,不是通用的图案或轨迹转换格式 |
| Steven:动画软件可以输出位置和移动信息 | 正确 | 已有软件直接导出无人机轨迹及 LED 数据 |
| Steven:不必人工 hardcode 每个动作 | 大体正确 | 路径可以自动生成,但最终仍由程序和数据控制 |
| Steven:AI 出现之前就可以实现 | 正确 | 例如 Intel 的无人机灯光秀已在 2018 年平昌冬奥会亮相 |
Intel+3
其中有三个概念特别值得进一步澄清。
1. Hardcoding 与预先编排不是同一回事
这是整场对话最重要的概念差别。
严格来说,Hardcoding 通常指把特定数值或规则直接写死在程序源码中。
但灯光秀不一定这样做。它可以先用通用软件生成表演数据,再由通用的飞行控制程序读取这些数据。
所以:
- Alex 认为动作事先被设定,是正确的。
- Steven 认为不需要逐项手写所有动作,也是正确的。
- 两人的观点可以组合起来,而不必互相否定。
此外,Steven 以「它会移动,不是静止的」追问 hardcoding,这个问题能够引导 Alex 思考动态轨迹,但严格而言,动态移动本身并不能排除 hardcoding,因为程序同样可以包含随时间变化的坐标。
2. ASCII 不是 Steven 所寻找的关键技术概念
Steven 当时似乎在寻找一种把视觉内容转换成可处理数据的方式。
实际上,不同环节可能用到不同格式:
- SVG:表示二维矢量图形。
- 3D 模型或动画文件:表示空间对象与动画。
- CSV:储存时间、坐标及颜色等结构化数据。
.skyc:Skybrush 使用的编译表演格式。
ASCII 本身只是文本字符编码,并不规定图形、位置或运动的数据结构。
Steven 的数据转换思路是正确方向,但实际关键在于图形表示、几何采样、编队生成与轨迹数据格式。
3. Alex 的 AI 假设并非没有技术依据
2026 年已有研究探索从文本提示和生成式视觉内容出发,自动生成无人机灯光秀轨迹,并结合安全规划来形成可执行编队。arXiv
因此,应作更精确的区分:
AI 可以成为灯光秀设计流程的一部分,但预先编排、路径规划、飞行控制和同步执行并不需要依赖生成式 AI。
Steven 最后提出的观点,在这个意义上是正确的。
从听懂解释到独立设计
Alex 表现出来的思考特点
仅根据本次对话,可以确认几个观察:
第一,Alex 能从现象提出机制假设。
他没有只说「无人机被电脑控制」,而是明确提到按照特定时间执行动作。这是一个有实际技术基础的推测。
第二,他倾向先从熟悉的软件概念寻找解释。
Hardcoding 和 AI 生成程序是他最先想到的工具。这说明他可以把熟悉的编程概念迁移到新问题,但是否理解轨迹规划、实时控制和数据驱动架构,还缺乏证据。
第三,他承认自己的知识边界。
Alex 多次表示不知道,也承认可能存在其他实现方式。这比在缺乏知识时坚持单一解释更好。
第四,他没有在这次讨论中独立构建完整的工程模型。
Steven 进一步追问之后,主要的设计流程最终由 Steven 提供,而非 Alex 自己推导出来。
但不能仅凭这次短暂对话推断 Alex 缺乏深入思考能力。此前是否接触过无人机、当时有多少思考时间,以及他听完后能否独立解释,都没有得到验证。
Steven 的教学方法
Steven 的有效之处,是没有停留在「你知道不知道」的知识检查,而是持续追问:
假设你就是工程师,你会怎样把它做出来?
他实际上在推动 Alex 建立一种工程思维:
从最终效果出发,反向寻找需要哪些模块、数据、算法及控制机制。
不过,Steven 在 Alex 几次表示不知道后,就给出了相当完整的方案。这样有利于传递新知识,却减少了 Alex 自己进一步分解问题的机会。
一个可以改进的方式,是先把问题缩小:
假设我们现在只有 10 架无人机,要它们从一条直线变成一个圆形。你认为电脑最少需要为每架无人机准备什么信息?
Alex 如果能先独立提出「目标位置」「时间」「灯光颜色」,再思考怎样从一个位置移动到另一个位置,就更容易逐步建立完整的技术模型。
随后才引入 3D 动画软件,会更有助于理解软件究竟替工程师自动化了哪些工作。
可以怎样验证 Alex 是否真正理解?
最有价值的不是问他是否明白 Steven 的解释,而是让他完成一个新的、简化的工程设计任务。
例如:
题目:现在有四架无人机,在空中排列成一个正方形。要求它们在五秒内变成一条直线,并让 LED 从蓝色渐变成红色。你会怎样设计这套系统?
不必要求他写实际飞控程序。只要求他独立解释目标点分配、移动路径、时间同步、颜色变化,以及避免碰撞的方法。
如果 Alex 能够说明这些内容,并解释实际位置偏离目标时系统怎样修正,就表示他已从复述 Steven 的解释,进步到能够应用工程模型。
把视觉效果还原为工程系统
这次讨论值得保留的,不只是 Steven 对无人机灯光秀技术的解释,还有父子双方采用的不同切入点。
Alex 的起点是程序与执行:预先设定时间、动作,再由无人机按计划运行,甚至可能利用 AI 生成程序。
Steven 则进一步引入设计工具与数据转换:先在 3D 软件内设计效果,再让专用软件把视觉动画转化为可执行的无人机轨迹和灯光指令。
从实际工程来看,完整答案是把两人的思路连接起来:
视觉设计决定要呈现什么;轨迹规划决定每架无人机怎样移动;预先编排决定何时执行;定位与反馈控制确保无人机尽量准确地执行;LED 控制让这些移动中的点形成观众看到的动态画面。
Steven 提出的 3D 动画思路得到实际技术资料的有力支持,Alex 的预设时间与动作假设也同样合理。最需要修正的是 ASCII 的技术含义,以及把 hardcoding 和软件自动生成轨迹视为对立的概念。
作为一次学习交流,这场讨论成功地把一个日常看到的壮观表演,转化为软件工程、计算几何、自动化控制和系统设计的问题。
下一步真正有价值的学习目标,是让 Alex 不仅能够听懂这套解释,还能够自己从一个简单的无人机编队需求出发,推导出实现它所必需的系统组件。
不止听懂一个解释。
试着推导一个系统。
读后感受
一个表情,也是一种交流。表情回应需在网站中使用。
补充 · 更正 · 不同意见
读者回应
欢迎直接回应整篇文章,也可以引用原句,说明你的不同看法。每条回应及回复都须经作者审核后才会公开。如需编辑,目的是让你的观点表达得更清楚、准确传达原意,而不是审查或压制不同意见。我们会尊重并保留你的立场;直接引述保留原话,编辑后的转述会另作标注。
也可以通过邮件联系我,请附上文章标题;相关原句可选填。