火星へ行った8ビット
マーズ・パスファインダーの旅とリセットの謎
/
1997年7月4日、NASAのマーズ・パスファインダーはエアバッグに包まれて火星の地面を弾み、小さなローバー「ソジャーナ」を降ろしました。ローバーの頭脳は8ビットのIntel 80C85。着陸機の頭脳は32ビットのRAD6000と、リアルタイムOSのVxWorks。そして着陸の翌日から、着陸機のコンピュータがときどき勝手にリセットするようになります。原因は「優先度の逆転」。地上で再現し、火星へ設定の変更を送って直すまでを、打ち上げからたどります。
1打ち上げと7か月の旅
LAUNCH & CRUISEマーズ・パスファインダーは1996年12月4日 06時58分(世界時、日本時間 15時58分)、米国フロリダ州のケープカナベラル空軍基地17B発射台から、デルタII 7925ロケットで打ち上げられました。打ち上げの期間は12月2日から31日まで。2日は寒冷前線による天気の悪さで、3日も延期になり、3日目の挑戦でした。
打ち上げのときの重さは約895kg。そのうち94kgが巡航用の推進剤です。直径2.65mの巡航段の上に、熱シールドと背面カバーに包まれた着陸機が載り、着陸機の花びらの1枚にローバーのソジャーナ(10.6kg)が折りたたまれていました。
NASAの「より速く、より良く、より安く」を掲げたディスカバリー計画の探査機で、火星を回る軌道には入らずに、地球から飛んできた勢いのまま火星の大気に飛び込む方法を選びました。
デルタIIの上昇から分離まで
DELTA II 7925- 0秒1段目のエンジンと、地上で点火する固体ロケット6本で上昇
- 約67秒6本が燃え尽きる。空中で残りの3本に点火
- —空中点火の3本を切り離す高度約54km
- —1段目のエンジンが止まる(MECO)高度約118km
- その約2.5分後2段目に点火、すぐにフェアリング(先端のカバー)を捨てる
- 約9分20秒2段目がいったん止まり、地球を回る待機軌道へ高度約189km・傾き約28°
- 約1時間出発に良い位置まで惰性で飛ぶ。日の当たり方をそろえるため、1秒に約1°ゆっくり回る(バーベキュー・ロール)
- —2段目を再点火したあと、3段目(PAM-D)を毎分約70回転に回して姿勢を安定させる
- 約70分3段目が燃えて、地球を離れる速さに
- 約75分回転を毎分約12回転に落とし、探査機を切り離す
NASAの「1996 Mars Missions」プレスキット(打ち上げ前の予定の値)とPDSのミッションの記録から。実際の秒単位の時刻表は見つからなかったので、分かっている値だけを載せています。
地球を離れたあとは、太陽のまわりを半周弱(155°)回って火星に追いつくタイプ1と呼ばれる航路です。7か月の間に4回、小さな噴射で軌道を修正しました(TCM)。いちばん大きかった1回目でも秒速約30m。最後の4回目は秒速1.9cmという、歩くよりずっと遅い速さの調整でした。
地球から火星への航路
HELIOCENTRIC · ECLIPTIC| 軌道修正 | 日時(UTC) | 速度の変化(実績の推定) | メモ |
|---|---|---|---|
| TCM-1 | 1997-01-10 02:00 | 秒速 30.08m | 打ち上げ37日後。軸方向のエンジンで約90分。打ち上げでは、わざと着陸の目標から外した所へ向けて送り出していて、それを直す修正 |
| TCM-2 | 1997-02-03 23:00 | 秒速 1.60m | 打ち上げ61日後 |
| TCM-3 | 1997-05-07 01:00 | 秒速 0.112m | 到着58日前 |
| TCM-4 | 1997-06-25 17:00 | 秒速 0.0186m | 到着9日前。予備のTCM-5は行わなかった |
航路の作り方
2月4日から突入の直前までは、JPLの航法チームが追跡データから再構成した軌道(JPL Horizons)をそのまま使いました。それより前はHorizonsにないので、2月4日の位置と速さから、太陽・地球・金星・火星・木星の重力で時間を逆向きに計算し、1月10日のTCM-1の速度変化は「打ち上げ70分後に地球の上空約190kmを通る」ように求めました。
計算の確かめ
求めたTCM-1は秒速31.3m(計画値31.2m、実績の推定30.1m。TCM-2の1.6mも含む)。航路の長さは4億9740万km(NASA「4億9700万km」)。突入直前の値から火星の重力だけで計算した突入の速さは秒速7.264km・角度−14.2°で、発表の秒速7.264km・−14.06°と合います。
電波で10分39秒
着陸の日、地球と火星の距離は約1億9100万km。電波でも片道10分半以上かかります(計算では10分39秒、NASAのプレスキットは10分35秒)。着陸の5分間は、地球では何も手を出せないまま、終わったあとに知らせが届きました。
2エアバッグで弾んで着陸
ENTRY, DESCENT & LANDING1997年7月4日 16時51分(世界時)、着陸機は高さ約130km、秒速7.3kmで火星の大気に突入しました。着地まではわずか5分半。そのあいだの操作はすべて着陸機のコンピュータが自分で行います。熱シールドで減速し、パラシュートを開き、20mのひもで着陸機を吊り下げ、レーダーで地面を測り、エアバッグをふくらませ、逆噴射ロケットで止まり、ひもを切って落ちる。ここから先の図は、着陸機に積まれていた加速度計と大気計測の実際の記録(NASA PDS)から描いています。
着陸の5分半を再生
ANIMATION · NASA PDS高さは、高さ約9kmまでが大気計測チームの再構成(実データ、下の図の線)、そこから下はNASA PDSの降下の時刻表の値(パラシュート、熱シールド、ひも、レーダー、エアバッグ、逆噴射、ひもを切る)を直線や一定の減速・自由落下でつないだものです。「加速度」は着陸機の加速度計の記録(実データ)、弾みの時刻と高さも記録の衝撃の間隔から求めました。加速度の記録が終わる約56秒後から先(弾み・約2.5分・約1km転がって止まるまで)は、JPLの発表に合わせた模式です。着陸地点は午前3時前の真夜中なので、空と地面は暗く描いています。大気圏の上のほうは速く、着地の前後はゆっくり再生します。
高さと時間(突入から着地まで)
NASA PDS · ASI/MET高さ140〜9kmの線は、大気計測チームが加速度の記録から再構成した値(0.25秒ごと)。パラシュート以降の点はPDSの降下の時刻表の値で、間は点線でつないだだけです(縦軸は対数なので、地面は「10m」の線に置いています)。
大気で減速する力
ACCELEROMETER突入して約2分で、地球の重さの16倍の力で減速しました。パラシュートが開いた瞬間にも約5gの衝撃があります。
記録から分かること
減速がいちばん強いのは、突入から約114秒後の15.9g。NASA PDSの降下の時刻表にある「パラシュートを開くときの16g」とほぼ同じ値です。
着地の直前、加速度計は約3gの減速を約2.3秒記録したあと、急にほぼ0gになります。逆噴射ロケットで止まった着陸機がひもを切られ、約3.7秒間、自由落下したところです。高さ21.5mから火星の重力で落ちると約3.4秒。そのあと、最初の衝撃 18.5g が記録されています(16時56分54秒 UTC)。
記録の中には、加速度計の測る範囲を切り替えた直後の大きな値(36.6g など)があります。PDSの説明に「切り替えから1秒間は使わない」とあるため、図では除いています。
逆噴射、落下、そして弾む
NASA PDS · 32 SAMPLES/S衝撃と衝撃の間隔から、真上に弾んだとみなして高さの目安を出しました。最初の弾みは約16m。JPLの7月11日の発表「最初に約15m弾み、そのあと14〜15回弾んで、約2.5分、約1km転がって止まった」と合います。加速度の記録は着地の約56秒後で終わっていて、そのときもまだ弾んでいます。
着陸したのは真夜中
着陸機が止まったのは、アレス渓谷(Ares Vallis)の北緯19.17°・西経33.21°(米国地質調査所の座標)。着陸機の傾きは約2.5°でした。着地の時刻は16時56分55秒(世界時、探査機の時刻)。着陸地点の時刻では午前3時前で、着陸機は暗い中で弾んでいました。地球で着陸の信号を受け取ったのは、10分半ほどあとです。
ソジャーナがスロープを下りて火星の地面に車輪を下ろしたのは、2日後の7月6日 05時37分(世界時)。しぼみきらなかったエアバッグがスロープの前に残っていて、花びらを一度閉じて開き直したため、少し遅れました。
3ソジャーナの頭脳 80C85
SOJOURNER · 8-BIT重さ10.6kg、電子レンジほどの大きさのソジャーナを動かしていたのは、Intel 80C85。1970年代に生まれた8ビットのCPU 8085を、低い電力で動くCMOSにしたものです。日本でもNECのワンボードマイコン TK-85(1980年)などで親しまれた8085の仲間が、火星を走りました。
なぜ8ビットなのか。ソフトウェアを書いたJPLの技術者は、「飛ぶものには、実績があって放射線に強い部品が必要で、電力と重さの制約がとても厳しい」と書いています。CPUとメモリを合わせたコンピュータは0.5kg、消費電力は1.5Wでした。
| 項目 | ソジャーナのコンピュータ | 出典 |
|---|---|---|
| CPU | Intel 80C85(8ビット)、クロック 2MHz、毎秒約10万命令 | JPL プレスキット、Wilcox & Nguyen 1998(JPL) |
| メモリ | 耐放射線のPROM 16KB、EEPROM 176KB、耐放射線のRAM 64KB、RAM 512KB 8085が直接扱えるのは64KBまでなので、16KBずつ切り替えて使う | Wilcox & Nguyen、ローバーのソフト設計書 |
| ソフトウェア | マルチタスクのOSは使わず、1本のループで順に処理 「処理能力と電力が限られるので、マルチタスクは不向き」(設計書) | ローバーのソフト設計書 |
| 重さ・電力 | 0.5kg、1.5W | NASA TM-107449 |
| 保温 | 保温箱(WEB)に入れ、放射性同位体ヒーター3個で −40℃以上に | NASA PDS、TM-107449 |
| 通信 | すべて着陸機を経由。UHFの無線モデム、9600bps、半二重 | Wilcox & Nguyen、PDS |
| 走った距離 | 約100m。83 sol動き、そのうち49 solで走行(予定は7 sol) | Wilcox & Nguyen |
命令は1日に1回
LIGHT TIMEジョイスティックで動かすことはできません。地上では着陸機のカメラの立体画像を見て行き先を決め、命令をまとめて送ります。途中の障害物は、ソジャーナが自分で見つけてよけます。
進む・止まる・見る
HAZARD AVOIDANCE赤外線のレーザーの線5本と前のカメラで、目の前の地面の高さを調べます(模式図)。8ビットでも足りるように、進むたびに止まって、少しずつ判断しました。速さは毎秒1cmに届かない程度です。
4着陸機の頭脳 RAD6000とVxWorks
LANDER · 32-BIT着陸機には、32ビットのコンピュータが1台だけ積まれていました。IBMのワークステーションRS/6000の設計をもとに、放射線に強くして1枚の基板にしたRAD6000(製造はLockheed Martin Federal Systems)です。この1台が、7か月の巡航、5分半の着陸、着陸後の運用をすべて受け持ちました。
OSはWind River社のVxWorks。複数の仕事(タスク)に優先度を付けて、優先度の高いものから先に動かす「リアルタイムOS」です。Wind Riverはこの計画のために、VxWorksをRS6000へ移植しました。
| 項目 | 着陸機のコンピュータ |
|---|---|
| CPU | RAD6000(32ビット、耐放射線) 毎秒約2000万命令(JPLプレスキット)。クロックは約22MHz(ソフト責任者 Glenn Reeves の発言) |
| メモリ | DRAM 128MB |
| バス | VMEバス、1553バス(カッシーニの設計を受け継ぐ) |
| OS | VxWorks(Wind River) |
| 周期 | 1553バスの仕事を1秒に8回(1/8秒ごと)の周期で組み立てる |
着陸機の中のつながり
SCHEMATIC模式図(機器とバスのつながりは簡略化しています)。CPUは1台で、バスの仕事は1/8秒の周期で組み立てられていました。
タスクと優先度
ソフト責任者のGlenn Reevesが1997年12月に書いた説明によると、問題に関わったタスクの優先度は次のとおりです。タスクどうしは、共有メモリの「情報バス」と、VxWorksのパイプでデータを受け渡していました。
- 最高
bc_sched1553バスの予定を組む。周期ごとに、前の周期の仕事が終わったかを確かめる見張りも兼ねる - 2番目
(突入・着陸)突入と着陸を制御するタスク。着陸後は使わない - 高
bc_dist1553バスで集めたデータを配る。周期の中で終わらなければならない - 中
通信などいくつかのタスク - 低
ASI/MET気象のデータを集める
5リセットの謎
PRIORITY INVERSION着陸の翌日、7月5日に1回目のリセットが起きました。リセットすると、着陸機は安全な状態に戻って地球からの指示を待ちます。壊れはしませんが、その日の予定は消えてしまいます。
7月11日(金)の夕方には、送られてくるはずの電波が届きませんでした。低利得アンテナで呼びかけると返事があり、運用チームは「18時47分から20時47分(米国太平洋夏時間)のどこかで、コンピュータがリセットした」と判断します。7月14日の午前1時6分には、2時間の通信の途中でリセット。JPLは「どちらも、着陸機とローバーのあいだの通信が多い時間帯に起きている」と発表し、運用では仕事を1つずつ順に行う(直列化する)ことでしのぎました。7月15日、ソフト責任者のGlenn Reevesは、リセットは7月5日・10日・11日・14日の計4回と説明しています。
地上から見えたことと、着陸機のコンピュータ
JULY 4–25, 1997 · ANIMATION日付は JPL の1997年7月の発表と Reeves の説明から。時刻が分かっているのは7月11日(時間帯)と7月14日だけで、「~」の付いたものはその日のおおよその位置に置いています。時刻は世界時(米国太平洋夏時間 + 7時間)。下の段の色分けは、発表された出来事から描いた模式です。
地上で再現する
着陸機から地上に送らせた記録(7月13日に約3MB)を手がかりに、JPLは地上にある同じ構成の試験機で、記録(トレース)を取りながら同じ動きを再現しようとしました。Reevesによると、問題を起こせるようになるまで18時間かかりませんでした。分かったのは次の流れです。
- 優先度の低い
ASI/METが、パイプの select() を使う途中で、情報バスの資源(ミューテックス)を取る。 - そこへ優先度が中くらいの通信などのタスクがいくつも動き出し、
ASI/METは割り込まれて進めなくなる。資源は持ったまま。 - 優先度の高い
bc_distが同じ資源を取りに来て、待たされる。「中」が動いているあいだ、「高」が「低」の後ろで止まってしまう。これが優先度の逆転。 - 次の周期の始めに、いちばん高い
bc_schedが「bc_distが周期の中で終わっていない」と見つけ、異常としてコンピュータをリセットする。
3つのタスクが時間の上でどう動くか
SIMULATION · 0〜262ms説明のための再現です。タスクの名前と優先度の順番、1/8秒の周期、「bc_dist が周期内に終わらなければリセット」という仕組みはReevesの説明どおりですが、各タスクが動く時間の長さは公表されていないので、分かりやすい値を置いています。「中」のタスクが短ければリセットは起きません。通信が多い時間帯に起きたのは、このためです。
なぜ打ち上げ前に見つからなかったのか
Reevesは、打ち上げ前の試験は「データ量が多く、科学観測も盛んな、いちばん条件の良い場合」に限られていたと書いています。気象データの収集と、通信の多い時間帯がちょうど重なる組み合わせは、火星で初めて起きました。
7月17日のJPLの記者向けの発表では、飛行の責任者(フライトディレクター)のBrian Muirheadが「時間内に終わらないタスクがあり、優先度が足りなかった。命令を1つ足して優先度を上げる」と説明しています。次の章の「優先度継承」は、まさに資源を持っているあいだだけ、低いタスクの優先度を一時的に上げる仕組みです。
6火星へ設定を送って直す
THE FIX優先度継承(priority inheritance)は、1990年にカーネギーメロン大学のSha、Rajkumar、Lehoczkyが論文にまとめた方法です。高いタスクが資源を待ち始めたら、その資源を持っている低いタスクを一時的に同じ高さまで引き上げ、先に資源を返させます。上のシミュレーションで「優先度継承」を入れると、「中」に割り込まれていた ASI/MET が赤く上がって資源を返し、bc_dist が周期の中で終わるのが見られます。
VxWorksのミューテックスには、作るときに優先度継承を付けるかどうかを選ぶ設定がありました。ところが select() の中で使われる資源では、Wind Riverが速さのために既定で付けていなかったのです。Reevesは「付けないと決めたわけではなかった」と書いています。
修正は、select() の資源を作るときに使われる大域変数を書き換えて、優先度継承を付けるようにすることでした。書き換えたあとに作られる資源から効きます。地上の試験機で十分に確かめてから、機上のソフトと新しいソフトの差分を火星へ送りました。よく「着陸機のC言語のインタプリタ(VxWorksのシェル)に打ち込んで直した」と紹介されますが、Reeves本人は「シェルは使っていない」と書いています。
“make sure you know how it works” — Glenn Reeves(既製品のソフトを宇宙で使うときの教訓、1997年12月)
着陸機の記録から、火星の修正まで
ANIMATION · SCHEMATIC流れは Reeves の説明と JPL の発表のとおりです(記録を地上へ → 試験機で再現 → 大域変数を書き換えて優先度継承を付け、確かめる → 差分を送る → 書き換えのあとに作られる資源から効く)。電波の片道の時間は1997年7月中ごろの地球と火星の距離から計算しました。資源の数や、図の中のタスクの動きは模式です。
着陸
16時56分55秒(世界時)。2日後にソジャーナがスロープを下りる。
1回目のリセット
着陸の翌日。
2回目・3回目
11日は送られてくるはずの電波が届かず、低利得アンテナで呼びかけて分かった。どちらも着陸機とローバーの通信が多い時間帯。
記録を地上へ
リセットの手がかりを含む約3MBの記録。「処理どうしのやり取りを管理するソフトの動きに関係しているらしい」。
4回目
午前1時6分(米国太平洋夏時間)、2時間の通信の途中で。仕事を1つずつ行う運用でしのぐ。
原因が分かる
地上の試験機で再現して特定。修正は19日(土)に送る予定と発表。
修正を送る
19日は地上局の都合などで延び、21日の発表で「自動でリセットしてしまう部分を直すソフトの更新も送った」。
リセットなし
「修正を送った3 sol前から、リセットは起きていない」。
最後の通信
83 sol目。電池が尽き、冬の寒さが近づいたためとみられる。着陸機は設計寿命30日の約3倍、ソジャーナは7日の12倍働いた。
運用の終わり
最後の呼びかけに返事はなく、ミッションを終了。
7その後のコンピュータ
AFTER PATHFINDERパスファインダーのあとも、火星のローバーは耐放射線のCPUとVxWorksで動き続けています。2004年には、スピリットが着陸18 sol目にフラッシュメモリのファイルが増えすぎてリセットをくり返し、地上から「フラッシュを使わずに起動する」命令を送り、不要なファイルを消してフラッシュを初期化して立ち直りました。ここでも、遠く離れたコンピュータを地上から直しています。
| 探査機 | 打ち上げ | コンピュータ | メモリ | メモ |
|---|---|---|---|---|
| ソジャーナ | 1996 | Intel 80C85 2MHz(8ビット) | RAM 576KB | OSなし |
| パスファインダー着陸機 | 1996 | RAD6000 約22MHz | DRAM 128MB | VxWorks。優先度の逆転 |
| スピリット・オポチュニティ | 2003 | RAD6000 20MHz | DRAM 128MB、フラッシュ 256MB | VxWorks。2004年 スピリットのフラッシュの異常 |
| フェニックス | 2007 | RAD6000 | — | 火星の北極域の着陸機 |
| キュリオシティ | 2011 | RAD750 最大200MHz ×2台 | RAM 256MB、フラッシュ 2GB | VxWorks。2013年にフラッシュの不具合でA→Bへ切り替え |
| パーサヴィアランス | 2020 | RAD750 200MHz ×2台 + 着陸用のFPGA(Virtex-5QV) | RAM 256MB、フラッシュ 2GB | 地形を見ながら降り、狙った点から5m以内に着地 |
| インジェニュイティ(ヘリ) | 2020 | Qualcomm Snapdragon 801(スマートフォン用) | — | 耐放射線ではない市販品で飛んだ |
次の世代として、NASAはRISC-Vの多コアのチップ(HPSC、Microchip社のPIC64-HPSC)を開発しています。2026年5月のJPLの発表では、試験の初期の結果で「いま使っている耐放射線チップの500倍の性能」が出ています。8ビットの80C85から数えると、30年で処理の速さは何万倍にもなりました。それでも、遠くのコンピュータが止まったときに地上から原因を探して直す、という仕事の形はパスファインダーのときと変わっていません。
諸元
SPECIFICATIONS- 名前
- マーズ・パスファインダー(Mars Pathfinder) · 着陸機はのちに「カール・セーガン記念ステーション」、ローバーはソジャーナ(Sojourner)
- 運用
- NASA/JPL(ディスカバリー計画)
- 打ち上げ
- 1996年12月4日 06:58 UTC · デルタII 7925 · ケープカナベラル17B
- 重さ
- 打ち上げ時 約895kg(推進剤94kg)、突入時 約570kg、着陸後 約360kg、ローバー 10.6kg
- 着陸
- 1997年7月4日 16:56:55 UTC · アレス渓谷 北緯19.17°・西経33.21°(USGSの座標)
- 運用期間
- 最後の通信 1997年9月27日(83 sol目) · 終了 1998年3月10日
- 成果
- 着陸機のカメラの画像1万6000枚以上、ローバーの画像550枚以上(JPL 1997年)、岩や土の成分、気象の記録
出典
SOURCES- NASA/JPL「Mars Pathfinder Landing」プレスキット(1997年7月)重さ、飛行距離、80C85・RAD6000、DRAM
- NASA「1996 Mars Missions」プレスキットデルタIIの上昇、打ち上げ期間
- NASA PDS「Mars Pathfinder Mission」打ち上げ・着陸の時刻、着陸地点、ローバーを降ろした日時
- NASA PDS「MPFL-M-ASIMET-4-DDR-EDL-V1.0」突入・降下の高さと大気(edl_ddr)、加速度計(edl_erdr)、降下の時刻表。間引いて使用
- JPL Horizons(NASA/JPL)Mars Pathfinder(-530)、航法チームの再構成軌道
- Vaughan ほか「Navigation Flight Operations for Mars Pathfinder」(AAS 98-145)軌道修正、突入の経路角
- Braun ほか「Mars Pathfinder Six Degree-of-Freedom Entry Analysis」(AIAA 97-3663)突入の速さ・角度、移動角155°
- JPL「Mars Pathfinder Mission Status」1997年7月11〜17日 ・ 7月18〜24日着陸の再構成、リセットの日時、修正の送信(転載のアーカイブ)
- Glenn E. Reeves「Re: What really happened on Mars?」(1997年12月15日)タスクと優先度、リセットの仕組み、再現、修正の方法(転載)
- Dr. Dobb's「A Conversation with Glenn Reeves」(1999年)クロック約22MHz、128MB
- Sha, Rajkumar, Lehoczky「Priority Inheritance Protocols」IEEE Trans. Computers 39(9), 1990優先度継承
- Wilcox, Nguyen「Sojourner on Mars and Lessons Learned for Future Planetary Rovers」(SAE 981695)8085・2MHz、メモリ、レーザー、走行
- Rover Vehicle Software Design Document ・ Morrison, Nguyen「On-Board Software for the Mars Pathfinder Microrover」1本のループ、8ビットを選んだ理由
- NASA TM-107449ローバーのコンピュータの重さ・電力、保温
- JPL「Mars Pathfinder Winds Down After Phenomenal Mission」(1997年11月)最後の通信、寿命
- Reeves, Neilson「The Mars Rover Spirit FLASH Anomaly」 ・ NASA PDS/NAIF MERスピリット・オポチュニティ
- JPL「Computer Swap on Curiosity Rover」 ・ NASA「Perseverance Rover Components」 ・ JPL Robotics(着陸)キュリオシティ、パーサヴィアランス
- NTRS「Benchmarking and Testing of Qualcomm Snapdragon … for JPL Space Applications」 ・ JPL「Hello, Universe」(2026年5月)インジェニュイティ、HPSC
- NASA/JPL PIA04754 ・ PIA00660写真(縮小して使用)
- TK-80(Wikipedia)TK-85(1980年5月、μPD8085AC)
- Astronomy Engine地球・火星の位置