WWDC Quick Look 💓 By SwiftGGTeam
Out of this world... on to Mars

Out of this world... on to Mars

元の動画を見る

ハイライト

NASA エンジニアの Tiera Fletcher は、Space Launch System の設計、テスト、ミッション計画を使用して、複雑なエンジニアリングには設計、データ、製造検証、および複数のチームを同じ製品ライフサイクルに組み込む必要があることを説明しました。

主要内容

若い技術者がロケットの設計に参加したい場合、実際の困難がプロモーションビデオに登場することはほとんどありません。

図面は最初のステップにすぎません。コンピュータ支援設計 (Computer-Aided Design) ソフトウェアで部品を形成した後、部品を製造、組み立て、輸送、テストしてから、実際の飛行ミッションに接続する必要があります。リンクの位置にずれがあると、ロケット全体に影響を及ぼします。

Tiera Fletcher は、22 歳で NASA の Space Launch System プログラムに参加しました。彼女は構造設計と解析から始め、ロケット コンポーネントの設計と構造の完全性の検証を担当しました。その後、彼女はニューオーリンズのミショー組立施設に行き、これらの部品の取り付けに参加し、技術者と組立結果を確認しました。

この講演では Apple API はリリースされません。これは、別の種類のデザインの問題に関するものです。製品の高さが 322 フィートで、推力が 800 万ポンドを超える場合、デザインは画面上で止まることはできません。設計は製造サイトに入り、テスト データを受け入れ、構成管理に戻り、次のタスクを実行する必要があります。

宇宙発射システムの目的も明確です。まずアルテミス 1 号の無人飛行をサポートし、データを収集します。その後、アルテミス 2 は 4 人の宇宙飛行士を月面環境に連れ戻すことができます。そして最後に、アルテミス 3 とその後の深宇宙ミッションの準備をします。

詳細

趣味からエンジニアリングへ: 紙のデザインをモーション システムに変える

01:30

ティエラは 11 歳でロボット工学プログラムに参加しました。彼女はまず構造物を設計して構築し、次に構造物が動くようにプログラムします。彼女はスピーチの中で、そのプロセスが紙から製品、そして運動に移行するものであると説明しました。

このプロセスは最小状態モデルで表すのに適しています。セッション外でエンジニアリング事実を発明するのではなく、逐語的なドラフトの 3 つの段階をアプリが表示できるデータに整理するだけです。

struct LearningStep: Identifiable {
    let id: Int
    let title: String
    let source: String
}

let roboticsPath = [
    LearningStep(id: 1, title: "Paper", source: "design the structure"),
    LearningStep(id: 2, title: "Product", source: "build the structure"),
    LearningStep(id: 3, title: "Movement", source: "program the structure and make it move")
]

for step in roboticsPath {
    print("\(step.id). \(step.title): \(step.source)")
}

キーポイント:

  • LearningStep学習パスを実証可能なステップに分割する
  • id各ステージにリストやタイムラインに適した安定したアイデンティティを与える
  • title講演では論文・製品・運動の3つの成果に対応
  • source事実に基づく情報源を保持し、物語を空虚なスローガンに書き換えないようにする
  • forタイムライン データのデバッグに適した、パスを順番に出力するループ

この経験が、彼女のその後のエンジニアリングの役割を説明しています。大規模システムは、最初に設計し、次に構築し、次に実際の動作を検証するという同じ道をたどります。

Saturn V: 航空宇宙工学は長い間ソフトウェア自動化に依存してきました

03:00

話はサターン V から始まります。サターン V は 1969 年から 1973 年までアポロ計画に使用され、13 回の打ち上げを完了し、24 人を宇宙に運び、重量は 600 万ポンドを超え、高さは自由の女神よりも高かったです。

ティエラ氏は、サターン V は大気圏を通過するために推力だけに頼っているわけではないと強調した。それは、打ち上げロケットデジタルコンピュータを含む、当時の最先端のアビオニクスによって制御されていました。船上コンピューティングが増加するにつれて、地上コンピューティングも増加し、手動プロセスが自動化され始めました。

struct RocketProgram {
    let name: String
    let launches: Int
    let peopleSentToSpace: Int
    let hasDigitalComputer: Bool
}

