トップページへ ›

トップページ›TECH WATCH›スピリットの旅路とSol 18の異常

宇宙マイコン物語 · SPIRIT (MER-A)

火星でファイルがあふれた日
スピリットの旅とSol 18の異常

2004年1月4日、NASAの火星ローバー「スピリット」はエアバッグに包まれてグセフ・クレーターに弾み降りました。頭脳は32ビットのRAD6000とVxWorks、そしてデータをためる256MBのフラッシュメモリ。着陸から18日目、そのスピリットが突然、地球と話せなくなり、1日に何十回もリセットをくり返すようになります。原因は、フラッシュにファイルが多すぎたこと。7年前のマーズ・パスファインダーに続く、火星のコンピュータを地上から立ち直らせた2つ目の物語です。

打ち上げ 2003-06-10 着陸 2004-01-04 飛行 約4億8700万km・207日 異常 Sol 18 → Sol 33に再開

1打ち上げと7か月の旅

LAUNCH & CRUISE

スピリット(Mars Exploration Rover A、MER-A)は2003年6月10日 17時58分47秒(世界時、日本時間 6月11日 2時58分)、米国フロリダ州のケープカナベラル空軍基地17A発射台から、デルタII 7925ロケットで打ち上げられました。双子のオポチュニティ(MER-B)は約2週間後の7月8日(世界時)に続きます。打ち上げ約36分後にインド洋の上空で3段目から離れ、約50分後にはオーストラリアのキャンベラの深宇宙通信局が最初の電波を受けました。

打ち上げのときの重さは1,062kg(NASAの打ち上げ前の資料)。巡航段、熱シールド、背面カバーとパラシュートに包まれた着陸機、そして着陸機の中に折りたたまれた重さ174kgのローバーです。マーズ・パスファインダーのソジャーナ(10.6kg)の約16倍の重さのローバーを、同じようにエアバッグで降ろす計画でした。

地球を離れたあとは、太陽のまわりを半周弱回って火星に追いつく航路です。7か月の間に4回、小さな噴射で軌道を修正しました(TCM)。5回目と6回目も用意していましたが、狙いが十分に合っていたので行っていません。

地球から火星への航路

HELIOCENTRIC · ECLIPTIC
—
—
黄道面に投影 · 航路はJPLの再構成軌道(JPL Horizons)
軌道修正日時(UTC)速度の変化メモ
TCM-12003-06-20 17:00秒速 16.46m打ち上げ10日後。いちばん大きな修正
TCM-22003-08-01 18:00秒速 6.01m打ち上げ52日後
TCM-32003-11-14 18:30秒速 0.577m突入の約50日前。この修正のあと、火星に当たる軌道に乗る
TCM-42003-12-27 02:00秒速 0.025m突入8日前。横方向だけの小さな修正
TCM-5・6——突入2日前と6時間前に予定していたが、行わなかった
ROUTE

航路はすべてJPLの再構成

JPL Horizonsの「Spirit」には、3段目から離れた直後(6月10日 18時31分)から着陸までの、追跡データにもとづく再構成軌道が入っています。マーズ・パスファインダーの記事では最初の2か月を計算で補いましたが、スピリットは全部がそのまま使えました。

CHECK

計算の確かめ

航路の長さを足し合わせると約4億8700万km(NASAの打ち上げ前の資料は「約5億km」)。突入のときの速さは、火星の地面に対して秒速5.4kmで、打ち上げ前の資料の「秒速約5.4km」と合います。

LIGHT TIME

電波で9分29秒

着陸の日、地球と火星の距離は約1億7050万km。探査機の時刻で4時25分32秒の着地は、電波が9分29秒かけて届き、地球では4時35分(世界時)に知らされました。JPLの発表「米国太平洋時間 1月3日 午後8時35分」と合います。

2グセフ・クレーターへ

ENTRY, DESCENT & LANDING

着陸の手順は、マーズ・パスファインダーとほぼ同じです。熱シールドで減速し、パラシュートを開き、ひもで着陸機を吊り下げ、レーダーで地面を測り、エアバッグをふくらませ、逆噴射ロケットで止まり、ひもを切って落ちる。新しく加わったのは、降りながら地面を撮って横に流される速さを測るカメラ(DIMES)と、横向きに噴くロケット(TIRS)です。

下の図は、JPLが公開している突入から着地までの再構成軌道(10秒ごと)から、高さと速さを描いたものです。

着陸の6分を再生

ANIMATION · JPL HORIZONS

