第二章 遠謀天外(中)——修復和學習

恆常月發表於2013-08-30

修復和學習

格倫•裡夫斯1960年出生併成長在南帕薩迪納[2]。他老爸是加利福尼亞運輸部門負責高速公路的一個土木工程師和管理人。當他還是一個小男孩的時候,他就對外太空充滿好奇。在他的十五歲生日宴會上,後院的樹上掛滿了畫著月亮、行星和恆星的剪紙板。而另一群更加成熟的夢想家正與他比鄰而居——南帕薩迪納是噴氣推進實驗室(JPL)的發源地。

依附於聖蓋博山[3], JPL蔓延近兩百英畝。它由加州理工學院在十九世紀三十年代建立。隨著斯普特尼克1號的發射[4],JPL設計了美國的第一顆衛星——探索者1號。這顆人造衛星在1958年發射,僅僅在裡夫斯出生前的兩年。JPL可以說是專門為美國國家航空航天局(NASA)建立的實驗室。它的僱員們為探索月球和其他行星設計航天器和機器人任務。

“我年輕的時候我們時常途經JPL”,裡夫斯回憶說:“當我們經過時媽媽指著它對我說‘你有一天會在那裡頭工作的。’那時的我甚至不知道這地方是幹什麼的”。在高中的時候,裡夫斯探究科學,但並不熱心。他喜歡物理但並不擅長。他以自學的方式進修數學,但卻落後於人。他最大的熱情是做一個汽車修理工。他坦承:“比起為將來的事業打好基礎,我更熱衷於有一份工作、能賺點錢。”

受高中教育的時候,出於他父母親的堅持,裡夫斯意識到他應該上大學,但他並不清楚自己要去哪個學校、學習哪門專業。他原計劃去加利福尼亞大學的聖塔芭芭拉分校,但不久他陷入了和當地一個女人的羅曼蒂克之中。於是他決定前往位於波莫納的加州理工州立大學。在那裡他進修了酒店和餐飲管理、會計和資訊系統的介紹性課程。這是他第一次使用電腦的經歷,需要通過穿孔卡片用Fortran語言寫指令[5]。“如何解決這種非常簡單的程式設計的智力遊戲大大激起了我的興致,於是我對自己說:‘好吧,或許我喜歡幹這事’。”裡夫斯詳述道。

裡夫斯主修了計算科學,他依舊住在南帕薩迪納,每天往返于波莫納。一次偶然的相遇改變了他的一生。有一天在去往學校的路上,他注意到他的一個教授約翰•羅爾正在一個公交汽車站坐等巴士。裡夫斯恰好就是在前往羅爾課堂的途中。他意識到如果羅爾一直在等下去的話這課就上不了了。他搭載了羅爾一趟。在開車期間的對話中,羅爾談起了他在JPL為深空任務開發軟體的工作。

之後,羅爾成了裡夫斯的指導教授,併為裡夫斯在JPL安排了一個暑期工作。這份短期工作在1983年裡夫斯畢業後成為了他的全職工作。他被安排為麥哲倫號金星探測器的測試裝置編寫程式[6]。這個以葡萄牙人斐迪南•麥哲倫命令的航天器,它的任務是為繪製金星表面的地圖。

那個時期航天器測試裝置扮演著兩方面的角色。一個是作為地面控制裝置,作為和航天器交流的電子裝置;另一方面,它必須模擬航天器自身,包括還沒構建出好的那一部分。因為這方面的功能,這個測試裝置讓開發團隊有可能在最終的組裝完成前構建、測試和模擬航天器的飛行。

裡夫斯的老闆羅伯特•安德森打破傳統用許多相互連線的單板計算機代替了基於一個主機的航天飛船測試裝置。回想起來,微處理器的出現讓這個決定成為合乎常理的選擇。微處理器簡化了整個架構:許多相互獨立的單板機減少了整個系統崩潰的可能性,並消除了單個主機存在的潛在瓶頸。裡夫斯認為安德森是對他影響最大的導師:“他教導我有時你必須回到原點,像文章裡一張白紙一樣重新開始。”他這種觀點指出從遺贈或者繼承得到的資本並不總是你引導你前行的可靠途徑。

