火星好奇心の探査車が正常に上陸した、とプロモーションビデオ「恐怖の7分」の一つは、コード50万行あることについてが自慢します。それは複雑な問題であり、間違いありません。しかし、それは多くのコードであり、確かにその背後にはかなり大きなプログラミング努力がありました。このプロジェクトについて誰か知っていますか?ある種の埋め込みCであるとしか想像できません。
火星好奇心の探査車が正常に上陸した、とプロモーションビデオ「恐怖の7分」の一つは、コード50万行あることについてが自慢します。それは複雑な問題であり、間違いありません。しかし、それは多くのコードであり、確かにその背後にはかなり大きなプログラミング努力がありました。このプロジェクトについて誰か知っていますか?ある種の埋め込みCであるとしか想像できません。
回答:
BAEが製造したRAD750プロセッサーで250万行のCを実行しています。JPLは少しより多くの情報を持っているが、私は詳細の多くは公表されていない疑いがあるん。テストスクリプトはPythonで作成されたようです。
基盤となるオペレーティングシステムは、ウインドリバーの VxWorks RTOSです。問題のRTOSは、C、C ++、AdaまたはJavaでプログラムできます。ただし、CとC ++のみがOSの標準であり、AdaとJavaは拡張機能でサポートされています。ウインドリバーは、VxWorksの方法と理由について非常に多くの詳細を提供しています。
基礎となるチップセットは、ほとんどとてつもなく堅牢です。その仕様は最初はそれほど多くないように思えるかもしれませんが、15年ごとに「ブルースクリーン」を1つだけ持つことが許可されています。心に留めておいてください、これは何度も人間を殺す放射線による衝撃を受けています。宇宙では、速度よりも堅牢性が優先されます。もちろん、そのような堅牢性にはコストがかかります。この場合、200,000ドルから500,000ドルのクールです。
ErlangプログラマーがCuriosityのコンピューターとコードベースの機能について話します。
コードは、MER(Spirit and Opportunity)のコードに基づいています。MER は、最初の着陸船MPF(Sojourner)に基づいていました。BAEとVxWorksオペレーティングシステムで製造されたRA50プロセッサで実行される350万行のC(その多くは自動生成)です。100万行以上が手作業でコーディングされました。
コードは150の個別のモジュールとして実装され、それぞれが異なる機能を実行します。高度に結合されたモジュールは、含まれるモジュールを抽象化し、「特定の機能、アクティビティ、または動作のいずれかを指定する」コンポーネントに編成されます。これらのコンポーネントはさらにレイヤーに編成され、「10個以下のトップレベルコンポーネント」があります。
出典:基調講演ベンジャミンCichyで宇宙船フライトソフトウェア(FSW-10)2010ワークショップ、スライド、オーディオ、およびビデオは(ミッションの概要、スライド80のアーキテクチャの議論を開始します)。
Hacker Newsの誰かが「ほとんどのCコードが自動生成されることを意味するものがわからない。何から?」と尋ねました。
100%確信はありませんが、おそらくその年または別の年に、自動生成プロセスを説明する別のプレゼンテーションがあります。私はそれがFSW-11会議で一般的に一般的なトピックだったことを知っています。
Simulinkは可能性です。これは、機械エンジニア、したがってほとんどのナビゲーションおよび制御エンジニアの間で人気のあるMATLABコンポーネントであり、コーディングしているとは思わずに「コーディング」して物事をシミュレートすることができます。
モデルベースのプログラミングは、業界が徐々に認識していることは間違いありませんが、JPLでそれがどれだけ普及しているか、またはプロジェクトの開始時にそれを使用することを選択したかどうかはわかりません。
3番目の可能性が最も高いのは、通信コードです。すべての宇宙システムでは、地上ソフトウェアから飛行ソフトウェアにコマンドを送信し、飛行ソフトウェアからテレメトリーを受信し、地上ソフトウェアで処理する必要があります。各コマンド/テレメトリパケットは異種のデータ構造であり、両側がまったく同じパケット定義から動作し、パケットをフォーマットして、一方が正しくフォーマットされ、他方が解析されるようにする必要があります。これには、データ型、サイズ、エンディアンなど、多くのことを正しく行うことが含まれます(後者は通常グローバルなものですが、異なるエンディアンを持つ複数のプロセッサを搭載することもできます)。
しかし、それはほんの表面です。ロギング、コマンド/テレメトリ検証、制限チェック、エラー処理などを処理するには、両側に多くの反復コードが必要です。そして、より洗練されたことができます。ハードウェアレジスタ値を設定するコマンドがあり、その値が特定のパケットでテレメトリーで返送されたとします。このテレメトリポイントを監視する地上ソフトウェアを生成して、このレジスタ値が設定されたときに、最終的にテレメトリが変更を反映するように変更できます。そしてもちろん、一部のテレメトリポイントは他のテレメトリポイントよりも重要であり(たとえば、メインバスカレント)、複数のパケットでダウンするように指定されています。
それだけで、(私の意見では)静的テキストファイルのコレクション(XML、CSV、またはDSL / what-have-you)を1つ書いて、Perl / Pythonスクリプトで実行するのがはるかに簡単です。コード!
私はJPLで働いていないので、ビデオにはない詳細を提供することはできませんが、1つの例外があります。自動生成されたCコードはPythonスクリプトによって作成され、プロジェクトの自動コーディングの量は、FSWのリーダーが誰であるかによって大きく異なると聞きました。