let saturnV = RocketProgram(
    name: "Saturn V",
    launches: 13,
    peopleSentToSpace: 24,
    hasDigitalComputer: true
)

if saturnV.hasDigitalComputer {
    print("\(saturnV.name) used onboard computing to support launch control.")
}

キーポイント:

  • RocketProgram草稿に記載されている事実フィールドのみをそのまま記録します
  • launchesスピーチの 13 回の発射を使用する
  • peopleSentToSpaceスピーチから24人を使用
  • hasDigitalComputerロケット用デジタルコンピュータに対応
  • if判断はコントロール能力とアウトプットのコピーライティングを結びつける

これは、開発者に直接的なインスピレーションを与えます。複雑なシステムの重要な転換点は、多くの場合、データ収集とプロセスの自動化から得られます。これはロケットにも当てはまり、ソフトウェア製品のリリース、テスト、ロールバックのプロセスにも同じことが当てはまります。

SLS: 構造設計は、設計、製造、設置、構成管理をカバーする必要があります

06:22

宇宙発射システムプロジェクトにおけるティエラの立場の変化はその代表的なものである。

彼女は構造設計および解析エンジニアとしてスタートし、ロケットのコンポーネントを設計し、その構造的完全性を検証しました。その後、彼女はエンジンセクションのタスクリーダーとなり、ミショー組立施設でコンポーネントを取り付け、組立が正しいことを技術者に確認する責任を負いました。その後、彼女は構成管理および製品統合エンジニアとして働き、エンジニアリング設計が実際の設置と一致していることを確認しました。

enum EngineeringRole: String {
    case structuralDesignAndAnalysis = "design parts and verify structural integrity"
    case engineSectionTaskLead = "lead installation and verify assemblies"
    case configurationManagement = "align engineering designs with installations"
}

let slsRoles: [EngineeringRole] = [
    .structuralDesignAndAnalysis,
    .engineSectionTaskLead,
    .configurationManagement
]

let responsibilities = slsRoles.map(\.rawValue)
print(responsibilities.joined(separator: " -> "))

キーポイント:

  • EngineeringRole列挙を使用して位置を表し、責任文字列がコード内に散在するのを防ぎます。
  • structuralDesignAndAnalysis設計コンポーネントに対応し、構造の完全性を検証します
  • engineSectionTaskLead対応する取り付けコンポーネントと検証済みのアセンブリ
  • configurationManagement対応する設計と設置の調整
  • map(\.rawValue)列挙型を表示可能な責任テキストに変換する
  • joined(separator:)ジョブパスを製品ライフサイクルにリンクする

この体験のポイントは、ループを閉じることです。設計文書、製造現場、組立結果、構成ステータスを相互に検証する必要があります。アプリ チームの場合、要件、設計草案、実装、テスト、オンライン構成を追跡可能なリンクに入れることもできます。

SLS の物理学: コンポーネント、推力、およびグリーン ラン テスト

08:33

スペース・ローンチ・システムの高さは322フィートです。これは、4 つの RS-25 エンジン、コア ステージ、上部ステージ (暫定極低温推進ステージとも呼ばれる)、両側の固体ロケット ブースター、および上部のオリオン乗組員カプセルで構成されています。

これは、サターン V より 15% 多い 800 万ポンド以上の推力を生成します。コアレベルは最近グリーンランテストを完了しました。このテストでは、エンジンが 1 つのユニットとして同時に点火され、複数のテスト ケースが 8 ~ 9 分で完了します。

struct LaunchVehicle {
    let name: String
    let heightInFeet: Int
    let thrustInPounds: Int
    let components: [String]
}

let spaceLaunchSystem = LaunchVehicle(
    name: "Space Launch System",
    heightInFeet: 322,
    thrustInPounds: 8_000_000,
    components: [
        "four RS-25 engines",
        "core stage",
        "interim cryogenic propulsion stage",
        "solid rocket boosters",
        "Orion crew capsule"
    ]
)

print("\(spaceLaunchSystem.name): \(spaceLaunchSystem.components.count) major component groups")