“麥哲倫號”專案之後,裡夫斯離開了JPL一陣子。像許多單位一樣,離開然後重返是一種提升工薪和職務的方式。1991年,他回到JPL,成為“卡西尼號”探測器測試裝置開發軟體團隊的領導者[7]。“卡西尼號”的任務是探索土星的光環和衛星。由於“卡西尼號”比“麥哲倫號”的裝置要多得多,裡夫斯擴充了安德森的分散式架構,新增了更多數目的介面和模擬需求。航天器上的每一個裝置都有一個對應的專用計算機、軟體和特定的硬體介面。大約有20臺計算機是協調並保持實時同步的。它們記錄資料,自動進行一致性測試,併為人類地面的操作者提供連線。

“卡西尼號”在1997年10月成功發射。在它的任期中,“卡西尼號”在2004年6月30日進入了土星軌道。2005年1月它最主要的一個組成部分——由歐洲空間局構建的“惠更斯號”飛入到土星的一顆命名為“泰坦”的衛星中,並在它登陸地表之前送回了大氣成分的報告[8]。

在十九世紀九十年代,NASA也啟動過一系列飛往火星的機器人任務。讓我們略為驚訝的是讓“無翅的兩足動物”登陸比讓它飛行困難得多。挑戰源於物理力學上的難題——如何在登陸時不讓裝置墜毀。一旦到了地表,這些硬體比須應對粉塵、極端的溫度變化及與地球的通訊。這些機器人任務顯然需要新的設計理念。由於他在之前專案的成功,裡夫斯被任命領導“火星拓荒者”任務的航天器“飛行軟體”開發團隊[9]。 這個新的挑戰是相當讓人望而怯步的。這個航天器必須擔當三個相互獨立的任務:發射和飛行至火星、成功登陸、然後扮演氣象站和“旅居”漫遊者通訊站的角色。它必須在一次近乎墜毀的登陸倖存下來然後實現這一切,並適應有限的能源,並承受強大的輻射衝擊。

發射之後,沒有人類可以觸碰到航天器上的裝置,或者實地探測它。甚至電子通訊也很微弱。如果指向地球的天線偏離了一點,你就沒法收到航天器的訊號,因為它傳輸所需的能量相當於一個100瓦特的燈泡。“同時它還相當慢——在往返過程中需要許多分鐘”,裡夫斯解釋。面對著這麼多潛在的難題,事情很有可能會出錯。在所有火星任務中有50%失敗了,並且大部分的失敗導致航天器災難性的損失。許多航天器構建了冗餘的硬體,並事前小心翼翼地考慮過會出現哪些問題和怎樣導致失敗。但不是每件事都能被預料到的。沒有哪一次火星任務是毫無差錯的。

關於如果處理突出其來的問題有兩種理念:一種是放棄這次任務;另一種是嘗試變通的方法。曾做過汽車修理工的裡夫斯,相信在構建工具排除他自己不曾預料到的故障的工具時要儘可能多地預測可能出現的問題——包括他稱為“一無所知的未知”。當你必須去搶救一個數百萬美元的航天器時這個理念自然而然會出現。“修復它”的理念確保從問題學習到的教訓成為工程知識庫的一部分。“如果你放棄了,那麼你就什麼都學不到,”裡夫斯說,“你不會知道以後怎麼去修復它,因為你不會知道哪裡出了差錯。” 正如大多數工程師所知道的,故障有好壞之分。如果故障有單一的根源、並且是你知道在以後可以修復的,那麼這就是良性的故障;相反,如果你找不到根源,那麼只能浮想聯翩,而且你不知道接下來該怎麼做。畢竟故障原因可能的範圍是非常龐大的——某一種型別裝置的工藝問題,惡劣的環境,灰塵,輻射,和外星人——能數出來的只是冰山一角。“我們還沒有足夠的航天器飛行經驗用以真正瞭解太空環境。我們有了一些背景知識,但我們依然有些是通過猜測的,”裡夫斯坦承。

