飞向火星
Out of this world... on to Mars
2021年6月10日
一句话判断
这不是技术分享,是 NASA JPL 工程师讲述如何用 Apple 技术控制火星车的故事——看完你会觉得你写的那个 App 其实没那么难。
这场 Session 讲了什么
这是一个非技术类的励志演讲,由 NASA 喷气推进实验室(JPL)的工程师分享他们如何使用 Apple 平台和技术来支持火星探索任务。Session 以 2021 年 2 月「毅力号」火星车成功着陆火星为背景,讲述了从任务规划到着陆控制再到火星表面操作的全过程。
JPL 团队展示了他们使用 Mac 和 Apple 开发工具构建的多个内部应用:用于可视化火星地形的 iPad App、用于远程操控火星车的控制界面、以及用于分析火星岩石样本的数据可视化工具。这些 App 利用了 ARKit 做火星地形的三维重建、Metal 做大规模地形数据的实时渲染、以及 Core ML 做岩石样本的自动分类。
演讲的核心信息是:技术本身不是目的,解决真实问题才是。火星车的每次操作都涉及数百个工程师的协作、数亿公里的通信延迟、以及不容有失的精度要求。在这种极端场景下,好的软件设计和可靠的工程实践不是「加分项」而是「必须项」。
值得深挖的点
极端环境下的软件可靠性要求。 火星和地球之间的通信延迟在 4 到 24 分钟之间(取决于两个行星的位置),这意味着你不能实时控制火星车——你发一个指令,要等 8 到 48 分钟才能收到反馈。在这种条件下,软件的自主决策能力和容错能力变得至关重要。JPL 团队分享了他们的设计哲学:每个操作都要考虑「如果通信断开会怎样」,每个状态机都要有安全的回退路径。这对地球上做 App 的开发者也有启发——你的 App 在离线时的行为是否可接受?
iPad 在专业领域的深度应用。 JPL 的工程师用 iPad 做火星地形的 AR 可视化——把火星车的相机数据重建为三维模型,然后用 ARKit 叠加到现实环境中。工程师可以「走在火星表面」来规划火星车的行驶路线。这个案例说明 iPad + Apple Pencil 不只是消费内容的生产力工具——在正确的人手中,它可以成为改变科学工作流的工具。
代码片段
// JPL 的火星地形可视化 App 使用的技术栈(示意)
// 非真实代码,展示所用技术
import ARKit
import Metal
import CoreML
// 1. ARKit 做地形叠加
// 将火星地形模型叠加到现实环境中
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal]
sceneView.session.run(configuration)
// 2. Metal 做大规模地形渲染
// 火星地形数据可能有数百万个顶点
// 需要用 bindless rendering 和 LOD 优化
// 3. Core ML 做岩石自动分类
// 用训练好的模型分析火星车拍摄的照片
let model = try RockClassifier(configuration: MLModelConfiguration())
let classification = try model.prediction(from: rockImageInput)
// 从 JPL 的工程实践中学到的设计原则
// 原则 1: 每个操作都要有安全的回退方案
func executeRoverCommand(_ command: RoverCommand) async throws {
// 保存当前状态(回退点)
let previousState = try await saveState()
do {
try await sendToMars(command)
} catch {
// 通信失败时恢复到安全状态
try await restoreState(previousState)
throw RoverError.communicationFailed
}
}
// 原则 2: 关键操作需要双重确认
func criticalOperation() {
// 在地球上按「确认」可能需要多个人签字
// 在 App 中意味着重要的操作需要用户明确确认
}
最佳实践
- 从 JPL 的极端场景反观自己的项目——如果你的 App 在断网时完全不工作,可能需要重新思考架构
- 考虑通信延迟对用户体验的影响——即使你的 App 只是在高铁上偶尔断网,优雅的离线处理也能提升体验
- 对于复杂的数据可视化场景,参考 JPL 的做法:先做三维重建,再用 AR 让用户直觉地理解数据
- 在团队中建立「假设会失败」的文化——每个功能上线前讨论「最坏情况是什么」,比事后补救成本低得多
还有什么值得关注
- NASA JPL 有开源的部分代码库在 GitHub 上,包括一些 Mars 车数据处理的 Python 工具
- 毅力号携带的 Ingenuity 直升机使用了 Linux 系统,但地面控制大量使用 macOS
- Apple 和 NASA 有长期的合作关系,JPL 是 Apple 企业设备管理的大客户之一