キーポイント:

  • LaunchVehicleロケットに関する定量化可能な事実を同じ構造に組み込む
  • heightInFeetスピーチでは 322 フィートを使用してください。
  • thrustInPounds演説で800万ポンド以上を使用、これが下限記録です
  • components主要コンポーネントの逐語的なリストを保存する
  • components.countシステムの複雑さを UI に表示するために使用できます。

09:17

グリーンランテストの後、コアステージをニューオーリンズからケネディ宇宙センターに輸送する必要があります。数百万ポンドの力に耐えることができ、輸送中の構造的完全性を維持します。

struct TestCase {
    let name: String
    let durationMinutes: ClosedRange<Int>
    let purpose: String
}

let greenRun = TestCase(
    name: "Green Run testing",
    durationMinutes: 8...9,
    purpose: "fire all engines as one whole structure"
)

print("\(greenRun.name): \(greenRun.durationMinutes.lowerBound)-\(greenRun.durationMinutes.upperBound) minutes")

キーポイント:

  • TestCaseテスト名、期間、目的を個別に記録します。
  • durationMinutes使用ClosedRange<Int>8~9分を意味します
  • purpose対応するエンジンは構造全体として同時に点火されます
  • 出力テキストはテスト タイムライン インターフェイスに直接入力できます

このタイプのデータ構造は、工学科学普及アプリに適しています。ユーザーがタイムラインをドラッグすると、設計、テスト、輸送、組み立ての関係を確認できます。

アルテミス: 最初に無人で検証し、その後有人で月環境に帰還

10:55

Tiera は Artemis プログラムを使用して、SLS ミッション パスを説明します。

Artemis 1 は 2021 年のドローンです。SLS は初期飛行デモンストレーション構造として Orion と連携しています。オリオン座は月から4万マイル、地表から約4万マイルの距離まで飛行します。総走行距離は約140万マイル。再突入時、オリオンは時速約 24,500 マイルで大気圏に突入し、乗務員室の温度は華氏約 5,000 度に達します。

struct ArtemisMission {
    let name: String
    let crewed: Bool
    let year: Int
    let objective: String
}

let artemisMissions = [
    ArtemisMission(
        name: "Artemis 1",
        crewed: false,
        year: 2021,
        objective: "collect data before astronauts come on board"
    ),
    ArtemisMission(
        name: "Artemis 2",
        crewed: true,
        year: 2022,
        objective: "carry four astronauts back to the lunar environment"
    ),
    ArtemisMission(
        name: "Artemis 3",
        crewed: true,
        year: 2024,
        objective: "carry astronauts back into the space environment"
    )
]

let crewedMissions = artemisMissions.filter { $0.crewed }
print(crewedMissions.map(\.name).joined(separator: ", "))

キーポイント:

  • ArtemisMissionミッション年、有人かどうか、有人かどうかと目標を分ける
  • Artemis 1crewedのためにfalse、無人飛行に対応
  • Artemis 24人の宇宙飛行士が月面環境に帰還する様子を記録する
  • Artemis 3宇宙環境に再び入る宇宙飛行士を記録する
  • filter { $0.crewed }有人ミッションを選択してください
  • map(\.name)リストまたはラベル表示用のタスク名を抽出します

12:28

アルテミス 2 は 10 日間のミッションに参加します。オリオン座は月に向かう前に地球の周りを 2 周します。一時的な極低温推進ステージがオリオンを地球高軌道に推進し、その後オリオンは推進ステージから分離され、宇宙飛行士が性能と運用能力を検証します。

let artemis2Sequence = [
    "reach an initial insertion orbit",
    "complete the first orbit",
    "interim cryogenic propulsion stage propels Orion to high-Earth orbit",
    "Orion separates from the interim cryogenic propulsion stage",
    "astronauts verify performance and operational capabilities"
]

for (index, event) in artemis2Sequence.enumerated() {
    print("Step \(index + 1): \(event)")
}

キーポイント:

  • artemis2Sequenceプレゼンテーション内のタスクの順序を維持する
  • 配列の順序はタスクの処理順序に対応します
  • enumerated()ステップ番号を生成する
  • index + 1ステップ 1 からインターフェイスを表示させます
  • event直接表示できるタスクイベントです