至此,故障還都算是良性的;確實,目前所有的故障都能在地球上發生。為便於理解錯誤和它們的解決方案,我們需要了解一點關於除錯安裝的細節。在每次航天器發射進去太空時,JPL同時構建了一個留在地球上的被稱為複製品的航天器。

航天器被設計用於不時地傳送資料和自身的狀態資訊。比如,一個基本的“系統正常”的狀態資訊傳達回地球、但不包括科學資料,那麼就有可能是一個科學儀器出了故障而不是整個裝置。地面控制可以通過發出指令來扮演啟用除錯的角色,從而改變航天器的行為,顯而易見的方式是通過上傳修正過的軟體,或者重新啟動航天器的各種組成部分。就像我們經常在個人電腦上通過重啟機器來修復故障一樣,我們在控制航天器的計算機上也做同樣的事情。但就像在地球上一樣,有時重啟並不能夠解決問題。

“火星拓荒者”由兩個車輛組成:“旅居者”號漫遊車(一個設計用於在星球表面做實驗的可移動機器人)和用於提供通訊、影像,以及能作為氣象站的“登陸者”號。裡夫斯為負責“登陸者”號的工作。他的職責是開發能夠使航天器從地球進入火星的軌道、登陸、然後在地表執行其他運作的一系列軟體。漫遊車獨立地執行;通訊通過“登陸者”號和地球保持聯絡。

在全世界為之歡呼的1997年7月4號,“拓荒者”號在火星表面登陸,在它的安全氣袋上非常高興地彈跳。它開始收集科學資料並執行任務。但幾天之後,“登陸者”的計算機不斷開始重複地自動重啟,停止了所有常規的工作。裡夫斯被要求找出原因。“如果計算機坐落在你面前,那你只要同時按下‘Ctrl-Alt-Delete’進行重新啟動,就像在太空基本理論是一樣的。” 裡夫斯說,“困難的部分是我們需要知道在重置之前這車輛到底發生了什麼事。”

幸運的是,裡夫斯的團隊設計了可以追蹤計算機執行任務時具體做了些什麼的能力。他們有一個記錄所有傳送資訊的日誌,包括在軟體上出現過哪些重要事件,和哪些任務在什麼時候被執行過。除錯團隊[10]最終發現是一個低優先順序的任務阻塞了高優先順序的任務。這就像計程車的車流佔據了交叉路口,阻塞了一輛正急速前往醫院的救護車。

“登陸者”的作業系統,是由一個叫“風河”的公司開發的[11]。它允許高優先順序任務的執行不被低優先順序的任務所阻斷,例外的是當低優先順序的任務鎖住了高優先順序任務所需的部分資源時。在這個案例裡,這個資源是一個準備將含有科學資料的資訊傳遞給其中一個科學加工任務的佇列。“我們的第一個問題是,為什麼這個低優先順序任務鎖住狀態保持了這麼久?這個手頭上在地球就一個很好的試驗檯。”裡夫斯說道。排除故障的團隊可以在試驗檯上使用一模一樣的軟體,就像在航行的車輛上。在幾天的除錯期間,他們可以讓同樣的問題發生。問題變得非常明顯——這是一個優先順序倒置的現象(詳見文字框裡關於優先順序倒置的敘述)。

要修復這個問題看起來挺簡單——只要替換掉軟體就好了。風河公司的軟體提供了一個進行更換的簡便方法。但這個在百萬英里外要怎麼做到呢?在你的桌面上,安裝一個修復意味著可以安裝一個新的CD盤。整個將新軟體塊傳輸到電腦的過程包括將這個媒介放置到電腦裡頭,然後執行安裝到它裡面的程式。在“旅居”漫遊者的情況下,裡夫斯和他的團隊必須將軟體越過百萬公里外進行替換,這讓修復的運輸部分變得相當有挑戰性。資訊從地球傳送到航天器的速度是每秒不高於1200位元。裡夫斯希望避免傳送整個軟體,因為它的大部分不需要改變。相反,他只傳送了在原有程式碼和新程式碼之間有差異的部分。

