Програміст на Марсі: Shutdown Dammit Until

— Х'юстон, у нас проблеми.
— Ні, Марк, це в тебе проблеми.


Як спиться програмістам і тестувальникам марсохода за 400 мільйонів доларів? Особливо якщо на 18 сол апарат не вийшов на зв'язок.



Марк Адлер — американський розробник програмного забезпечення, який працює у сфері дослідження космосу. Найбільше він відомий завдяки своїй роботі в області стиснення даних, будучи автором хеш-функції Adler-32, а так само як автор бібліотеки для стиснення даних zlib і gzip. Він брав участь у розробці Info-ZIP і формату зображень Portable Network Graphics (PNG). Адлер також був відповідальним за місію марсохода «Спірит» в рамках програми «Mars Exploration Rover».

Разом з компанією Edison (яка спеціалізується на розробці захисних релейних систем і додатків для моделювання дослідів), розповімо вам про розробника ПО марсохода і про те, як розвивалися події, коли намагалися виправити помилку софта на відстані 225 мільйонів кілометрів.

Біографія
Адлер народився в Маямі (штат Флорида), був єдиною дитиною Девіда і Берти Адлер. Він отримав ступінь бакалавра наук у галузі математичних розрахунків і майстри наук в області електротехніки в Університеті Флориди в 1981 І 1985 р. відповідно. У 1990 р. Адлер став кандидатом наук з фізики в Каліфорнійському технологічному інституті. Проживає в р. Ла Каньяда (штат Каліфорнія) місці з Діаною Сейнт Джеймс, у них двоє дітей – Джошуа і Захарі. Діана працює в Каліфорнійському технологічному інституті, займається постановкою і бере участь у театральних виступах.



За спільну роботу з Дж. Гейлли (автор gzip) отримав нагороду 2009 USENIX за внесок в розробку FLOSS алгоритмів по стисненню даних. [Джерело — STUG Award]

Кар'єра
Після захисту докторської Адлер працював у компанії Hughes Aircraft у підрозділі Космосу і Комунікацій над різними проектами, в тому числі аналіз ефектів рентгенівських спалахів на супутникові канали, розробка помехоустойчивоого кодування (error-correcting codes), розробка протиугінного автомобільного ключа, дослідження стиснення відео і зображень (сплески хвилі рішень і MPEG-2). [Джерело — Caltech: About Mark Adler]

Дослідження Марса
З 1992 р. по 1995 р. Адлер був провідним інженером місії Кассіні-Гюйгенс. Після цього був призначений на посаду координатора програми з дослідження Марса Jet Propulsion Laboratory (JPL) з 1996 р. по 1998 рік. Таким чином, він був відповідальним за планування місій з дослідження Марса з 2001 року.

В період 1999-2000 працював над проектом з доставки зразків з Марса (Mars Sample Return), в рамках якого планувалося здійснити три місії на Марс (2003-2005) і привезти зразки на Землю в 2005 році. Однак проект був відхилений через провал місії Mars Polar Lander.

Mars Exploration Rover


Адлер ініціював проект з дослідження Марса Mars Exploration Rover (марсоходи «Спірит» і «Оппортьюніті») і брав активну участь у його здійсненні.

В даний час Адлер є главою проекту Low Density Supersonic Decelerator – розробка кошти по спуску на Марса вантажів вагою від двох до трьох тонн.

Роздуми Марка про Марс і про свою роботу (англ.).

Зараз Марк керівник проекту «Надзвуковий сповільнювач низької щільності» Low Density Supersonic Decelerator або LDSD)



«Spirit». 18-й сол. АномаліяРозповідає Марк Адлер. 22 вересня 2006 р. Архівні матеріали Планетарного Співтовариства.

У попередньому пості я обіцяв розповісти про те, що сталося зі «Спірит» через тиждень після того, як Президент оголосив про національну програму «Погляд на дослідження космосу».

І так, побіжний погляд зсередини на те, як управляти безцінної національної власністю.

21 січня 2004 р. 18 марсіанських днів (солов) пройшло з того моменту, як «Спірит» успішно приземлився на Марсі й близько тижня після його успішного виїзду з посадочної платформи на поверхню Марса. Все йшло дуже добре, що ми насилу в це вірили. Це було насправді дивно спостерігати: ровер працював на Марсі набагато краще, ніж під час тестування. «Спірит» був задіяний у цій геологічної розвідки на поверхні чужого світу! Ми почували себе найщасливішими людьми на Землі.

Що ж, незабаром удача відвернулася від нас.

