NASAのフレームワークで軌道上でコードを動かす方法
地球から数百km上空にあるデバイス用のソフトウェアを書いている姿を想像してみてください。リセットボタンを押すことも、歩いてデバッガを持っていくことも、ケーブルを抜き差しすることもできません。メモリ管理エラーや未処理の例外が発生すれば、高価な衛星はただの宇宙ゴミになります。NASAのジェット推進研究所(JPL)のエンジニアたちがF´(F Prime)を作成したのは、まさにこのような環境のためです。
このプロジェクトについて
F´は、フライトソフトウェア開発のためのコンポーネント指向フレームワークです。簡単に言えば、組込みシステムのためのアーキテクチャパターンとツールのセットです。NASAは火星のIngenuityヘリコプターを制御したコードなど、ミッションに使用しています。
このプロジェクトの主な特徴は、ある魔法のようなライブラリではなく、アプローチそのものです。すべてを制御するモノリシックなコードを書く代わりに、分離されたビルディングブロックからシステムを構築します。これは、テレメトリ収集モジュールの障害が宇宙船の姿勢制御システムをダウンさせないことを保証する必要がある場合に重要です。
開発の流れ
F´におけるプロセス全体は、型付けとコード生成を中心に展開されます。特別なモデリング言語(FPP)でコンポーネントとそのインターフェースを記述し、フレームワークが定型的な作業—メッセージキューの作成、スレッド管理、モジュールのリンク—を処理します。
明確なコンポーネント分離
システム内の各コンポーネントは自律的です。外部との通信は型付けされたポート経由でのみ行われます。これはマイクロサービスに似ていますが、単一のバイナリ内で厳格なリアルタイム要件を満たしています。システム全体のファームウェアを実行せずに、1つのセンサーやアルゴリズムを完全に分離してテストできます。
コード生成とC++
フレームワークはC++で書かれています。クリーンな言語得られるだけでなく、スレッド処理、キュー、ミューテックスなどの基本プリミティブを提供する抽象化レイヤーも同時に得られます。同時に、ボイラープレートの大部分は記述から自動的に生成されます。仮想メソッド内にビジネスロジックを実装するだけで済みます。
テストツール
宇宙はミスを許しません。そのためF´には強力なテストスタックが含まれています。ユニットテストツールと統合テストの機能が用意されています。パッケージにはGDS(Ground Data System)が含まれており、本質的にはノートPC上で動作するミニミッションコントロールセンターです。これを通じてデバイスにコマンドを送信し、リアルタイムでテレメトリを表示できます。
技術的な詳細
始めるには、Linux、macOS、またはWSLが有効なWindowsのみが必要です。依存関係には、ツールチェーン用のPython 3.10とC++コンパイラ(GCCまたはClang)が含まれます。
インストールは сучаснихツールの標準的な手順です:
pip install fprime-bootstrap
fprime-bootstrap project
これにより、ターゲットプラットフォーム用にビルドする準備ができたプロジェクト構造が得られます。興味深いことに、フレームワークはRaspberry Piでも得很好に動作します。これにより、NASAのエンジニアだけでなく、ロボティクス愛好家や小型衛星(CubeSats)製造者にもアクセス可能になります。
応用例
もちろん、毎日火星ローバーのソフトウェアを書いているわけではありません。しかし、高い信頼性が求められる場所ならどこでも、F´のアーキテクチャ原則は有用です:
- 産業用自動化。 工作機械を制御するコントローラの場合、予期しないセグメンテーションフォールトは機器損傷につながる可能性があります。
- ドローン。 クアッドコプターや自律型ロボットは、衛星と同じ問題に立ち向かいます:限られたリソース、リアルタイム要件、障害からの回復必要性。
- スマートホーム。 火災警報や漏水検知などの重要システムでは、コンポーネントアプローチが予測可能な動作を保証します。
試してみる価値はあるか
F´は初心者向けのプロジェクトではありません。軽量なPythonスクリプトに慣れている場合、参入障壁が高く感じるかもしれません。C++の原則を理解し、組込みシステムに精通し、ドキュメントを読む準備が必要です。
一方、これは実際の宇宙技術の"内部"を覗くまたとない機会です。このプロジェクトには優れたドキュメント、ステップバイステップの"Hello World"チュートリアル、GitHub Discussions上のアクティブなコミュニティがあります。通常のArduinoライブラリに縛られていると感じ、本当の意味で信頼性の高いシステムを構築する方法を学びたいなら、F´はプロフェッショナルな組込みソフトウェア開発への素晴らしい入口です。
もちろん、単純なLED点滅にはオーバースペックです。しかし、年にわたって自律モードで故障なく動作し続けるデバイスを作成する必要があるなら、NASAの経験は必ず役立ちます。少なくとも、ポートアーキテクチャとコンポーネントトポロジへのアプローチを研究する価値はあります—それはコード組織の看法を大幅に改变します。
関連プロジェクト