高さ300mまではJPLの再構成軌道(10秒ごと)の高さと速さで、下のグラフにも同じ時刻の線が出ます。最後の300mは公表の高さ(エアバッグ約280m、逆噴射約100m、ひもを切ったのは8.5m)と火星の重力から作った模式で、そこだけ時刻が数秒ずれます。28回・約300m・57秒で止まったことは発表どおりですが、1回ごとの弾みの高さ(最初は予定の「最大15m」)は模式です。大気圏の上のほうは速く、最後の10秒はゆっくり再生します。

高さと速さ(突入から着地まで)

JPL HORIZONS · 10 S

高さは着陸地点を0とした値、速さは火星の地面(自転している)に対する値です。10秒ごとの点を直線でつないでいるので、パラシュートを開く瞬間などの細かい動きは見えません。逆噴射とエアバッグの弾みは、この軌道には入っていません。

予定より低かったパラシュート

着陸の再現では、火星の反対側で起きていた砂嵐の影響で大気の密度が予想と違い、パラシュートが開いたのは予定より約1.6km低い所だったと説明されています。パラシュートで降りる速さも時速約245km(秒速約68m)と、予想より遅めでした。上の図の最後の区間の速さ(秒速約70m)とも合います。突風で横に流され、横向きのロケットで打ち消したうえで、ひもを切ったのは予定より3m以上低い約8.5mでした。

エアバッグに包まれた着陸機は28回弾んで、300m近く転がって止まりました。探査機の時刻で4時25分32秒(世界時)、地球で知らされたのは4時35分。止まった場所は、のちにスペースシャトル「コロンビア」の7人の宇宙飛行士にちなんでコロンビア・メモリアル・ステーションと名付けられました(南緯14.57°・東経175.47°)。着陸地点の時刻では午後2時ごろ、昼の着陸です。

1月15日 8時41分(世界時)、スピリットは78秒かけて3m進み、着陸機から火星の地面へ降りました。JPLの所長Charles Elachiの言葉は「6つの車輪が土の上にある」。ここから先、着陸機は動かず、ローバーだけが走ります。

真上から見たように合成した、地面に降りたスピリットと、右に空になった着陸機
着陸機から降りたスピリット。ローバーの航法カメラの画像を、真上から見たように合成したもの。中央がスピリットの太陽電池パネル、右が空になった着陸機(コロンビア・メモリアル・ステーション)写真: NASA/JPL(PIA05091、2004年1月16日公開)

3ローバーの頭脳とフラッシュ

RAD6000 · VXWORKS · FLASH

マーズ・パスファインダーでは、コンピュータは着陸機にあり、ローバーのソジャーナは8ビットの80C85でした。スピリットではそれが逆になります。巡航・着陸・地上の運用のすべてを受け持つコンピュータは、ローバーの中に1台だけ。着陸機は、ローバーを降ろしたあとは役目を終えます。

CPUはパスファインダーの着陸機と同じ系統のRAD6000(IBMのPOWERの設計を放射線に強くしたもの)、OSも同じVxWorks。大きく変わったのは記憶の容量です。DRAMは128MBのまま、新たに256MBのフラッシュメモリが加わりました。電源を切っても消えない記憶に、写真や測定のデータをためておき、地球へ送れる時間に送ります。

項目スピリットのコンピュータ
CPURAD6000(32ビット、耐放射線) 20MHz
毎秒約2000万命令(JPLの資料)。VMEのカードケージに入る
メモリDRAM 128MB、フラッシュ 256MB、ほかに少しのEEPROM
OSVxWorks(Wind River)。ソフトはC言語で書かれた多数のタスク
置き場所ローバーの保温箱(WEB)の中
データの数データ(データプロダクト)は1つずつファイル。数の上限は8,192
ファイルシステム大きさ使い道
フラッシュ224MB科学と工学のデータ
RAM4MB地球から送ったファイル
一時(RAM)2MB作業中の一時的なデータ
EEPROM700KB ×2運用の手順(シーケンス)、主と副
EEPROM50KB ×2送るデータの一覧表、主と副

右の表は Reeves・Neilson の論文の表1から。フラッシュのファイルシステムは、市販のソフト部品(DOSライブラリ)で作られていました。消したファイルに E5h の印を付けるのは、MS-DOSのFATと同じやり方です。

4Sol 18 電波が途絶える

