Mars Curiosity Roverのソフトウェアは何に組み込まれていますか?


544

火星好奇心の探査車が正常に上陸した、とプロモーションビデオ「恐怖の7分」の一つは、コード50万行あることについてが自慢します。それは複雑な問題であり、間違いありません。しかし、それは多くのコードであり、確かにその背後にはかなり大きなプログラミング努力がありました。このプロジェクトについて誰か知っていますか?ある種の埋め込みCであるとしか想像できません。


91
プロジェクトに関係する言語が1つだけであると想定する理由。
リグ

5
良い点は、確かに、それに関連する幅広い技術を持っていることでしょう。私はそのすべてについてもっと知りたいです:)
InfinitiesLoop

3
どの部分?宇宙船?ローバー?楽器?地上システム?他のコメントが示すように、おそらく異なるコンポーネントで使用されるいくつかの言語があります。時間が重要なコンポーネントの一部にアセンブラが使用されたことは問題ではありません。
グリーンマット

67
正直に言うと、500klocの数字を見たとき、「ただ?」Haskellであれば現実的だったかもしれませんが、以前のプロジェクトとその低レベル言語について少し読んだので、これはあまりにも低すぎるように思えました。以下に引用する2.5mio loc Cコードは、より信頼できるものです。
フィリップカメナルスキー

19
「どの言語で?」というより興味深い質問 である「どのようなプロセスで?」。それが違いを生むプロセスであり、NASAは何十年もの間厳密なものを使用しています。
-dmckee

回答:


506

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のコンピューターとコードベースの機能についてします。


48
JPL C言語コーディング標準。特に、「グラウンドソフトウェア」と呼ばれる組み込み環境ではなく、組み込み環境向けです。 lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
パトリックヒューズ

80
@Dynamic:NASAがリスクを冒さないようにすることは非常に重要な任務です。アセンブリを書く人間はより多くの間違いを犯します、それは測定された事実です。
–MSalters

22
コンパイルされたCコードはマシンコードであり、アセンブリ言語はマシンコードです。違いはわかりません。理解しても、パフォーマンスに大きな違いはありません。
ラムハウンド

23
NASAはコードに細心の注意を払っています。すべて(すべて)が最初に仕様で行われ、繰り返しレビュー、チェック、および洗練されます。ライフコードストリームに配置されると、ほとんどが仕様の参照のカットアンドペーストになります。テストスクリプトには、少なくともコードと同じくらい注意が払われており、「派手な」または巧妙なコードトリックは、必要でない限り許可されていません。
ステファン

99
@Amarghosh:ええ、宇宙空間などの高放射線環境を通過するときに携帯電話がどれだけうまく機能するかを確認してください:)
whatsisname

175

コードは、MER(Spirit and Opportunity)のコードに基づいています。MER は、最初の着陸船MPF(Sojourner)に基づいていました。BAEVxWorksオペレーティングシステムで製造された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のリーダーが誰であるかによって大きく異なると聞きました。


8
これはウインドリバー、VxWorksのを行い、契約上のいくつかの光を当てることがありますwindriver.com/news/press/pr.html?ID=10901 私はNASAが仕事のように多くのバグを見つけることである人々のチームを持っていることを読みました彼らは、別のチームによって書かれた制御システムのコードでできます。バグ発見チームは、発見したバグに対して報酬を与えられ、不可解なバグを見つけるのに非常に優れています。バグが見つかった場合、5Yタイプの分析が行われ、ソフトウェア開発プロセスをどのように改善して、将来同様のバグの可能性を排除できるかが調べられます。非常に骨の折れる高価なプロセス。
ジムレイデン

15
@JimRadenプローブの障害の直接コストが数億ドルから数十億ドルになり、QAでの極端なパラノイアをやり直すために数年(もしあれば)正当化されます。何十年/何百人もの卒業生が何年も仕事を失い、博士課程の仕事を再開する必要があり、テニュアトラックの研究を提供するためにそこからデータを頼っていたさまざまな新しい教授の形での間接的な費用は別の大きなヒットですが、はるかに難しいですNASA予算の明細よりも定量化する。
ダン・ニーリー

1
Cの自動生成元は何ですか?Simulinkではないことを教えてください。:-)
ウィリアムペイン

2
@William Payne基調講演では、その一部はXML記述からPythonプログラムによって生成された自動生成されたプロトコルエンコード/デコードルーチン(地球との通信用)であると述べています。
番号

1
ICDから自動的にコードを生成するのはとてもクールです。私はこのアイデアが好きです!ただし、XMLではなくYAMLを使用していました。:-)
ウィリアムペイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.