月面まで残り7分の再起動
アポロ11号の1202アラーム
1969年7月20日、アポロ11号の着陸船イーグルは月面へ降りる最後の12分のあいだに、5回の「プログラム警報」を出しました。誘導コンピュータに仕事が詰め込まれすぎて、作業のための場所が足りなくなったのです。コンピュータはそのたびに自分で再起動し、着陸に欠かせない計算だけを組み立て直して、降下を続けました。消せるメモリはわずか2,048語。その中で何が起きていたのかを、着陸船のプログラムと当時の記録からたどります。マーズ・パスファインダー、スピリット、ボイジャー1号に続く4つ目の物語です。
11969年7月20日
TRANQUILITY BASE着陸船イーグルの脚の先が月面に触れたのは、1969年7月20日 20時17分40秒(世界時)、日本時間では7月21日の朝5時17分40秒でした。場所は「静かの海」の南西のはし、北緯0.674度・東経23.473度です。18秒後、ニール・アームストロング船長は「ヒューストン、こちら静かの基地。イーグルは着陸した」と伝えました。
有限会社エナージの創業日7月20日は、人類が初めて月に降り立ったこの日にちなんでいます。会社のサイトで宇宙のコンピュータの話を続けてきて、いつかこの日のことを書きたいと思っていました。
2地球から月へ
TRANSLUNAR · LUNAR ORBITアポロ11号は1969年7月16日 13時32分(世界時)、サターンVロケットでケネディ宇宙センターから打ち上げられました。地球を1周半したあと、打ち上げから2時間44分に第3段S-IVBのエンジンをもう一度点火して月へ向かう軌道に乗り(月遷移軌道投入、TLI)、司令船コロンビアが着陸船イーグルを第3段から引き出しました。月へ向かう途中の軌道修正は、打ち上げから約26時間45分の1回(秒速約6.4m)で済んでいます。
打ち上げから約75時間50分、月の裏側で司令船のエンジンを約6分噴射して減速し、月を回る軌道に入りました(月周回軌道投入、LOI)。最初は高さ約110〜310kmの楕円で、約4時間後にもう一度噴射して約100〜120kmの軌道に整えています。
7月20日、打ち上げから約100時間12分に着陸船が司令船から切り離され、101時間36分に着陸船の降下エンジンを30秒噴射して、いちばん低い所が高さ約15kmになる楕円に移りました(降下軌道投入、DOI)。その最下点の近くで、102時間33分05秒に降下エンジンに点火して、最後の降下が始まります(動力降下開始、PDI)。
航路の求め方
JPL Horizons にはアポロ11号の司令船・着陸船の軌道がありません(第3段 S-IVB だけ)。そこで、NASA の飛行報告(Apollo 11 Mission Report)の表にある各時点の位置・速さ・向きから、地球・月・太陽の重力で計算してつなぎました。第3段から離れるための噴射と、途中の軌道修正は、報告にある「噴射のあとの月での最接近の予測」などに合うように解いています(計算では秒速6.6mと6.2m、報告では6.0mと6.4m)。月を回る軌道は、報告の各時点の状態をつないでいます(月の重力のむらは入れていません)。
3誘導コンピュータ LGC
LUNAR MODULE GUIDANCE COMPUTER司令船と着陸船には、MITの計測研究所(のちのドレイパー研究所)が設計し、レイセオンが作った同じ型のコンピュータ(アポロ誘導コンピュータ、AGC)が1台ずつ積まれていました。着陸船のものを LGC と呼びます。プログラムは、細い銅線が小さなリング状の磁石(コア)の中を通るか通らないかで0と1を表す「コアロープ」に、工場で編み込まれていました。アポロ11号の着陸船のプログラムの名前は Luminary 99 です。
| 項目 | 値 |
|---|---|
| 1語 | 15ビット+パリティ1ビット |
| 消せないメモリ(コアロープ) | 36,864語 |
| 消せるメモリ(磁気コア) | 2,048語 |
| メモリの1サイクル | 11.7マイクロ秒 |
| 足し算1回 | 約24マイクロ秒 |
| 重さ・電力 | 約32kg・動作時約100W |
宇宙飛行士は、電卓のような表示・入力装置 DSKY(ディスキー)でコンピュータと話します。「何をするか」を動詞(VERB)の番号、「何について」を名詞(NOUN)の番号で打ち込みます。たとえば「VERB 16 NOUN 68」は「名詞68(着陸地点までの距離、残り時間、高さの差)を1秒ごとに表示し続けよ」という意味です。
LGCの中では、いくつもの仕事(ジョブ)を優先度の高いものから順に動かす Executive というしくみが働いていました。ジョブを1つ始めるには、消せるメモリの中の作業場所を借ります。どのジョブも借りる「コアセット」(12語)が 8つ、大きな計算をするジョブがもう1つ借りる「VAC 領域」(44語)が 5つ。合わせても316語しかありません。
4降下の12分
POWERED DESCENT動力降下は高さ約15km、秒速約1,700mで始まりました。降下エンジンで減速しながら、約481km先の着陸地点へ向かいます。前半の「ブレーキの段階」は P63 というプログラムで、エンジンを進む向きに向けて、ほぼ寝た姿勢で減速します。
打ち上げから102時間41分32秒、高さ約2,170m(7,129フィート)の「ハイゲート」で P64(接近の段階)に切り替わり、着陸船は起き上がって窓から着陸地点が見えるようになります。ところが自動の行き先は、大きな岩が散らばるクレーター(のちにウェスト・クレーターと呼ばれる)の中でした。アームストロングは高さ約180mから手動の操縦に切り替え、約120mからは降下の速さだけをコンピュータに任せる P66 に移って、クレーターを飛び越えました。着地点は、そのときの自動の目標地点より約340m先です。降下を始める前の位置の計算のずれもあって、計画の着陸地点からは約6.5km西に降りています(飛行報告の地図の座標で、計画 北緯0度43分53秒・東経23度38分51秒、実際 北緯0度41分15秒・東経23度26分)。
この12分半に着陸船から見えたはずの景色は、イーグルから見た月面で、月の地形データと着陸の時刻の低い朝の太陽で再現しています。
高さと時刻、5回の警報
POWERED DESCENT · 102:33:05–102:45:40高さは着陸地点の高さから。点火・ハイゲート・30,000フィートは飛行報告の値、ハイゲートから下は交信で読み上げられた高さと降下の速さに、なめらかな線を当てはめたものです(読み上げは数字が丸められているので、線は点から数m〜数十mずれます)。警報の時刻は「Apollo by the Numbers」の記録。
| 打ち上げからの時間 | 警報 | 段階 |
|---|---|---|
| 102:38:22 | 1202 | P63(ブレーキ) |
| 102:39:02 | 1202 | P63 |
| 102:42:18 | 1201 | P64(接近) |
| 102:42:43 | 1202 | P64 |
| 102:42:58 | 1202 | P64 |
| 102:45:40 | (接地) | P66(手動で降下) |
51202とは何か
EXECUTIVE OVERFLOW着陸のあいだ、LGCは2秒ごとに加速度計を読み、航法と誘導の大きな計算 SERVICER を始めます。この計算は、前の回が終わったかどうかを確かめずに予定に入れられます。ふだんは2秒の中で終わるので問題になりません。
ところが計算の時間が足りないと、SERVICER が2秒の中で終わらないうちに次の回が始まり、まだ終わっていない回もコアセットと VAC 領域を借りたままになります。こうして作業場所が1つずつ埋まっていき、新しいジョブを始めようとしたときにコアセットに空きがなければ 1202、VAC 領域に空きがなければ 1201 の警報が出ます。
警報のあと、LGCは再起動します。ただし、すべてをやり直すわけではありません。あらかじめ「再起動しても守る」と印をつけてあった処理だけを組み立て直し、SERVICER はいちばん新しい1回だけを残します。古い SERVICER や、守る印のない表示(VERB 16 NOUN 68 など)は捨てられます。仕事が減るので、降下に欠かせない計算は続けられました。
下のシミュレーションの見方
A は、終わった2秒ごとに時間の使いみちを1段ずつ並べたものです。右端に「空き」が残れば間に合い、「→ 持ち越し」は2秒の中で終わらなかった SERVICER の数です。B は作業場所(コアセット8つ、VAC 領域5つ)で、SERVICER の番号は A と同じです。C は DSKY と、その時刻の交信です。警報の16秒前から4秒後までは、自動で実際の速さ(×1)になります。
説明のための模型です。SERVICER が2秒ごと、16/68 の表示が1秒ごとに作業場所を借りること、作業場所の数、優先度、1201・1202 の出る条件、再起動でいちばん新しい SERVICER だけが残ることは、着陸船のプログラム(Luminary 99)と資料のとおりです。それぞれの仕事にかかる時間など分からない値は、警報が記録と同じ時刻・同じ種類で出て、しかもそのとき SERVICER が3つ以上重なっている(当時のプログラマの説明)ように合わせました。時刻は記録と数秒ずれます。
6「Go」の判断
"WE'RE GO ON THAT ALARM"102時間38分26秒、アームストロングが「プログラム警報」、4秒後に「1202だ」と伝えます。16秒後には「1202について教えてくれ」。ヒューストンの答えは102時間38分53秒、「その警報なら続けてよい(We're Go on that alarm)」でした。
判断したのは、管制室で誘導を担当していたスティーブ・ベイルズと、その後ろの部屋でコンピュータを担当していたジャック・ガーマンです。打ち上げの数か月前、地上の訓練でベイルズは、プログラム警報を見て模擬の着陸を中止させました。中止すべき警報ではありませんでした。フライト・ディレクターのジーン・クランツは、出るかもしれない警報をすべて書き出すよう命じ、ベイルズはこの仕事をガーマンに任せます。ガーマンの手書きの一覧は、管制卓のガラスの下に置かれていました。1202についての答えは「しょっちゅう出るのでなければ大丈夫」でした。
フレッド・マーティンは1994年の回想で、着陸のときコンピュータが「ふだんの80%ほどの速さで動いているように見えた」「警報は約10秒おきに出ていた」と書いています。どの計算が飛ばされても着陸に大きな影響はない、というのがガーマンの見立てでした。
2回目の1202のあと、オルドリンは「16/68 を出すと出るようだ」と伝え、ヒューストンは「DELTA-H はこちらで見ておく」と答えました。
7なぜ起きたか
THE 800 Hz PHASENASAの飛行報告によると、計算の時間を奪っていたのは、着陸には使わないランデブー・レーダーでした。月を離れたあと司令船とドッキングするためのレーダーで、そのアンテナの向きを読む装置(CDU)が、ありもしない角度の変化をLGCに送り続けていたのです。
レーダーのモードスイッチが「LGC」以外(AUTO か SLEW)の位置にあると、アンテナの角度を測る検出器は姿勢制御の装置から来る800Hzの電気で動きます。一方、CDUが角度を読むときの基準は、誘導の装置から来る別の800Hzです。この2つは周波数はそろえてあったが、位相はそろえていなかった。位相がずれると、CDUはその差を角度の変化と思い込み、角度の変化を表すパルスを1秒に最大6,400回、2軸で12,800回、LGCに送ります。パルスは何よりも先に処理され、1回に11.7マイクロ秒かかるので、合わせて計算時間の約15%が消えました。
降下のいちばん忙しいとき、LGCはふだんから力の約90%を使っていました。当時のプログラマのドン・アイルズによると、着陸のプログラムの余裕は、着陸レーダーが地面をとらえたあと約13%、VERB 16 NOUN 68 を出すと10%以下。そこへ約15%を奪われては足りません。
アイルズは、アポロ11号のレーダーのスイッチの位置そのものは問題を起こさないはずのものだったと書いています。800Hzの位相の問題は、最初の着陸船(LM-1)の発射場での試験で見つかって記録されていましたが、直されていませんでした。
8そのあと
LUMINARY 1B AND AFTER次の飛行からのプログラム(Luminary 1B)では、レーダーの電源が入っていないかスイッチが「LGC」でないとき、CDUの値を0にして、意味のないパルスがLGCに届かないようにしました。乗組員が降下を見守る表示も、計算の時間をあまり使わないように変えています。
1969年11月14日、アポロ12号は打ち上げから36.5秒後と52秒後に雷に打たれました。燃料電池が3つとも切り離されて警告灯がいっせいにつき、管制室に届くデータも読めなくなります。電気系統の担当のジョン・アーロンは、訓練で見た似た症状を思い出して「SCE to AUX(信号を整える装置を予備に)」と伝え、アラン・ビーンがそのスイッチを切り替えると、データが戻りました。ロケットの誘導は影響を受けておらず、12号はそのまま月へ向かいました。
アポロ14号では、着陸の前に、計器盤の「ABORT(中止)」ボタンが押されてもいないのに押されたという信号を出すことが分かりました。降下中にこの信号が出れば、LGCは着陸をやめて上昇を始めてしまいます。アイルズたちは、いくつかのレジスタを書き換えて、LGCに「中止はもう始まっている」と思い込ませ、信号を無視させる手順を考えて、地上から無線で伝えました。宇宙飛行士がDSKYのキーを61回打ってその手順を入れ、着陸は無事に行われました。地上から宇宙のコンピュータを立ち直らせた例は、ここにもあります。
9年表
CHRONOLOGY| 日時(世界時) | 打ち上げからの時間 | できごと |
|---|---|---|
| 07-16 13:32:00 | 0:00:00 | 打ち上げ |
| 07-16 16:16:16 | 2:44:16 | 月へ向かう噴射(TLI) |
| 07-17 16:17:00 | 26:45:00 | 軌道修正 |
| 07-19 17:21:50 | 75:49:50 | 月を回る軌道へ(LOI) |
| 07-20 17:44:00 | 100:12:00 | 着陸船を切り離す |
| 07-20 19:08:14 | 101:36:14 | 降下軌道へ(DOI) |
| 07-20 20:05:05 | 102:33:05 | 動力降下の開始(PDI) |
| 07-20 20:10:22 | 102:38:22 | 1202(1回目) |
| 07-20 20:11:02 | 102:39:02 | 1202(2回目) |
| 07-20 20:13:32 | 102:41:32 | P64(接近の段階) |
| 07-20 20:14:18 | 102:42:18 | 1201 |
| 07-20 20:14:43 | 102:42:43 | 1202(3回目) |
| 07-20 20:14:58 | 102:42:58 | 1202(4回目) |
| 07-20 20:15:22 | 102:43:22 | P66(手動で降下) |
| 07-20 20:17:40 | 102:45:40 | 接地 |
出典
- NASA「Apollo 11 Mission Report」(MSC-00171、1969年11月)軌道の表(Table 7-II〜7-V)、降下の出来事の表(Table 5-I)、着陸地点(Table 5-IV)、警報の原因(16.2.5)
- NASA SP-4029「Apollo by the Numbers」Apollo 11 Timeline5回の警報の時刻
- Apollo Lunar Surface Journal「The First Lunar Landing」交信の記録(機内の録音を含む)
- Don Eyles「Tales from the Lunar Module Guidance Computer」(2004)計算時間の余裕、警報の順番、再起動で残るもの、800Hz の位相、アポロ14号
- Virtual AGC「Luminary 099」(着陸船のプログラムのソース)コアセット8つ・VAC 領域5つ、1201・1202 の出る場所、SERVICER と VERB 16 の予定の入れ方
- Raytheon「Apollo Guidance Computer」(1965年)語の長さ、メモリ、速さ、重さ
- Floyd V. Bennett「Apollo Lunar Descent and Ascent Trajectories」(NASA TM X-58040、1970年)降下の計画の値(速さ、距離)
- Fred H. Martin「1201 and 1202 alarms」(1994年、ALSJ に収録)80%ほどの速さ、約10秒おきの警報、ガーマンの見立て
- collectSPACE「Jack Garman, NASA engineer who 'saved' Apollo 11 moon landing, dies at 72」(2016年)訓練での中止、クランツの指示、手書きの警報の一覧、「しょっちゅう出なければ大丈夫」
- NASA「Lightning Strikes Twice」 ・ AmericaSpace「'SCE to Aux'」(2020年)アポロ12号の落雷(36.5秒・52秒)、ジョン・アーロン、アラン・ビーン
- JPL Horizons月・太陽の位置