Дженніфер Троспер і я по черзі виконували обов'язки по тактичного управління місією «Спірита». 18-й сол чергувала Дженніфер, а у мене був вихідний. Щоправда, я все одно прийшов у ЛРД близько полудня дати інтерв'ю для документального фільму. На виході я зіткнувся зі Стівом Скваерсом, науковим керівником програми MER (Mars Exploration Rovers). Він якраз входив, щоб дати інтерв'ю. Побачивши мене, Стів сказав: «Ти вже в курсі щодо «Спірита»?» Питання і серйозною тон Стіва миттєво висмикнули мене з сонного стану. «Що ти маєш на увазі?» — втупившись на нього, запитав я. Стів сказав, що ми не отримали жодного сигналу від «Спірита» в належний час, ні через антену з високим коефіцієнтом посилення прямо на Землю, ні через ретранслятор орбітального апарату «Марс Одіссей».

О боже.

Якби тільки не було зв'язку в першому випадку, це можна було б з легкістю списати на негоду, на проблеми з Мережею дальньої космічного зв'язку, на купу всього. Зв'язок через сотні мільйонів кілометрів — не проста справа і у тебе часто виникають проблеми. Але, судячи з нашого досвіду на той момент, зв'язок через «Одіссей», який знаходився на орбіті на відстані всього лише декількох сотень кілометрів і відмінно працював, не повинна була підвести.

Все вказувало на те, що проблема була в марсоході, і всі дуже серйозно.

Космічні місії ризиковані. Ми до цього звикли. Ми ретельно обмірковуємо найбільш небезпечні моменти. Для програми MER найбільші ризики були, по порядку: доставка, спуск і посадка, або, як ми їх називали, шість хвилин жаху, разом з дуже ризикованою запуском з Землі, а також з після-посадковими операціями по з'їзду з платформи і розгортання ровера і від'єднання кабелів.

Запуск, посадка і вихід. Будь-яке з цього змусить тебе посивіти. З «Спіритом» ми прорвалися через це. Всі ризиковане залишилося позаду, ми вважали. А далі, звичайно, при належній увазі і турботі, великі небезпеки більше не передбачалося. Легке і розмірене плавання вперед.

Все це тільки додало тривожності. Що, чорт візьми, сталося?

Я негайно подався в операційну зону, де я і багато інші провели безвилазно наступні три доби. Відгулів в подібній ситуації не існує. Наступні три сола Дженніфер була відповідальною за планування завдань, а я — за їх виконання. Плануванням займаєшся протягом марсіанської ночі, а тактичні операції робиш, коли марсохід не спить вдень. Тому Дженніфер і її команда намагалися визначити, що робити, а я зі своєю командою робили це. Або, принаймні, намагалися.

На 19-й сол ми просто намагалися зв'язатися з «Спіритом», щоб отримати від нього зворотний зв'язок. Перш ніж почати, я, за традицією, виконав пісню у центрі керування місією, присвячену подіям дня. Для 19-ого сола я вибрав «S. O. S.» групи Abba. Загалом, це майже все, до чого був причетний «Спірит» в той день. Спроби не увінчалися успіхом, був отриманий лише сигнал передавача марсохода. Коли немає інформації для передачі, він все одно включається і подає важливий сигнал-свідоцтво про те, що він все ще там. Він не повністю втрачений. Хоча крім цього ніякої іншої інформації отримано не було, ми визнали це хорошим днем. Свій звіт щодо ситуації в той день я закінчив на оптимістичній ноті: «У довгостроковій перспективі плануємо відновити стан апарату, провести діагностику і коригування події і повернутися до нормального графіку робіт». Звіти про 20-му і 21-му солах я закінчив тими ж словами.

На 20-й сол ми зробили ще більш старанні спроби витягнути інформацію з ровера. Адже без неї ми не мали ні найменшого уявлення, що робити, що робити, як відновити працездатність. Після численних спроб, нам вдалося отримати поточну інформацію від радіопередавача. Велика частина її була повторюваної тарабарщиною, що вже саме по собі було загадкою, але все-таки цього пакета даних було достатньо для розуміння ситуації з «Спіритом». Так, чудова новина, але сама ситуація радості не викликала.

Ми побачили, що внутрішня температура марсохода сильно перевищувала норму, а заряд батареї був набагато нижче очікуваного. Ці два чинники чітко вказували на те, що ровер не збирався переходити в сплячий режим, як повинен був. Зазвичай, його комп'ютер працює п'ять або шість годин на день. Це зберігає дорогоцінну сонячну енергію, що зберігається в акумуляторі, а також запобігає перегріву пристрою. Що ж, «Спіріт» не спав уже тривалий час, і, можливо, вже не засне.