更換一個軟體有點像心臟手術。在你喚醒病人之前你希望一切準備就緒。在“拓荒者”的這個案例,裡夫斯的團隊預見到了更換軟體的需要。他們之前的設計預留了允許兩個軟體的拷貝同時存在的空間:一個啟用的和一個沒有啟用的。因此,他們可以將從地球上做的改變整合到已經上傳到航天器的拷貝,並將其放置在未啟用的硬碟裡。他們接著核對這個軟體是否已正確地接收到資訊。只有在這之後他們才啟用這份拷貝。為什麼這個問題在測試階段就沒有被發現呢?一個快速的回應是歸咎於時間的壓力,它促使測試者無論什麼時候當這個問題出現時就簡單地重啟計算機。但經過深思後的回答涉及到組織學習的天性。裡夫斯是這樣描述它的“當你在構建一個航天器的時候,你實際上是在學習怎麼操作它。當你操作它變得越來越熟練後,你會讓它做越來越多的事,因為你已經更好地理解它是如何工作和哪些是你能夠完成的。在測試的早期,你實際上是相當畏首畏尾的。甚至雖然你測試它是為了準備使用它,但你還是沒有足夠苛刻地驅動它。”當航天器登陸之後,科學家們變得越來越自信;他們廣泛地使用各種新的儀器。

裡夫斯的有些同事總結這次教訓認為“測試你航行時要用的,航行時只用你測試過的”。也就是說,航天器不應該被用來執行任何測試階段所沒有做的任務。在他們看來,問題的產生正是違反了這個原則。在理想狀態,這個原則是有意義的,但在殘酷的環境下,而且在這個案例中,日益膨脹的自信心讓“在航行中只使用你測試的”的目標在實踐上變得可望而不可即。從中學到的另一教訓是“為不可預見的做好準備”。

2000年,裡夫斯被任命參與火星探測漫遊者任務。他很快學到了另一課:在火星上,硬體壽命很難維繫很久。溫度可以在白天的0攝氏度(32華氏度)和夜間的-100攝氏度(148華氏度)之間波動。電池可以讓儀器在夜間保持在-40攝氏度(-40華氏度),但這種極端的劇變會導致硬體出現故障,斷開爆點,最終引起電路問題。預測只有90天壽命的機動車,不可能接受修復故障時需要花去15天。一旦問題出現,裡夫斯和他的團隊必須儘快解決他們。

而且,現在裡夫斯得為兩個移動機器人編寫通訊軟體——兩個是為了允許出現故障。移動提出了一個抉擇:從地面進行精確的控制,還是讓機器人擁有自治能力。在計算科學領域,這是在高層次和低層次控制的選擇。地面控制是要給出諸如“左前輪轉動六次,右前輪轉動五次”這樣的一系列指令?還是像“驅動機動車從這邊移動那邊,注意避開障礙物”這樣的指令?或者簡單到像“搜尋點‘酷’的東西!”?第一個選擇將使大部分的科研活動無法完成。

與火星表面物體通訊的另一個問題是這顆紅色星球也在轉動著。當航天器在太空時,地球轉動著,總有一個地面通訊的站點會一直觀察著它並和它交談,所以它是24小時覆蓋的。但是,當火星自轉時,漫遊車會隨時這顆星球轉動,最終它的指向將偏離地球,在那裡它不再能夠與地球上任何站點進行通訊。

“找點‘酷’的東西”這個選擇需要高層次的科學知識。許多機器人探測者是為了持續不斷的發現而出現的。如果機器人在一個岩石上發現一個不同尋常的化學物質,地面控制會引導機器人執行更多的實驗。現階段還是由科研團隊決定“什麼是酷的東西”。裡夫斯相信這在未來將發生改變。當探測者去到超過50小時個光時外的地方,來自地球的控制就沒法告訴登陸者去觀察特殊的物體。“機器人將需要更多的自主性,”裡夫斯預測。計算裝置將需要大量更科學的專門技能,並有能力修復它們自己。這正是裡夫斯在噴氣推進實驗室的同事阿德里安•斯多葛所探索的。