THE ANOMALY
火星の赤い大地に残された空の着陸機としぼんだエアバッグ。手前にローバーの太陽電池パネル
Sol 16(2004年1月18〜19日)。異常が起きる2日前に、スピリットのパノラマカメラが撮った空の着陸機と、しぼんだエアバッグ。奥の丘まで約3km。手前はローバーの太陽電池パネル(色はおおよその実際の色)写真: NASA/JPL/Cornell(PIA05117)

着陸から18日目、Sol 18(2004年1月21日)。スピリットは岩「アディロンダック」を調べるためにロボットアームを伸ばす準備をしていました。この日の朝(着陸地点の時刻で9時)に始まった地球との直接の通信は、11分後に命令の受信でエラーが出始め、予定より14分早く途切れます。オーストラリアの通信局のあたりは雷雨で、はじめは天気のせいだと考えられました。

ところが昼の「ビープ音」(決まった時刻に送る短い合図)は届いたのに、午後の高利得アンテナの通信も、周回機を中継する通信も来ません。翌日の朝に届いたのは、2分20秒の意味のない信号だけ。運用チームのJennifer Trosperの言葉を借りれば「無線機は動いているが、中には誰もいない」データでした。

1月22日、プロジェクトマネージャーのPete Theisingerは「とても深刻な異常」と発表します。Sol 20には、故障のときに切り替わる遅い通信速度(毎秒7.8125ビット)で合図が届き、低利得アンテナで受けた記録から、コンピュータが再起動をくり返していることが分かりました。JPLの発表では「3日間で60回以上」。状態は「危篤(critical)」とされました。もう1台のオポチュニティの着陸は、わずか数日後に迫っていました。

地上から見えたことと、ローバーの中で起きていたこと

SOL 18–21 · ANIMATION

上の段の時刻(現地の太陽時)と結果は Reeves・Neilson の論文の図2と本文から。「~」の付いたものは「午後」などとしか書かれていないため、だいたいの位置に置いています。下の段は模式です。公表されているのは、Sol 18 の1回目・2回目のリセットの時間帯、「3日間で60回以上」(JPL)、リセットの間隔(15分・15分・60分のくり返し)、電源が切れた時間帯で、1回ごとの時刻は公表されていません。明るい帯は現地の昼(6時〜18時)。

  1. 通信が途中で切れる

    朝9時(現地)の通信が14分早く途切れる。午後の高利得アンテナと周回機の中継は届かず。この日、リセットが3回。

  2. 「とても深刻な異常」

    周回機の中継で2分20秒の信号だけ。故障の速度(毎秒7.8125ビット)の合図で、異常が起きたことが分かる。

  3. リセットのくり返しが分かる

    低利得アンテナで、決まった長さのテレメトリが届く。シャットダウンの命令が効かない。「危篤」。

  4. クリップルド・モード

    フラッシュを使わない起動の命令を何度も送る。電池を守る回路が働いていたことも分かる。24時間のシャットダウンを確かめ、「重体(serious)」に。

現地の時刻と出来事は Reeves・Neilson の論文の図2、日付と発表は JPL と Spaceflight Now の当時の記事から。Solと日付の対応は火星の1日(24時間40分)から計算したもので、時刻によっては1日ずれます。

5ファイルが多すぎた

ROOT CAUSE

フラッシュのファイルシステムは、起動するたびに「マウント」されます。フラッシュの中のディレクトリとファイルを全部たどり、その一覧をRAMの上のデータ構造として組み立てる作業です。この一覧の置き場所(DOSライブラリのプライベート領域)は最初256KBで、足りなくなると空いているシステムメモリから256KBずつ借りて広がります。上限は決められていませんでした。

そして、ファイルを消しても一覧の場所は返されません。消すときに行うのは、ファイル名の1文字目を E5h に書き換えることだけ。そのディレクトリにいちばん多くファイルがあったときの数だけ、RAMを使い続けます。フラッシュには、打ち上げのときのソフト(R7)が作った古いデータも、ディレクトリごと残っていました。

Sol 18の朝、装置の点検で「動きの記録」のデータがたくさん作られ、一覧を広げるためのRAMがついに足りなくなります。下の図で、何が起きたかを順に見てください。

フラッシュとRAMとタスクで何が起きたか

EXPLAINER · TRY IT
—