開発者にとってこの部分で最も役立つのは、タスクが細分化されている方法です。複雑な目標は、まず無人検証、有人検証、機能拡張の 3 つのステップに分類されます。各ステップでは、次のステップに進む前にデータが生成されます。

多様なチーム: イノベーションには参加者のソースを拡大する必要があります

13:48

ティエラはメイ・ジェミソンについて言及した。初めての黒人女性宇宙飛行士を見て初めて、自分が航空宇宙エンジニアになることをより容易に想像できるようになりました。彼女はまた、自分がチームの最年少、唯一の女性、または唯一のアフリカ系アメリカ人のメンバーだったため、会議で発言するのがどれほど怖かったかを語った。

彼女と彼女の夫は、学生支援、航空宇宙工学教育、メンターサポートを行うためにフレッチャーズとともに Rocket を設立しました。彼女はイノベーションの主要な要素を情熱、データ、そして心の多様性と要約しています。

let innovationInputs = ["passion", "data", "diversity of mind"]

func checklist(from inputs: [String]) -> [String] {
    inputs.map { "Include \($0) in the product discussion" }
}

print(checklist(from: innovationInputs).joined(separator: "\n"))

キーポイント:

  • innovationInputsスピーチの最後に提示された 3 つのキーワードを使用します。
  • checklist(from:)キーワードをチームチェック項目に変換
  • map入力ごとにディスカッションリマインダーを生成する
  • 出力結果は、チームの振り返り、プロジェクトのキックオフ、または設計レビューのテンプレートに入力できます。

ソフトウェア チームにとって、これは製品プロセスの一部です。さまざまな背景を持つ人は、さまざまなユーザーにとって実際の障壁を特定する可能性が高くなります。インクルージョンがプロセスに組み込まれると、製品の問題が早期に明らかになります。

重要ポイント

  1. やるべきこと: 宇宙ミッションのタイムライン アプリを作成する
  • 実行する価値がある理由: このセッションは、サターン V、ボイジャー、オシリス レックス、ニュー ホライズンズ、ISS、パーサヴィアランス、アルテミスに関する継続的な事実の手がかりを提供します。
  • 開始方法: 最初に使用しますstruct MissionSwiftUI を使用したモデル名、年、目標、および主要な数値ListまたはTimelineViewタスクシーケンスをデモンストレーションします。
  1. やるべきこと: 大規模な製品ライフサイクル ダッシュボードを作成します
  • やる価値がある理由: Tiera のポジションは、設計、構造検証、設置、組立確認、構成管理をカバーしており、まさにエンドツーエンドのリンクです。
  • 開始方法: を使用して、要件、設計、実装、テスト、およびリリース構成を統合状態モデルに構築します。enumプレゼンテーション フェーズ。変更レコードをローカル JSON に保存します。
  1. やるべきこと: Green Run テストの説明を作成する
  • 実行する価値がある理由: 複数のテスト ケースを 8 ~ 9 分で実行します。これは、インタラクティブな視覚化に適した高密度テスト プロセスです。
  • 開始方法: 配列を使用してテスト イベント、時間間隔、目的を記録し、説明テキストを各イベントにバインドし、プログレス バーを使用してテストの進行をシミュレートします。
  1. やるべきこと: Artemis タスク シミュレーション学習ツールを作成する
  • 実行する価値がある理由: Artemis 1、2、および 3 のミッション目標は明確であり、段階的な学習パスに適しています。
  • 開始方法: を使用しますArtemisMission有人かどうか、目標、主要な走行距離、ミッションごとに無人フェーズと有人フェーズをフィルタリングして、年間を保存します。
  1. やるべきこと: チーム参加チェックリストを作成する
  • 実行する価値がある理由: このスピーチはイノベーションを情熱、データ、考え方の多様性に分解しており、チームのレビュー活動に変えるのに適しています。
  • 開始方法: 固定テンプレートを使用して、講演機会、ユーザー サンプル ソース、データ ベース、意思決定記録などの会議前のチェック項目を生成します。

関連セッション

コメント

GitHub Issues · utterances