[3]聖蓋博山San Gabriel Mountains是美國加州的一個山脈,位於洛杉磯縣北部和聖貝納迪諾縣西部,介於洛杉磯盆地和Mojave Desert之間。山脈的最高峰是聖安東尼奧山。

[4]斯普特尼克1號是第一顆進入地球軌道的人造衛星。在蘇聯於1957年10月4日於拜科努爾航天中心發射升空。由於這時正值冷戰,史潑尼克1號的發射震撼了整個西方,在美國國內引發了一連串事件,如史潑尼克危機、華爾街發生小股災。同時亦開始了美、蘇兩國之間的太空競賽。

[5] Fortran,是由Formula Translation兩個字所組合而成,意思是“公式翻譯”。它是世界上第一個被正式採用並流傳至今的高階程式語言。

[6]麥哲倫號是美國國家航空航天局發射的金星探測器,以葡萄牙探險家斐迪南•麥哲倫命名,計劃主要是研究金星的環境與大氣層,也是航海家1號於1977年發射之後,NASA發射的首顆行星探測器。

[7] 卡西尼-惠更斯號是美國國家航空航天局、歐洲空間局和義大利航天局的一個合作專案,主要任務是對土星系進行空間探測。卡西尼-惠更斯號土星探測器是人類迄今為止發射的規模最大、複雜程度最高的行星探測器。卡西尼號探測器以義大利出生的法國天文學家,土星光環環縫的發現者卡西尼的名字命名,其任務是環繞土星飛行。惠更斯號是卡西尼-惠更斯號的一個組成部分,其也是人類第一個登陸土衛六的探測器。

[8] 土衛六(Titan,又稱為泰坦星)是環繞土星執行的一顆衛星,是土星衛星中最大的一個,也是太陽系第二大的衛星。荷蘭物理學家、天文學家和數學家克里斯蒂安•惠更斯在1655年3月25日發現它,也是在太陽系內繼木星伽利略衛星後發現的第一顆衛星。

[9] 火星拓荒者是一艘在1997年攜帶探測車登陸火星並建立基地的美國太空船。它包括命名為“卡爾薩岡紀念站”的登陸者,和一輛重量很輕、命名為“旅居者號”的輪型機器人火星車 。

[10] 除錯團隊包括了噴氣推進實驗室的裡克•阿卡茲(Rick Achatz,)戴夫•卡明斯(Dave Cummings,),金•高斯特羅(Kim Gostelow), 唐•邁耶(Don Meyer), 卡爾•施耐德(Karl Schneider), 戴維•史密斯(Dave Smyth), 史蒂夫•斯托爾珀(Steve Stolper), 格雷格•維勒茲(Greg Welz),吉岡帕姆(Pam Yoshioka at), 和火星拓荒者上使用的VxWorks 作業系統供應商風河公司員工:邁克•德利曼(Mike Deliman),布瑞恩•拉薩拉(Brian Lazara),和麗莎•士丹利(Lisa Stanley) [原書注]。

[11] 風河系統公司(英語:Wind River Systems Inc.),在中國常被稱作風河公司,是一間以發展嵌入式系統為核心業務的美國軟體公司,同時提供對應的嵌入式系統開發工具、中介軟體和其它軟體。1981年由Jerry Fiddler 與 David Wilne創立於美國加州柏克萊。2009年6月4日被英特爾以8.84億美元併購,成為英特爾旗下的子公司並保持自身獨立性。他們最著名的產品是VxWorks嵌入式作業系統,另一個作業系統Wind River Linux也享有盛名。

[12] 火星探測漫遊者是美國國家航空航天局2003年的火星探測計劃。這項計劃的主要目的是將勇氣號和機遇號兩輛火星車送往火星,對火星這顆紅色行星進行實地考察。任務目標是在岩石和土壤中搜尋水活動的線索。

相關文章