説明のための図です。ファイルの数とRAMの量は、しくみが分かるように置いた値です(1マスのファイルが何個か、何KB使うかは公表されていません)。「256KBずつ広がる」「上限なし」「消すと E5h を付けるだけ」「ディレクトリを消すと返る」「止められたタスクが鍵を持ったまま」「15分・15分・60分の間隔」「起動時に詰める対策」は、Reeves・Neilson の論文の説明どおりです。「もしも: エラーを返す」は、論文が原因の1つに挙げたメモリの部品の設定を変えたらどうなるかを示す仮定です。

  1. Sol 18の朝、新しいファイルの一覧を置くために、DOSライブラリがシステムメモリを256KB借りようとして失敗する。
  2. メモリを割り当てる部品の設定で、失敗したときにエラーを返さず、呼び出したタスクを止めるようになっていた。止められたのは、RAMの内容をフラッシュへ写す MRF タスク。ファイルシステムの鍵(セマフォ)を持ったままだった。
  3. 鍵が返らないので、ファイルを読むタスク、シャットダウンのタスク、テレメトリを送るタスクが待たされる。見張り役のヘルスモニタが止まったタスクを見つけて、リセットする。
  4. 再起動すると、またフラッシュをマウントして一覧を組み立て、同じところで足りなくなる。リセットのあと次の動作までの間隔は、設計どおり15分・15分・60分のくり返し。これが何十回も続いた。

なぜ打ち上げ前に見つからなかったのか

論文は、いくつもの理由を挙げています。打ち上げまでの日程が厳しく、地上での運用の試験(PORT)をしたときには、地上の運用もソフトもまだ固まっていなかったこと。Sol 1の時点で、本物のスピリットのフラッシュには、試験機のときより多くのファイルがあったこと。あとから試験の記録を見直すと、空きメモリが減っていくようすは写っていたのに、優先度の低い記録だったので誰も見ていなかったこと。そして、DOSライブラリの設定は決めきられないまま、「この異常は起こりえない」と考えられていたことです。

パスファインダーのときと同じく、市販のソフトの部品(COTS)の中の設定が原因でした。論文の教訓には「市販の部品も、誰かが責任を持って中身を理解し、確かめること」「初期化のあとに空きメモリから割り当てない、という自分たちの設計の決まりを、市販の部品にも当てはめること」「空きメモリの量をテレメトリで見られるようにすること」が並んでいます。

6立ち直るまで

RECOVERY

突破口になったのはクリップルド・モードでした。ソフトに「フラッシュのファイルシステムを使うな」と伝える命令で、ソフトを通さずにハードウェアが直接受け取る数少ない命令の1つです。受け取ったソフトは、フラッシュの代わりに同じ名前のファイルシステムをRAMに作って起動します。もともとは試験のための機能で、そのアイデアはマーズ・パスファインダーから受け継いだものでした。論文は「これがなければ、MERは失われていたかもしれない」と書いています。

リセットのくり返しの中でも、探査機が自分から通信を試みる時刻はところどころ決まっていて、その時刻に信号が来たか来ないかが、中で何が起きているかの手がかりになりました。1月24日(Sol 21)、クリップルド・モードで起動したスピリットは命令に従い、毎秒120ビットで1時間近く話しました。Theisingerは「重体」へ格上げを発表します。その数時間後、オポチュニティは反対側のメリディアニ平原に無事着陸しました。

“We have a patient in rehab, and we're nursing her back to health.” — Jennifer Trosper(JPL、2004年1月26日)

  1. フラッシュを使わずに起動

    クリップルド・モードでソフトが正常に立ち上がる。毎日の命令でこのモードを保つ。

  2. 調べる

    フラッシュの中身を地上へ送り、タスクの記録を取る。フラッシュの部品そのものは壊れていないと分かる。原因はファイルの数とメモリの問題にしぼられる。

  3. 高利得アンテナが戻る

    アンテナの角度の検出器を較正し直して、高利得アンテナで送れるように。岩アディロンダックも撮る。

  4. 古いデータを消す

    R7のデータを、ディレクトリごと何千個も消す。フラッシュを使う普通の起動に戻しても、再起動のくり返しは止まった。2月1日、Mark Adler「普通に起動していることを確かめた」。

  5. フラッシュを初期化する

    一部のデータが壊れていたため、全部消すことに。飛行ソフトをRAMに写し、フラッシュを少しずつ消してはソフトの2つの写しを確かめ、最後にファイルシステムを作り直す。

  6. 科学観測を再開

    アディロンダックの表面のほこりを払う作業から。

Sol 32 フラッシュを少しずつ消して作り直す

ANIMATION · SCHEMATIC

