3.2 dora run 跑起来
编译完成后,我们要运行一条真正的 DORA 数据流——两个节点(控制器 + 小飞机)通过 dataflow.yml 连接起来,在你面前展示"数据流动"的效果。
学习目标
学完本节,你将能够:
- 用
dora run运行一条数据流 - 通过 GUI 按钮控制小飞机飞行
- 理解数据流运行时的命令行输出
第一步:确认文件位置
确保你在 aviation/ 目录下,且已成功编译:
如果缺少二进制,回退到 3.1 节 重新编译。
第二步:运行数据流
在 aviation/ 目录下执行:
你会看到类似如下的输出:
然后两个窗口会同时弹出:
- 小飞机窗口(左侧):标题为"航空模拟器",显示一架小飞机,飞行时留下白色轨迹线
- 控制器窗口(右侧):标题为"控制器",包含四个方向按钮(↑ ← → ↓)

上图是运行时的界面:左侧为小飞机的飞行可视化(含轨迹),右侧为控制面板,可通过鼠标点击按钮或键盘方向键控制。
- 确认你有图形显示环境(非纯 SSH 连接)。
- 如果在 macOS 上第一次运行 Bevy,可能会弹出"允许网络连接"的提示,点"允许"即可。
- 如果报错关于 Vulkan/Metal 驱动,尝试更新显卡驱动或换一台有桌面环境的机器。也可以回退到独立键盘版(
cargo run)体验。 - 如果真的没有图形环境,可以跳到 3.3 节 继续学习,YAML 和概念部分不依赖图形窗口。
第三步:控制小飞机飞行
在控制器窗口上点击按钮,或在控制器窗口激活时按键盘:
试着:
- 点击 ↑ 让小飞机飞一段
- 不松开时再按 ← 或 →,观察它会转弯
- 松开所有按钮,小飞机会停下来(因为没有
cmd指令了) - 飞够后点"清除轨迹"擦掉路径
看到了吗?你点击按钮 → 控制器发出指令 → 小飞机收到指令然后运动——这就是"数据在流动"最直观的样子!你按一次按键,数据就在两个独立程序之间走了一圈。
观察终端输出
运行期间,终端会持续输出日志信息,显示 cmd 和 pose 数据的变化:
这些日志会在 3.4 节 详细解释。
停止数据流
在终端中按 Ctrl+C 即可停止数据流,两个窗口会同时关闭。
动手练习
先 Ctrl+C 停止数据流。然后运行独立键盘版 cargo run,用键盘控制飞机飞行。再切回 DORA 版 dora run dataflow.yml。你觉得两种方式有什么区别?
参考答案
区别在于控制逻辑和数据流的解耦程度:
- 独立键盘版:控制逻辑和显示逻辑在同一个进程里,代码耦合。
- DORA 版:控制器和飞机是两个独立进程,通过 DORA 数据流通信。你可以想象:如果把控制器换成手机 App、小飞机换成真实无人机,中间不需要改任何代码——这就是数据流架构的解耦威力。
常见问题 FAQ
dora run 提示找不到二进制
target/release/aviation-controller 不是有效的可执行文件。确认:
- 编译时加了
--features dora --bins(不是单纯cargo build)。 - 你在
aviation/目录下执行的dora run(dataflow.yml里path是相对路径)。
可能 aviation-dora 未正确编译或启动失败。检查终端输出中是否有 [daemon] - Starting node "aviation" 之后的报错信息。
检查是否先点击了控制器窗口让其获得焦点,再按键盘。如果焦点在小飞机窗口上,键盘事件会被小飞机窗口捕获而非控制器。
小结
dora run dataflow.yml启动数据流,两个窗口弹出。- 通过控制器窗口的按钮或键盘,让小飞机动起来。
- 停止用
Ctrl+C,数据流会优雅地关闭所有节点。
现在你已经亲手跑通了一条 DORA 数据流。下一节,我们来揭开 dataflow.yml 的面纱,看看控制指令到底是怎么传给小飞机的。