У нас на руках був один хворий марсохід. У «Спірита» була безсоння, лихоманка, він весь час слабшав, незв'язно бурмотів і вже довгий час не слухався команд.

Погано. У нас на Марсі один марсохід помирав, а через два дні іншої, «Оппортьюніті», повинен був пройти через доставку, спуск і посадку. Протягом тижня ми могли запросто опинитися взагалі без марсоходів.

20-ого сола головним нашим завданням було змусити ровер заснути. Ми сподівалися, що команда «відключитися» досягне пристрою в рамках комунікаційної сесії. Таким чином, ми змогли б побачити передчасне закінчення сесії, що підтвердило б отримання пристроєм команди. І так, ми послали команду відключення пристрою до певного часу — SHUTDWN_DMT_TIL, яка має пріоритет над будь-якими діями, здійснюваними пристроєм в поточний момент (назви команд були скромно прикрашені гумором).

Ми були впевнені в тому, що це спрацює. Ух… Ми змусили «Спірит» заснути. Для перевірки надіслали запит на пристрій. Який повинен був залишитися без відповіді — ровер в сплячому режимі, він не може ні отримувати, ні відповідати на сигнали.

І тут… ми отримали відповідний сигнал.

Що за ...? «Спірит» повинен був заснути! Але немає. Він вирішив затриматися на роботі допізна.

Положення Землі змусило нас спроби відкласти до наступного дня. В цей час ровер продовжував витрачати заряд, а електроніка перегріватися. У нас стрімко закінчувалося час.

21-й сол. У нас з'явився план. Основною версією про ситуації, проблеми, принаймні, яка залишала нам місце для маневру, на той момент була наступною: комп'ютер марсохода застряг у «перевантажної петлі». Відповідь програмного забезпечення на проблему, яку воно не може вирішити — перезавантаження. Те ж саме, що робите ви, коли ваш комп підвисало. Але так як там не було нікого, хто міг би натиснути на кнопку скидання, марсохід робив це автоматично. Однак якщо софт стикається з помилкою під час перезавантаження, тоді він приречений перезавантажуватися вічно.

Розробники завбачливо запрограмували затримку між перезавантаженнями, під час якої можна поговорити з марсоходом. Цим можна пояснити його уривчасте виконання команд — позитивний результат буде лише у випадку отримання пристроєм сигналу в межзагрузочный інтервал.

Ідея перезавантаження проста: все, що викликало проблему попередньої сесії, зникне в новій. Але в даному випадку проблема залишалося. Значить, «Спіріт» згадував щось між перезавантаженнями, що було причиною збою. Це вказувало на флеш-пам'ять (як у вашій цифровій камері), або на незначний за обсягом блок пам'яті EEPROM, або на апаратний збій. Флеш-пам'ять використовується на марсоході як жорсткий диск у вас на комп'ютері — там зберігається файлова система.

Знову ж таки, генії-розробники вбудували для нас «чорний хід». Існував спосіб змусити ровер перезавантажитися без оглядки на файлову систему на флеш-пам'яті. Радіоапаратура, яка отримує сигнал з Землі, здатна декодувати кілька команд своїми силами, т. зв. апаратні команди. Для їх розпізнавання та виконання взагалі не потрібно комп'ютера. Одна з цих команд — вказати комп'ютера не використовувати файлову систему при завантаженні. Іншої подібної командою можна змусити комп'ютер перезавантажиться.

Тому ось що ми зробили на 21-й сол. Після декількох спроб нам вдалося врешті-решт переможно завантажити «Спірит» у більш-менш здоровому режимі, в якому він відповідав на команди і не мимрив нісенітниця. Яке ж це було полегшення! Ми запросили історію по енергоспоживанню за останні кілька днів, відклали найближчі за графіком сесії зв'язку з орбітальним ретранслятором, і, нарешті, дозволили «Спириту» його давно заслужений і вкрай необхідний сон. На цей раз все вийшло.

Тепер у нас був секретний засіб, щоб змусити «Спірит» працювати. Ровер все ще повинен був прокидатися щоранку в режимі завантажувального циклу, але ми могли швидко послати необхідні команди завантажитися, минаючи файлову систему. Що ми і робили кілька наступних днів. Ми виграли гонку з часом і тепер могли акуратно і методично з'ясувати, що сталося, виправити це і продовжити місію.