手順は Reeves・Neilson の論文のとおりです(クリップルド・モードで起動 → 飛行ソフトをRAMに写す → フラッシュを少しずつ消し、そのたびに飛行ソフトの2つの写しを確かめる → ファイルシステムを作り直して普通に戻す)。区画の数・大きさ、1区画にかかった時間は公表されていないので、図は模式です。

そのあとの対策

運用では、空きメモリが800KB以下になったら科学と工学の作業をすべて止める決まりを作り、送り終えたデータを消すまでの時間を48時間から24時間に縮め、空になったサブディレクトリを消すようにしました。2004年4月にはソフトを更新し、起動のときフラッシュをマウントする前にディレクトリの中の消した印の場所を詰める処理、何度もリセットしたら自分でクリップルド・モードに入る処理、電源を切っても消えない「クリップルド・モード」の印、シャットダウンの見張りなどを加えています。一覧の置き場所に上限を付ける案もありましたが、試験の手間と日程のリスクが大きいとして見送られました。

7その後のスピリット

AFTER SOL 33

予定の運用期間は90 sol。立ち直ったスピリットは、そこから6年以上走り続けます。2005年3月には、つむじ風が太陽電池パネルのほこりを払って発電が増えるという幸運もありました。走った距離は合計7.73km。

2009年4月ごろから、スピリットはまたフラッシュの問題に悩まされます。データがフラッシュに書かれない「記憶喪失(アムネジア)」と、ときどきの再起動。10月にはフラッシュのファイルシステムがマウントできなくなり、数sol分のデータが失われました。運用チームは11月にフラッシュの初期化を計画しています(のちのJPLの発表で、2009年に初期化したと書かれています)。同じ2009年5月1日には、「トロイ」と呼ばれる場所で柔らかい砂にはまって動けなくなりました。

2010年1月、NASAはスピリットを「動かない観測所」とし、3月22日を最後に電波は届かなくなります。冬の寒さで部品が傷んだとみられ、2011年5月25日に呼びかけを終えました。90 solの予定に対して、約6年。

双子のオポチュニティも、2014年にフラッシュのすり減りによるリセットが増え、9月4日(Sol 3773)に初めてフラッシュを初期化しました。その後も記憶喪失が続いたため、12月からはフラッシュを使わず、その日のデータを眠る前にRAMから送りきる運用に切り替えています(フラッシュの7つの区画のうち1つだけの不調でした)。

  1. 打ち上げ

    17時58分47秒(世界時)。デルタII 7925。

  2. 着陸

    4時25分32秒(探査機の時刻)。グセフ・クレーター。

  3. Sol 18 の異常

    フラッシュのファイルが多すぎて、リセットをくり返す。

  4. 復旧

    Sol 27で再起動が止まり、Sol 32でフラッシュを初期化、Sol 33で観測再開。

  5. 再び記憶喪失

    フラッシュに書けない・マウントできない。初期化を計画。

  6. トロイで砂にはまる

    脱出の試みは2010年1月まで続く。

  7. 最後の通信

    冬を前に、電力が足りなくなったとみられる。

  8. 運用の終わり

    呼びかけを終える。走った距離は7.73km。

マーズ・パスファインダーの優先度の逆転と、スピリットのファイルの数。どちらも、市販のソフト部品の「既定の設定」が、地上の試験では出なかった条件で表に出た事故でした。そして、どちらも地上で原因を突き止め、火星へ命令を送って直しています。

諸元

SPECIFICATIONS
名前
スピリット(Spirit) · Mars Exploration Rover A(MER-A)、機体の番号は MER-2
運用
NASA/JPL(マーズ・エクスプロレーション・ローバー計画)
打ち上げ
2003年6月10日 17:58:47 UTC · デルタII 7925 · ケープカナベラル17A
重さ
打ち上げ時 1,062kg、ローバー 174kg(NASAの打ち上げ前の資料)
着陸
2004年1月4日 04:25:32 UTC(探査機の時刻、地球で受けたのは04:35) · グセフ・クレーター 南緯14.57°・東経175.47° · コロンビア・メモリアル・ステーション
コンピュータ
RAD6000 20MHz、DRAM 128MB、フラッシュ 256MB、VxWorks
運用期間
最後の通信 2010年3月22日 · 終了 2011年5月25日 · 走った距離 7.73km

出典

SOURCES

関連する記事火星へ行った8ビット マーズ・パスファインダー火星衛星探査機 MMX1光日先、飛び続けて49年のコンピュータ ボイジャー1号

← TECH WATCH 一覧へTECH WATCH について次の記事:スピリットから見た宇宙