Тому я пішов додому і миттєво заснув. Мій будильник продзвенів п'ять годин. Чому? Щоб я міг повернутися в ЛРД і не пропустив посадку «Оппортьюніті» цієї ночі. Кілька годин після того, як ми повернули контроль над «Спіритом», «Оппортьюніті» увірвалася з криком в марсіанську атмосферу на швидкості 12 тис. миль в годину. Посадка пройшла успішно, і ми знову відчули себе впевнено — у нас є два всюдихода, на Марсі, в безпеці. Ух, ну і пригода.

В кінці 21-ого сола була пройдений поворотний пункт в операції по відновленню. Правда, треба ще два тижні для завершення діагностики, вирішення проблем (довелося відформатувати жорсткий диск (флеш-пам'ять) пристрою) і відновлення повної працездатності «Спірита».

По мірі того, як ми відновлювали інформацію, накопичену перед збоєм, ми витягли цю красиву кольорову фотографію прапора США на маніпуляторі Rock Abrasion Tool (RAT). Цей прапор був на захисному кожусі, який був зроблений із залишків веж-близнюків Всесвітнього торгового центру. RAT був розроблений і створений в Манхеттені, в парі кварталів від того місця, де були вежі. Ми помістили цю картинку із зірками та смугами на великих моніторах в нашому центрі керування, і я програв наш національний гімн. Всі стояли, приклавши руку до серця. Це був хороший момент.

З тих пір «Спірит» функціонував просто чудово, не беручи до уваги такі ознаки віку, як посилений шум мотора. У той час як я пишу це, «Спіріт» подолав позначку в 967 солов. Дев'ятсот шістдесят сім?! Почекайте, тут якась помилка. Дайте-но перевірю… Н-ні, все так. Неймовірно.

Ви, напевно, гадаєте, що було основною причиною збою на 18-й сол. У кінцевому рахунку, ми зрозуміли, що це була просто помилка в програмному забезпеченні ровера, яку ми не відловили на стадії тестування. По мірі збору нами інформації об'єм використаної пам'яті все більше і більше збільшувався. На 18-й сол блок пам'яті заповнився, і процес перезавантаження припинявся через неможливість прочитати файлову систему. Взагалі-то, ми замислювалися над можливими проблемами після численних відпрацьованих солов. Щоб спростувати ці підозри, ми провели 10-солный тест перед посадкою. Але ми не проводили 18-солный тест. Поки «Спірит» не провів його за нас на Марсі, так.

Напевно, ще не раз нам зустрінуться серйозні помилки програмного забезпечення на інших космічних кораблях. Але я гарантую, подібна помилка більше не застане нас зненацька.

За допомогу з перекладом спасибі Сергію Даньшину.


Захід сонця на Марсі. Знімок марсохода «Spirit»

Робота над помилками
Для тих, кому потрібна конкретика і деталі, буде корисний звіт, де детально описана послідовність подій, виявлена ключова причина, прописані витягнуті уроки і які зміни впровадили у зв'язку з виявленими недоліками.

The Mars Rover Spirit FLASH Anomaly (Glenn Reeves, Tracy Neilson, Jet Propulsion Laboratory)



Ще приклад, як розробники NASA працюють над помилками. З рекомендаціями — MER Spirit Flash Memory Anomaly (2004)

Цікаві факти
  • Spirit перзагружал себе 60 разів протягом двох днів.

  • Комп'ютер марсохода був оснащений 32-bit Rad 6000 мікропроцесором, протирадіаційного версією чіпа PowerPC (який використовувався в деяких маках). Швидкість — 20 мільйонів операцій в секунду.

  • Всього у цього комп'ютера три види пам'яті: 128 Мбайт оперативної, яка стирається при відключенні живлення, 256 Мбайт енергонезалежній флеш-пам'яті для зберігання даних і, нарешті, електрично програмований ПЗУ, де зберігається еталонна копія.

  • Польотне ЗА повністю написано на C запускається на vxWorks. Наземний софт — це суміш C, C++, Fortran, Perl і Java (і може трохи чогось ще).

  • Велика частина коду Stereo Vision і Rover Navigation Software (близько 70 000 рядків) написані на C++. Ще трохи коду написано на С і асемблері для оптимізації.

[Джерело — c2.com/cgi/wiki?MarsSpiritSoftwareProblem]


Як в Edison відбувається процес тестування софта для системи моніторингу електромережі і візуалізації подій або рентгенівського томографа дивіться у ролику:


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.